〜 ファイル 〜
ゴミ箱の中身を削除 (要SHELL32.DLL)

エクスプローラで削除(ゴミ箱へ移動)したファイル、またはコチラの命令で削除させた場合、
「ごみ箱」で削除ファイル一覧を確認することができ、個別または全てのファイルを元のフォルダに戻したり、
エクスプローラからは操作できないよう完全に削除してしまって空き容量を増やすことが可能です。
今回は、API関数SHEmptyRecycleBinで「ごみ箱を空にする」作業をしてみます。
通常、デスクトップに表示されるゴミ箱は、全ての削除ファイルを確認できますが、
ゴミ箱は各ドライブ毎に持っており、一括操作はドライブ単位または全ドライブで行うようになってます。
今回のサンプルモジュールでも、ドライブ名「C:¥」等を指定すればそのドライブだけが、
空文字「""」を指定すれば全ドライブが対象となって、削除することが可能です。
また、デフォルトで削除前に中止する確認メッセージを表示しない「SHERB_NOCONFIRMATION(=0x0001)」、
進行状況を示すプログレスバーを表示しない「SHERB_NOPROGRESSUI(=0x0002)」、
処理完了時のサウンドを鳴らさない「SHERB_NOSOUND(=0x0004)」の合計値を指定できます。
尚、削除が成功するとstatに「S_OK(=0x0000)」が、失敗すると
実装されていない「E_NOTIMPL(=0x80004001)」、
操作が中止された「E_ABORT(=0x80004004)」、
規定されていない「E_FAIL(=0x80004005)」、
必要なメモリ割当に失敗「E_OUTOFMEMORY(=0x8007000E)」、
1つ以上の引数が無効「E_INVALIDARG(=0x80070057)」、
非サポートのインタフェイス「E_NOINTERFACE(=0x80004002)」、
無効なポインタ「E_POINTER(=0x80004003)」、
無効なハンドル「E_HANDLE(=0x80070006)」、
一般的なアクセス拒否「E_ACCESSDENIED(=0x80070005)」、
予測不可能なエラー「E_UNEXPECTED(=0x8000FFFF)」のいずれかが返ります。
	

emptydustbin 対象ドライブ, オプション
対象ドライブゴミ箱内ファイルのうち、完全に消去するドライブを指定する。尚、空文字指定で全ドライブが対象。
オプション下記の合計値を指定する。
「0x0001」削除前の確認を表示しない。
「0x0002」プログレスウィンドウを表示しない。
「0x0004」削除完了時のサウンドを鳴らさない。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
	ll_libload shell, "shell32.dll"
	ll_getproc SHEmptyRecycleBin, "SHEmptyRecycleBinA", shell

#module
#deffunc emptydustbin str, int
	mref drive, 3 : mref option, 1
	mref stt, 64
	prm = 0, 0, option
	ll_getptr drive : ll_ret prm.1
	ll_callfunc prm, 3, SHEmptyRecycleBin@
	ll_ret prm : stt = prm
	return
#global

	emptydustbin "d:\\", 1
	if stat { // 削除の確認をせずにDドライブのゴミ箱を削除
		mes "削除に失敗しました"
	} else {
		mes "削除に成功しました"
	}
	stop

emptydustbin 対象ドライブ, オプション
対象ドライブゴミ箱内ファイルのうち、完全に消去するドライブを指定する。尚、空文字指定で全ドライブが対象。
オプション下記の合計値を指定する。
「0x0001」削除前の確認を表示しない。
「0x0002」プログレスウィンドウを表示しない。
「0x0004」削除完了時のサウンドを鳴らさない。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
#uselib "shell32.dll"
#cfunc global SHEmptyRecycleBin "SHEmptyRecycleBinA" int, str, int

#module
#defcfunc emptydustbin str drive, int option
	return SHEmptyRecycleBin(0, drive, option)
#global

	if emptydustbin("d:\\", 1) { // 削除の確認をせずにDドライブのゴミ箱を削除
		mes "削除に失敗しました"
	} else {
		mes "削除に成功しました"
	}