Win32 APIのSHEmptyRecycleBin関数を用いることで、ドライブ毎のごみ箱を空にすることができる。 hWndには呼び出し元のウィンドウハンドルを指定する。 ウィンドウがない場合は、IntPtr.Zeroで問題ない。 dwFlagsには、SHERB_NOCONFIRMATION、 SHERB_NOPROGRESSUI、SHERB_NOSOUNDの値を組み合わせて指定する。 各フラグの説明はコードにある通り。 pszRootPathには、対象のドライブを指定する。 C:\を指定すると、Cドライブのみのごみ箱を空にすることができる。 ちなみに、 pszRootPathに""を指定すると全てのドライブのごみ箱を一度に空にできるが、なぜかWindows 2000では動作しない。
using System;
using System.Runtime.InteropServices;
class EmptyRecycleBin
{
[DllImport( "shell32.dll", CharSet = CharSet.Auto )]
internal static extern uint SHEmptyRecycleBin(
IntPtr hWnd,
string pszRootPath,
uint dwFlags );
/// <summary>削除を確認するダイアログを表示しません。</summary>
internal const int SHERB_NOCONFIRMATION = 0x00000001;
/// <summary>進捗状況を表示するダイアログを表示しません。</summary>
internal const int SHERB_NOPROGRESSUI = 0x00000002;
/// <summary>処理が完了したときに効果音を鳴らしません。</summary>
internal const int SHERB_NOSOUND = 0x00000004;
internal const uint S_OK = 0;
/// <summary>
/// アプリケーションのメイン エントリ ポイントです。
/// </summary>
[STAThread]
static void Main(string[] args)
{
uint result;
result = SHEmptyRecycleBin( IntPtr.Zero, "", SHERB_NOPROGRESSUI | SHERB_NOSOUND );
if ( result == S_OK )
{
Console.WriteLine( "ごみ箱を空にしました。" );
}
else
{
Console.WriteLine( "ごみ箱を空にできませんでした。" );
}
}
}
Imports System
Imports System.Runtime.InteropServices
Class EmptyRecycleBin
<DllImport("shell32.dll", CharSet:=CharSet.Auto)> _
Friend Shared Function SHEmptyRecycleBin( _
ByVal hWnd As IntPtr, _
ByVal pszRootPath As String, _
ByVal dwFlags As Integer) As Integer
End Function
''' <summary>削除を確認するダイアログを表示しません。</summary>
Friend Const SHERB_NOCONFIRMATION As Integer = &H1
''' <summary>進捗状況を表示するダイアログを表示しません。</summary>
Friend Const SHERB_NOPROGRESSUI As Integer = &H2
''' <summary>処理が完了したときに効果音を鳴らしません。</summary>
Friend Const SHERB_NOSOUND As Integer = &H4
Friend Const S_OK As Integer = 0
''' <summary>
''' アプリケーションのメイン エントリ ポイントです。
''' </summary>
Shared Sub Main(ByVal args() As String)
Dim result As Integer
result = SHEmptyRecycleBin(IntPtr.Zero, "", SHERB_NOPROGRESSUI Or SHERB_NOSOUND)
If result = S_OK Then
Console.WriteLine("ごみ箱を空にしました。")
Else
Console.WriteLine("ごみ箱を空にできませんでした。")
End If
End Sub
End Class
出力例
ごみ箱を空にしました。 Press any key to continue