用FindFirstChangeNotification()和FindCloseChangeNotification(),我不能提供程序给你,这是由于版权属于别人,不好意思那,你查madn吧。
good luck u

解决方案 »

  1.   

      监视程序,它的用途主要是在后台监视系统中关键信息的改变,比如注册表的改变及硬盘上由于文件操作引起的改变等等。下面我们开始讨论如何编程实现这一监视功能。首先介绍几个重要的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),hchange为FindFirstChangenNotification返回的句柄,其作用是请求系统在下次检测到相应改变时发出改变通知消息句柄。当函数成功返回后,应用程序可通过WaitForMultipleObjects或WaitfForSingleObject来等待发生改变的通知。 WaitForSingleObject(hchange,dwmilliseconds)中hchange为FindFirstChangeNotification 返回的句柄,dwmilliseconds为等待时间值,指定等待完成需要的时间,单位为毫秒。该值为-1时表示时间无限长。最好在结束监视程序之前先用FindCloseChangeNotification(hchange)来关闭句柄。
      下面给出一个简单的实例,其功能就是监视c:\pwin98目录下是否有文件发生变化。一旦有重命名、创建或删除情况发生时,通过Edit控件给出提示。 
            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); //通知返回
        if(dwWaitStatus==0){
          MessageBox(NULL,"Notification",“Something Changed”,MB_OK); //给出提示
             FindCloseChangeNotification(dwcChangeHandle); //关闭句柄
          exit(EXIT_SUCCESS); //退出程序
        }
      }
      此例说明如何监视硬盘中文件变化,对于注册表,则有函数RegNotifyChangeKeyValue()可以实现类似功能。
      

  2.   

    多谢两位,用FindFirstChangeNotification之类的函数好像是文件变更之后再通知的,如果我想要文件改变之前得到消息,有什么办法吗?是不是要涉及到文件Driver的开发呢?还有一个问题,Hook DLL能做这件事吗?
      

  3.   

    挂上IFS HOOK以后,你就无敌了!
      

  4.   

    多谢xajh,能否再说的明白一点,IFS HOOK是什么?从哪里可以得到?多谢了。
      

  5.   

    go www.sysinternal.com there's a sample to monitor file in driver level
      

  6.   


    http://www.csdn.net/expert/Topic/7167.shtm
    看看吧,这里的精华版还是很有东西的
      

  7.   

    多谢huangzubin,www.sysinternal.com里好像没有啊,是搬家了吗?你知道搬到哪儿去了吗?
      

  8.   

    sorry, i made a mistake, it's www.sysinternals.com
      

  9.   

      我前几天用ATL做了个COM DLLI,实现ICopyHook接口,这种做法可以捕获目录的操作,但对文件不管用。