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>&nbsp;&nbsp;</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>&nbsp;&nbsp;&nbsp;&nbsp; </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>&nbsp;&nbsp;&nbsp;&nbsp;监视程序的编制</B>&nbsp;&nbsp;&nbsp;&nbsp;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>&nbsp;&nbsp;&nbsp;&nbsp;监视程序的编制</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>&nbsp;&nbsp;&nbsp;&nbsp;<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-&gt;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 &copy; 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 + -
显示快捷键?