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