2011-01-07 12 views
0

私は、ハードディスクスペースを解放しているプロセスの一部としてごみ箱を空にしようとしています。彼はこれまでに得たコードです。私のクラスの上部には:VB6のSHEmptyRecycleBinは何もしません

Private Declare Function SHEmptyRecycleBin Lib "shell32.dll" Alias "SHEmptyRecycleBinA" (ByVal hwnd As Long, ByVal pszRootPath As String, ByVal dwFlags As Long) As Long 
Private Declare Function SHUpdateRecycleBinIcon Lib "shell32.dll"() As Long 

次にハードディスク内の関数をクリーンアップ:

SHEmptyRecycleBin(Empty, vbNullString, 0) 
SHUpdateRecycleBinIcon 

また、私はこの試みた:

Dim lRetVal As Long 
lRetVal = 0 
lRetVal = SHEmptyRecycleBin(Empty, vbNullString, 0) 

をしかし、それは、成功を示すゼロを返します。誰もこの機能をこれまでに使ったことがありますか、それがうまくいかない理由についてアイデアを持っていますか?このコードは、ActiveX DLL内から実行されています。

** EDIT **

私は見てどのような例だと思うので、まあ、私は、私の前に何かを読み違えたり誤解に違いないと思いますが私に確認画面が呼び出されないとの印象を与えました最後の変数に0を使用します。私はこのコードを試しました:

Const SHERB_NOCONFIRMATION = &H1 
Call SHEmptyRecycleBin(0, vbNullString, SHERB_NOCONFIRMATION) 

...それでも動作しません。ただし、ActiveX DLLを呼び出す.exeでこのコードを使用すると、次のようになります。

Const SHERB_NOCONFIRMATION = &H1 
lRetVal = SHEmptyRecycleBin(Empty, vbNullString, SHERB_NOCONFIRMATION) 

...動作します。私はなぜそれが.exeで動作し、.dllでは動作しないのかわかりません。可能であれば.dllにすべてのコードを残したいと思います。

+2

私はこのプログラムがあなた自身のためだけに使用されていることを願います。これは、プログラムがユーザーから遠ざかるようなものを制御するのは良いことではありません。私は自分のごみ箱を清潔に保ちますが、多くのユーザーは、削除操作についての心配がある場合に備えて「そこにぶら下がっている」ことに頼っています。 – Bob77

+1

しかし、それはメインプログラムからここで働くようです。 hWndパラメータの "Empty"は機能しますが、明示的な0がおそらく良い選択であることに注意してください。プロンプトのダイアログが表示されますが、ユーザーに、ごみ箱を空にするように求められていることはありません。 – Bob77

+0

いくつかの点があります。私は実際のユーザーではなく、管理者だけが使用するサーバーをクリーンアップするためにこれを使用しています。私は問題が何かを考え出した。これはスケジュールされたタスクとして、バックグラウンドで作業するユーザーアカウントの下で実行されているので、確認ウィンドウ(私が気づいていなかった)が表示されません。私は、コールがキャンセルで終了していると推測して、キャンセルしたので0を返します。プログラムで削除を確認できるかどうかを調べる必要があると思います。 –

答えて

1

これはsampleです。

基本的にはSHEmptyRecycleBin 0, vbNullString, 0またはCall SHEmptyRecycleBin(0, vbNullString, 0)はOKである必要がありますが、オーナーUIとして使用するには、実際のUIとしてhwndが渡されています。

関連する問題