国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

監(jiān)視程序的編制

2019-11-17 05:35:44
字體:
供稿:網(wǎng)友

  監(jiān)視程序,這個(gè)名字聽起來似乎很生疏。它的用途主要是在后臺(tái)監(jiān)視系統(tǒng)中要害信息的改變,比如注冊表的改變及硬盤上由于文件操作引起的改變等等。
  也許有人會(huì)問了,編制這樣的程序有什么價(jià)值呢?硬盤上文件改變了,我只要在資源治理器里點(diǎn)一點(diǎn)不就全都清楚了嗎?問題當(dāng)然不會(huì)這樣簡單,如今大家的硬盤都已經(jīng)用G來做單位了,一塊4.3G的硬盤中,大大小小的文件全都加起來也會(huì)有若干萬(相信新購機(jī)的朋友會(huì)考慮IBM10.1G的大硬盤,那文件數(shù)量將更加不可想象),更何況那些看不見的系統(tǒng)文件和隱藏文件了。再加上注冊表,那其中的條條款款,數(shù)量也絲毫不遜于硬盤上的文件。要想隨時(shí)知道自己機(jī)器是否有所變動(dòng),絕對不是一件很輕松的事。而監(jiān)視程序就可以隨時(shí)檢測到這些變化,幫助我們了解這些情況。
  當(dāng)然這只是監(jiān)視程序的一部分作用,它最大的作用就是可以記錄下某個(gè)軟件安裝前后系統(tǒng)的改變,從而為卸載這個(gè)軟件提供重要的依據(jù)。雖然Windows自帶了一個(gè)Uninstall Shield,但是它似乎并不能很干凈地把原來的軟件卸掉,每次卸載總會(huì)留下一些討厭的殘?jiān)率瓜到y(tǒng)中的垃圾信息不斷增長,我們的硬盤空間也總是莫名其妙地越用越少。因此,一些號稱能夠完全卸載軟件的專用卸載工具應(yīng)運(yùn)而生。在這其中,有一些就運(yùn)用了監(jiān)視系統(tǒng)的技術(shù),比如Uninstaller Manager和RegMonitor。
  下面我們開始討論如何編程實(shí)現(xiàn)這一監(jiān)視功能。首先介紹幾個(gè)重要的api函數(shù):
  FindFirstChangeNotification( );
  FindNextChangeNotification( );
  WaitForSingleObject( );
  其中FindFirstChangeNotification(lpzpath,fwatchsuBTree,fdwfilter)中的lpzpath表示要監(jiān)視的路徑名,fwatchsubtree判定是否查看子目錄,fdwfilter為要監(jiān)視的事件,函數(shù)執(zhí)行成功后返回一個(gè)句柄。
  參數(shù)fdwfilter取值及其含義如下:
  FILE_NOTIFY_CHANGE_FILE_NAME  查看指定目錄下任何文件名的改變
  FILE_NOTIFY_CHANGE_DIR_NAME  查看指定目錄下任何目錄名的改變
  FILE_NOTIFY_CHANGE_SIZE  查看指定目錄下文件大小的改變
  FILE_NOTIFY_CHANGE_ATTRIBUTES  查看指定目錄下文件屬性的改變
  FindNextChangeNotification(hchange),hchange為FindFirstChangenNotification返回的句柄,其作用是請求系統(tǒng)
在下次檢測到相應(yīng)改變時(shí)發(fā)出改變通知消息句柄。當(dāng)函數(shù)成功返回后,應(yīng)用程序可通過WaitForMultipleObjects或WaitfForSingleObject來等待發(fā)生改變的通知。WaitForSingleObject(hchange,dwmilliseconds)中hchange為FindFirstChangeNotification 返回的句柄,dwmilliseconds為等待時(shí)間值,指定等待完成需要的時(shí)間,單位為毫秒。該值為-1時(shí)表示時(shí)間無限長。最好在結(jié)束監(jiān)視程序之前先用FindCloseChangeNotification(hchange)來關(guān)閉句柄。
  下面給出一個(gè)簡單的實(shí)例,其功能就是監(jiān)視c:/pwin98目錄下是否有文件發(fā)生變化。一旦有重命名、創(chuàng)建或刪除情況發(fā)生時(shí),通過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); //設(shè)置返回通知的句柄
  if(dwChangeHandle==INVALID_HANDLE_VALUE)

  //判定是否設(shè)置成功
   ExitProcess(GetLastError( ));
  while(true){ //設(shè)置循環(huán),監(jiān)視是否有
  dwWaitStatus=WaitForSingleObject(dwChangeHandle,-1); //通知返回
  switch(dwWaitStatus){
  case 0:
  Edit1->Text=“Something Changed”; //給出提示
  FindCloseChangeNotification(dwcChangeHandle); //關(guān)閉句柄
  exit(EX99v_SUCCESS); //退出程序
  default:
  ExitProcess(GetLastError( ));
  }
  }
  }
  程序在C++Builder4/PWin98下通過,由于C++Builder語言很標(biāo)準(zhǔn),所以很輕易擴(kuò)展到其他編程語言環(huán)境中去。
  此例說明如何監(jiān)視硬盤中文件變化,對于注冊表,則有函數(shù)RegNotifyChangeKeyValue( )可以實(shí)現(xiàn)類似功能,這里暫省略之。
  怎么樣,看過本文,是否對Uninstaller Manager和Reg Monitor這樣的軟件有了更深入的了解。在Windows編程中,有些API函數(shù)起到了重要的作用,可以讓程序?qū)崿F(xiàn)很多高級的功能。因?yàn)锳PI函數(shù)是按照C語言語法給出的,所以C++Builder有著得天獨(dú)厚的優(yōu)勢,對API函數(shù)和宏支持得非常好。不好,怎么跑題了?
  還愣著干嗎,難道你還不想趕緊動(dòng)手編制一個(gè)自己的Uninstaller Manager嗎?

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 于都县| 曲靖市| 当阳市| 佛山市| 连山| 泽州县| 封丘县| 张家港市| 图木舒克市| 漳州市| 滨海县| 朔州市| 泸州市| 平武县| 专栏| 泾源县| 巴彦淖尔市| 吴川市| 伊宁市| 那曲县| 丹东市| 通化市| 岳阳市| 桂平市| 安多县| 项城市| 芦溪县| 广宗县| 泽州县| 社旗县| 云和县| 五指山市| 长治县| 永平县| 河北省| 慈溪市| 东宁县| 深州市| 呼和浩特市| 霍州市| 冕宁县|