监视程序的编制

转载 2006年05月24日 09:12:00

(哈尔滨 赵晓辉)

  监视程序,这个名字听起来似乎很陌生。它的用途主要是在后台监视系
统中关键信息的改变,比如注册表的改变及硬盘上由于文件操作引起的改变
等等。
  也许有人会问了,编制这样的程序有什么价值呢?硬盘上文件改变了,
我只要在资源管理器里点一点不就全都清楚了吗?问题当然不会这样简单,
如今大家的硬盘都已经用G来做单位了,一块4.3G的硬盘中,大大小小的文
件全都加起来也会有若干万(相信新购机的朋友会考虑IBM10.1G的大硬盘,
那文件数量将更加不可想象),更何况那些看不见的系统文件和隐藏文件
了。再加上注册表,那其中的条条款款,数量也丝毫不逊于硬盘上的文件。
要想随时知道自己机器是否有所变动,绝对不是一件很轻松的事。而监视
程序就可以随时检测到这些变化,帮助我们了解这些情况。
  当然这只是监视程序的一部分作用,它最大的作用就是可以记录下某
个软件安装前后系统的改变,从而为卸载这个软件提供重要的依据。虽然
Windows自带了一个Uninstall Shield,但是它似乎并不能很干净地把原来
的软件卸掉,每次卸载总会留下一些讨厌的残渣,致使系统中的垃圾信息
不断增长,我们的硬盘空间也总是莫名其妙地越用越少。因此,一些号称
能够完全卸载软件的专用卸载工具应运而生。在这其中,有一些就运用了
监视系统的技术,比如Uninstaller Manager和RegMonitor。
  下面我们开始讨论如何编程实现这一监视功能。首先介绍几个重要的
api函数:
  FindFirstChangeNotification( );
  FindNextChangeNotification( );
  WaitForSingleObject( ); 
  其中FindFirstChangeNotification(lpzpath,fwatchsubtree,fdwfilter)
中的lpzpath表示要监视的路径名,fwatchsubtree判断是否查看子目录,
fdwfilter为要监视的事件,函数执行成功后返回一个句柄。 
  参数fdwfilter取值及其含义如下:
  FILE_NOTIFY_CHANGE_FILE_NAME
  查看指定目录下任何文件名的改变
  FILE_NOTIFY_CHANGE_DIR_NAME
  查看指定目录下任何目录名的改变
  FILE_NOTIFY_CHANGE_SIZE
  查看指定目录下文件大小的改变
  FILE_NOTIFY_CHANGE_ATTRIBUTES
  查看指定目录下文件属性的改变
  FindNextChangeNotification(hchange),hchan
  ge为FindFirstChangenNotification返回的句柄,其作用是请求系统
在下次检测到相应改变时发出改变通知消息句柄。当函数成功返回后,应
用程序可通过WaitForMultipleObjects或WaitfForSingleObject来等待发
生改变的通知。WaitForSingleObject(hchange,dwmilliseconds)中
hchange为FindFirstChangeNotification 返回的句柄,dwmilliseconds
为等待时间值,指定等待完成需要的时间,单位为毫秒。该值为-1时表
示时间无限长。最好在结束监视程序之前先用FindCloseChangeNotification(hchange)
来关闭句柄。
  下面给出一个简单的实例,其功能就是监视c:/pwin98目录下是否
有文件发生变化。一旦有重命名、创建或删除情况发生时,通过Edit控
件给出提示。 
  //
  ----------------
  #include 
  #pragma hdrstop
  
  #include “Unit1.h”
  //----------------
  #pragma package(smart_init)
  #pragma resource “*.dfm”
  TForm1 *Form1;
  //-----------------
  __fastcall TForm1::TForm1(TComponent* Owner)
   : TForm(Owner)
  {
  }
  //-------------------
  
  void __fastcall TForm1::FormCreate(TObject *Sender)
  {
  DWORD dwWaitStatus; 
  HANDLE dwChangeHandle; //返回通知的句柄
  dwChangeHandle=FindFirstChangeNotification(
  “C://PWIN98”,false,FILE_NOTIFY_CHANGE_FILE_NAME); //设置返回通知的句柄
  if(dwChangeHandle==INVALID_HANDLE_value)
  //判断是否设置成功 
   ExitProcess(GetLastError( )); 
  while(true){ //设置循环,监视是否有
  dwWaitStatus=WaitForSingleObject(dwChangeHandle,-1); //通知返回
  switch(dwWaitStatus){
  case 0:
  Edit1->Text=“Something Changed”; //给出提示
  FindCloseChangeNotification(dwcChangeHandle); //关闭句柄
  exit(EXIT_SUCCESS); //退出程序
  default:
  ExitProcess(GetLastError( ));
  }
  }
  }
  程序在C++Builder4/PWin98下通过,由于C++Builder语言很标
准,所以很容易扩展到其他编程语言环境中去。
  此例说明如何监视硬盘中文件变化,对于注册表,则有函数
RegNotifyChangeKeyvalue( )可以实现类似功能,这里暂省略之。
  怎么样,看过本文,是否对Uninstaller Manager和Reg Monitor这
样的软件有了更深入的了解。在Windows编程中,有些API函数起到了重要
的作用,可以让程序实现很多高级的功能。因为API函数是按照C语言语法
给出的,所以C++Builder有着得天独厚的优势,对API函数和宏支持得
非常好。

VC-监视程序的编制

监视程序,这个名字听起来似乎很陌生。它的用途主要是在后台监视系统中关键信息的改变,比如注册表的改变及硬盘上由于文件操作引起的改变等等。 也许有人会问了,编制这样的程序有什么价值呢?硬盘上文件改变了,...

【数据结构实验】编制一个程序求解迷宫通路

#include #include using namespace std; #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #...

第二周【项目1】 编制三个程序,分别调用三个版本的交换函数,观察结果

/* * Copyright(c) 2015,烟台大学计控学院 * All rights reserved. * 文件名称 :mmh.cpp * 作 者 :马鸣挥 * 完成时间 :20...
  • mmh886
  • mmh886
  • 2015年09月14日 08:55
  • 348

编制模拟“五个哲学家”问题的程序(unix操作系统系)---4

编制模拟“五个哲学家”问题的程序 一.实验目的 学习和掌握并发进程同步的概念和方法。 二.实验要求 1、程序语法   philosopher   [ -t  ] 是哲学家进餐和沉思的持续...

MFC 打印程序的编制

MFC 打印程序的编制 MFC 在实现打印编程工作时已经建立了一个已有的框架,我们只要往这个框架里面填东西即可。 打印工作其实就是在 DC 上绘图,不过这里的 DC 是打印机的 DC ,...

第8周 C语言及程序设计提高例程-31 编制自己的字符串函数

1、字符串复制; 问题及代码: #include char *scopy(char *s1,char *s2); int main() { char s1[50]; scopy(s1,"I a...

C语言及程序设计提高例程-31 编制自己的字符串函数

贺老师教学链接  C语言及程序设计提高 本课讲解字符串复制#include char *scopy(char *str1, const char *str2); int main() { c...

OpenCV244 +VS2010下编制的摄像头摄像程序

OpenCV244+VS2010下编制的摄像头摄像程序   学习OpenCV244编制的摄像程序.。 一、主要功能: 1.     开始摄像; 2.     暂停摄像并对对取景框图像存盘; ...

编制三个程序,分别调用三个版本的swap交换函数,观察结果,并对结果进行分析。

问题及代码: /* *Copyright (c) 2014 , 烟台大学计算机学院 *All right resvered . *文件名称: test.cpp *作 者: 郑兆涵 *完成日期: ...

C++程序设计实验报告(十四)----编制一个三角函数表

第13周报告3: 实验目的:学会使用自定义函数解决实际问题,学会函数的嵌套调用 实验内容:编制一个三角函数表 * 程序头部注释开始(为避免提交博文中遇到的问题,将用于表明注释的斜杠删除了) ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:监视程序的编制
举报原因:
原因补充:

(最多只允许输入30个字)