?? csdn_文檔中心_監視程序的編制.htm
字號:
tmpDate = new Date();
date = tmpDate.getDate();
month= tmpDate.getMonth() + 1 ;
if(document.ns)
{
year1=tmpDate.getYear()
year= year1.toString().substr(1,2);
}
else
year= tmpDate.getYear();
document.write(year);
document.write(".");
document.write(month);
document.write(".");
document.write(date);
// -->
</SCRIPT>
</B> </TD></TR>
<TR bgColor=#999999>
<TD colSpan=3 height=1></TD></TR></TBODY></TABLE>
<TABLE border=0 width=770>
<TBODY>
<TR>
<TD align=middle bgColor=#fafafa class=td1 vAlign=top width=150><BR>
<SCRIPT src="CSDN_文檔中心_監視程序的編制.files/microsoft.js"></SCRIPT>
</TD>
<TD align=middle width=620>
<TABLE bgColor=#eeeeee border=0 cellPadding=0 cellSpacing=0 width=600>
<TBODY>
<TR bgColor=#ffffff>
<TD align=middle height=10 width=50></TD>
<TD align=right><A href="http://www.csdn.net/">CSDN</A> - <A
href="http://www.csdn.net/develop/">文檔中心</A> - <FONT
color=#003399>Visual C++</FONT> </TD></TR>
<TR>
<TD align=middle height=5></TD>
<TD align=middle width=500></TD></TR>
<TR>
<TD align=middle bgColor=#003399 height=10><FONT
color=#ffffff>標題</FONT></TD>
<TD><B> 監視程序的編制</B> ghj1976(轉貼)
</TD></TR>
<TR>
<TD align=middle height=5></TD>
<TD align=middle width=500></TD></TR>
<TR>
<TD align=middle bgColor=#003399><FONT color=#ffffff>關鍵字</FONT></TD>
<TD width=500> 監視程序的編制</TD></TR>
<TR>
<TD align=middle height=5></TD>
<TD align=middle width=500></TD></TR>
<TR>
<TD align=middle bgColor=#003399 height=10><FONT
color=#ffffff>出處</FONT></TD>
<TD height=10> <A
href="http://www.pfan.net/">http://www.pfan.net/</A></TD></TR>
<TR>
<TD align=middle height=10></TD>
<TD height=10></TD></TR></TBODY></TABLE><!--文章說明信息結束//-->
<TABLE border=0 width=600>
<TBODY>
<TR>
<TD align=left><BR>監視程序的編制 <BR><BR>(哈爾濱
趙曉輝)<BR><BR> 監視程序,這個名字聽起來似乎很陌生。它的用途主要是在后臺監視系<BR>統中關鍵信息的改變,比如注冊表的改變及硬盤上由于文件操作引起的改變<BR>等等。<BR> 也許有人會問了,編制這樣的程序有什么價值呢?硬盤上文件改變了,<BR>我只要在資源管理器里點一點不就全都清楚了嗎?問題當然不會這樣簡單,<BR>如今大家的硬盤都已經用G來做單位了,一塊4.3G的硬盤中,大大小小的文<BR>件全都加起來也會有若干萬(相信新購機的朋友會考慮IBM10.1G的大硬盤,<BR>那文件數量將更加不可想象),更何況那些看不見的系統文件和隱藏文件<BR>了。再加上注冊表,那其中的條條款款,數量也絲毫不遜于硬盤上的文件。<BR>要想隨時知道自己機器是否有所變動,絕對不是一件很輕松的事。而監視<BR>程序就可以隨時檢測到這些變化,幫助我們了解這些情況。<BR> 當然這只是監視程序的一部分作用,它最大的作用就是可以記錄下某<BR>個軟件安裝前后系統的改變,從而為卸載這個軟件提供重要的依據。雖然<BR>Windows自帶了一個Uninstall
Shield,但是它似乎并不能很干凈地把原來<BR>的軟件卸掉,每次卸載總會留下一些討厭的殘渣,致使系統中的垃圾信息<BR>不斷增長,我們的硬盤空間也總是莫名其妙地越用越少。因此,一些號稱<BR>能夠完全卸載軟件的專用卸載工具應運而生。在這其中,有一些就運用了<BR>監視系統的技術,比如Uninstaller
Manager和RegMonitor。<BR> 下面我們開始討論如何編程實現這一監視功能。首先介紹幾個重要的<BR>api函數:<BR> FindFirstChangeNotification(
);<BR> FindNextChangeNotification( );<BR> WaitForSingleObject( );
<BR> 其中FindFirstChangeNotification(lpzpath,fwatchsubtree,fdwfilter)<BR>中的lpzpath表示要監視的路徑名,fwatchsubtree判斷是否查看子目錄,<BR>fdwfilter為要監視的事件,函數執行成功后返回一個句柄。
<BR> 參數fdwfilter取值及其含義如下:<BR> FILE_NOTIFY_CHANGE_FILE_NAME<BR> 查看指定目錄下任何文件名的改變<BR> FILE_NOTIFY_CHANGE_DIR_NAME<BR> 查看指定目錄下任何目錄名的改變<BR> FILE_NOTIFY_CHANGE_SIZE<BR> 查看指定目錄下文件大小的改變<BR> FILE_NOTIFY_CHANGE_ATTRIBUTES<BR> 查看指定目錄下文件屬性的改變<BR> FindNextChangeNotification(hchange),hchan<BR> ge為FindFirstChangenNotification返回的句柄,其作用是請求系統<BR>在下次檢測到相應改變時發出改變通知消息句柄。當函數成功返回后,應<BR>用程序可通過WaitForMultipleObjects或WaitfForSingleObject來等待發<BR>生改變的通知。WaitForSingleObject(hchange,dwmilliseconds)中<BR>hchange為FindFirstChangeNotification 返回的句柄,dwmilliseconds<BR>為等待時間值,指定等待完成需要的時間,單位為毫秒。該值為-1時表<BR>示時間無限長。最好在結束監視程序之前先用FindCloseChangeNotification(hchange)<BR>來關閉句柄。<BR> 下面給出一個簡單的實例,其功能就是監視c:\pwin98目錄下是否<BR>有文件發生變化。一旦有重命名、創建或刪除情況發生時,通過Edit控<BR>件給出提示。
<BR> //<BR> ----------------<BR> #include <BR> #pragma
hdrstop<BR> <BR> #include
“Unit1.h”<BR> //----------------<BR> #pragma
package(smart_init)<BR> #pragma resource “*.dfm”<BR> TForm1
*Form1;<BR> //-----------------<BR> __fastcall
TForm1::TForm1(TComponent* Owner)<BR> :
TForm(Owner)<BR> {<BR> }<BR> //-------------------<BR> <BR> void
__fastcall TForm1::FormCreate(TObject *Sender)<BR> {<BR> DWORD
dwWaitStatus; <BR> HANDLE dwChangeHandle;
//返回通知的句柄<BR> dwChangeHandle=FindFirstChangeNotification(<BR> “C:\\PWIN98”,false,FILE_NOTIFY_CHANGE_FILE_NAME);
//設置返回通知的句柄<BR> if(dwChangeHandle==INVALID_HANDLE_VALUE)<BR> //判斷是否設置成功
<BR> ExitProcess(GetLastError( )); <BR> while(true){
//設置循環,監視是否有<BR> dwWaitStatus=WaitForSingleObject(dwChangeHandle,-1);
//通知返回<BR> switch(dwWaitStatus){<BR> case
0:<BR> Edit1->Text=“Something Changed”;
//給出提示<BR> FindCloseChangeNotification(dwcChangeHandle);
//關閉句柄<BR> exit(EXIT_SUCCESS);
//退出程序<BR> default:<BR> ExitProcess(GetLastError( ));<BR> }<BR> }<BR> }<BR> 程序在C++Builder4/PWin98下通過,由于C++Builder語言很標<BR>準,所以很容易擴展到其他編程語言環境中去。<BR> 此例說明如何監視硬盤中文件變化,對于注冊表,則有函數<BR>RegNotifyChangeKeyValue(
)可以實現類似功能,這里暫省略之。<BR> 怎么樣,看過本文,是否對Uninstaller Manager和Reg
Monitor這<BR>樣的軟件有了更深入的了解。在Windows編程中,有些API函數起到了重要<BR>的作用,可以讓程序實現很多高級的功能。因為API函數是按照C語言語法<BR>給出的,所以C++Builder有著得天獨厚的優勢,對API函數和宏支持得<BR>非常好。不好,怎么跑題了?<BR> 還愣著干嗎,難道你還不想趕快動手編制一個自己的Uninstaller
Manager嗎?<BR><BR></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE><BR>
<TABLE align=center bgColor=#006699 border=0 cellPadding=0 cellSpacing=0
width=770>
<TBODY>
<TR bgColor=#006699>
<TD align=middle bgColor=#006699 id=white><FONT
color=#ffffff>對該文的評論</FONT></TD>
<TD align=middle>
<SCRIPT src="CSDN_文檔中心_監視程序的編制.files/readnum.htm"></SCRIPT>
</TD></TR></TBODY></TABLE><BR>
<DIV align=center>
<TABLE align=center bgColor=#cccccc border=0 cellPadding=2 cellSpacing=1
width=770>
<TBODY>
<TR>
<TH bgColor=#006699 id=white><FONT
color=#ffffff>我要評論</FONT></TH></TR></TBODY></TABLE></DIV>
<DIV align=center>
<TABLE border=0 width=770>
<TBODY>
<TR>
<TD>你沒有登陸,無法發表評論。 請先<A
href="http://www.csdn.net/member/login.asp?from=/Develop/read_article.asp?id=408">登陸</A>
<A
href="http://www.csdn.net/expert/zc.asp">我要注冊</A><BR></TD></TR></TBODY></TABLE></DIV><BR>
<HR noShade SIZE=1 width=770>
<TABLE border=0 cellPadding=0 cellSpacing=0 width=500>
<TBODY>
<TR align=middle>
<TD height=10 vAlign=bottom><A
href="http://www.csdn.net/intro/intro.asp?id=2">網站簡介</A> - <A
href="http://www.csdn.net/intro/intro.asp?id=5">廣告服務</A> - <A
href="http://www.csdn.net/map/map.shtm">網站地圖</A> - <A
href="http://www.csdn.net/help/help.asp">幫助信息</A> - <A
href="http://www.csdn.net/intro/intro.asp?id=2">聯系方式</A> - <A
href="http://www.csdn.net/english">English</A> </TD>
<TD align=middle rowSpan=3><A
href="http://www.hd315.gov.cn/beian/view.asp?bianhao=010202001032100010"><IMG
border=0 height=48 src="CSDN_文檔中心_監視程序的編制.files/biaoshi.gif"
width=40></A></TD></TR>
<TR align=middle>
<TD vAlign=top>百聯美達美公司 版權所有 京ICP證020026號</TD></TR>
<TR align=middle>
<TD vAlign=top><FONT face=Verdana>Copyright © CSDN.net, Inc. All rights
reserved</FONT></TD></TR>
<TR>
<TD height=15></TD>
<TD></TD></TR></TBODY></TABLE></DIV>
<DIV></DIV><!--內容結束//--><!--結束//--></BODY></HTML>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -