AutoHotkey – ゴミ箱を空にするショートカット

macにはごみ箱を空にするショートカットがありWindowsにはそれがなかったのでAutoHotkeyを使って簡易的ではあるが作ってみました。

; ゴミ箱を空にするショートカット
#HotIf WinActive("ahk_exe explorer.exe")
    ; Empty the Trash
    ^+Delete:: {
        CheckRecycleBinEmpty(){
            shell := ComObject("Shell.Application")
            rbin := shell.NameSpace(10)
            return rbin.Items().Count = 0
        }

        if CheckRecycleBinEmpty(){
            Run "shell:RecycleBinFolder"
            Sleep 700
            delete := MsgBox("ゴミ箱にある【" . CheckRecycleBinEmpty() . "個】の項目を完全に削除しますか?", , "YesNo 4096")
            if delete = "Yes"
                FileRecycleEmpty
        }else{
            MsgBox "ごみ箱は空です。"
        }        
    }
#HotIf

解説

コードについて簡単に説明をします。まずエクスプローラーがアクティブな時のみ動作するようになっています。その状態でCtrl + Shift + Deleteを押すとダイアログボックスが表示されYesを押すとゴミ箱のデータが削除されます。

CheckRecycleBinEmpty(){
    shell := ComObject("Shell.Application")
    rbin := shell.NameSpace(10)
    return rbin.Items().Count
}

続いてCheckRecycleBinEmptyはゴミ箱にファイルが存在するかのチェックになります。COMオブジェクトを生成してエクスプローラーの機能のインスタンスを生成します。Component Object Model(COM)とは提供されていうオブジェクトを利用することで様々なアプリケーション操作が可能になります。今回はShellオブジェクトを利用するため"Shell.Application"とインスタンス化します。

shell.NameSpace()の引数にフォルダーパスまたは値を入力することでパスを取得することができます。ゴミ箱の場合10となります。取得したいパスについてはShellSpecialFolderConstantsを調べてみてください。

rbin.Items().Countでそのゴミ箱内にある数を数えます。

Sleep 500はゴミ箱の起動が遅いためその後の処理を遅らせてMsgBoxを表示させています。MsgBoxがごみ箱フォルダーの下に表示されてポップアップが見えないためです。

if CheckRecycleBinEmpty(){
    Run "shell:RecycleBinFolder"
    Sleep 700
    delete := MsgBox("ゴミ箱にある【" . CheckRecycleBinEmpty() . "個】の項目を完全に削除しますか?", , "YesNo 4096")
    if delete = "Yes"
        FileRecycleEmpty
}else{
    MsgBox "ごみ箱は空です。"
}        

もし返しがfalse(0)の場合はごみ箱は空です。と表示されます。

もし値があれば削除する処理に入ります。ゴミ箱を起動してメッセージボックスを起動させて【はい】を押せば空になる処理になります。

ゴミ箱のウィンドウの起動が遅いためSleepで遅らせています。また、ごみ箱のフォルダーが起動していると開かないのでご注意。

参考