由於畢業設計項目是基於U盤防御的軟件,所以涉及些系統應用的知識.本文主要講述的是如何通過C#代碼實現清空回收站的資源.主要通過SHEmptyRecycleBin函數實現.
SHEmptyRecycleBin函數功能是清空指定驅動的回收站.函數如下:
HRESULT SHEmptyRecycleBin( HWND hwnd, //父窗口句柄 LPCTSTR pszRootPath, //將要清空的回收站的地址 DWORD dwFlags //用於清空回收站的功能參數 );
該函數在shell32.dll下,其中LPCTSTR pszRootPath指向要清空的回收站的地址,如果為空時,則清空所有驅動器上的回收站.dwFlags參數可以有三個不同的值,可為一個或多個組合,用以設定是否要彈出系統對話框、是否顯示刪除進度條的UI和當刪除完成時,是否播放聲音.
const int SHERB_NOCONFIRMATION = 0x000001; //不顯示確認刪除的對話框 const int SHERB_NOPROGRESSUI = 0x000002; //不顯示刪除過程的進度條 const int SHERB_NOSOUND = 0x000004; //當刪除完成時,不播放聲音
清空回收站中的文件的SHEmptyRecycleBin是一個內核API方法,該方法在C#中需要手動的引入方法所在的類庫.同時因為調用了Windows API,所以要添加對System.Runtime.IneropServices命名空間的引用;該方法在C#中的聲明語法如下:
DllImportAttribute("shell32.dll")] //聲明API函數 private static extern int SHEmptyRecycleBin(IntPtr handle, string root, int falgs);
程序代碼如下:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Runtime.InteropServices; namespace ClearRecycle { public partial class Form1 : Form { const int SHERB_NOCONFIRMATION = 0x000001; //不顯示確認刪除的對話框 const int SHERB_NOPROGRESSUI = 0x000002; //不顯示刪除過程的進度條 const int SHERB_NOSOUND = 0x000004; //當刪除完成時,不播放聲音 public Form1() { InitializeComponent(); } [DllImportAttribute("shell32.dll")] //聲明API函數 private static extern int SHEmptyRecycleBin(IntPtr handle, string root, int falgs); //點擊"清空回收站"按鈕 private void button1_Click(object sender, EventArgs e) { SHEmptyRecycleBin(this.Handle, "", SHERB_NOCONFIRMATION + SHERB_NOPROGRESSUI + SHERB_NOSOUND); } } }
代碼中dwFlags值為“SHERB_NOCONFIRMATION + SHERB_NOPROGRESSUI + SHERB_NOSOUND”表示刪除時不顯示確認刪除對話框,不顯示刪除過程的進度條,同時不播放聲音.如果不指定預設狀態,為0時會彈出系統的對話框和聲音.
如果SHEmptyRecycleBin(this.Handle,"",0);時提示如下確認刪除對話框,如果項目過多時會顯示刪除的進度條.
如果刪除文件時,沒有顯示聲音,可以通過控制面板上面修改.如下圖所示:
該文章主要是結合自己的畢業設計部分,同時查看相應書籍和參考下面幾位博主完成.是一篇基礎性應用文章,希望大家關注level up的文章,他的文章真心有用,似乎是台灣的一位智者.也將是我將來學習的主要對象.非常感謝他帶來這麼有用的系列文章.
http://www.dotblogs.com.tw/larrynung/archive/2012/09/26/75065.aspx
最後希望該文章對大家有所幫助,如果有不足或錯誤的地方見諒!由於參考的令幾篇文章都是轉載,沒有找到原作者,但同樣感謝!
(By:Eastmount 2014-1-17 晚9點http://blog.csdn.net/eastmount)