[C#]使用SHEmptyRecycleBin API清除資源回收桶

[C#]使用SHEmptyRecycleBin API清除資源回收桶

玩了一下怎樣刪除檔案並送到資源回收桶,就會想到送到資源回收桶後要怎樣刪除,這邊稍微研究並記錄一下。

 

要清除資源回收桶,我們可以透過SHEmptyRecycleBin API,下面是它的函式原型。

  _In_opt_  HWND hwnd,
  _In_opt_  LPCTSTR pszRootPath,
  DWORD dwFlags
);

 

裡面比較重要的是dwFlags這個參數,它可以有三個不同的值,用以設定是否要彈出系統對話框、是否顯示刪除進度的UI、以及是否要撥放刪除的聲音。

SHERB_NOCONFIRMATION No dialog box confirming the deletion of the objects will be displayed.
SHERB_NOPROGRESSUI No dialog box indicating the progress will be displayed.
SHERB_NOSOUND No sound will be played when the operation is complete.

 

如果都不指定就是預設的狀態,會彈出系統對話框詢問使用者,還會有刪除的進度與聲音。

image

 

這邊對應到的C# P/Invoke程式碼會像下面這樣:

{
	SHERB_NOCONFIRMATION = 0x00000001,
	SHERB_NOPROGRESSUI = 0x00000002,
	SHERB_NOSOUND = 0x00000004
}
...
[DllImport("Shell32.dll", CharSet = CharSet.Unicode)]
static extern uint SHEmptyRecycleBin(IntPtr hwnd, string pszRootPath, RecycleFlags dwFlags);

 

使用上就將需要的參數帶入就可以了。要特別注意到的是SHEmptyRecycleBin API的回傳值若是非S_OK (0)就是代表有發生錯誤,而回傳的值就是錯誤的代碼。

{
	return SHEmptyRecycleBin(IntPtr.Zero, null, RecycleFlags.SHERB_NOCONFIRMATION | RecycleFlags.SHERB_NOPROGRESSUI | RecycleFlags.SHERB_NOSOUND) == 0;
}

 

Link