監視程序,這個名字聽起來似乎很陌生。它的用途主要是在後台監視中關鍵信息的改變,比如注冊表的改變及硬盤上由於文件操作引起的改變等等。
也許有人會問了,編制這樣的程序有什麼價值呢?硬盤上文件改變了,我只要在資源管理器裡點一點不就全都清楚了嗎?問題當然不會這樣簡單,如今大家的硬盤都已經用G來做單位了,一塊4.3G的硬盤中,大大小小的文件全都加起來也會有若干萬(相信新購機的朋友會考慮IBM10.1G的大硬盤,那文件數量將更加不可想象),更何況那些看不見的系統文件和隱藏文件了。再加上注冊表,那其中的條條款款,數量也絲毫不遜於硬盤上的文件。要想隨時知道自己機器是否有所變動,絕對不是一件很輕松的事。而監視程序就可以隨時檢測到這些變化,幫助我們了解這些情況。
當然這只是監視程序的一部分作用,它最大的作用就是可以記錄下某個軟件安裝前後系統的改變,從而為卸載這個軟件提供重要的依據。雖然Windows自帶了一個Uninstall Shield,但是它似乎並不能很干淨地把原來的軟件卸掉,每次卸載總會留下一些討厭的殘渣,致使系統中的垃圾信息不斷增長,我們的硬盤空間也總是莫名其妙地越用越少。因此,一些號稱能夠完全卸載軟件的專用卸載工具應運而生。在這其中,有一些就運用了監視系統的技術,比如Uninstaller Manager和RegMonitor。
下面我們開始討論如何編程實現這一監視功能。首先介紹幾個重要的api函數:
FindFirstChangeNotification( );
FindNextChangeNotification( );
WaitForSingleObject( );
其中FindFirstChangeNotification(lpzpath,fwatchsubtree,fdwfilter)中的lpzpath表示要監視的路徑名,fwatchsubtree判斷是否查看子目錄,fdwfilter為要監視的事件,函數執行成功後返回一個句柄。