csdn_文档中心_监视程序的编制.htm
来自「csdn10年中间经典帖子」· HTM 代码 · 共 283 行 · 第 1/2 页
HTM
283 行
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 + =
减小字号Ctrl + -
显示快捷键?