我现在通过SHChangeNotifyRegister       SHChangeNotifyDeregister 
 SHNotify_GetEventStr(strPath1, strPath2 As String, dwEventID As Long)
函数获取计算机的操作事件进行记录。
用过的朋友肯定都知道用法
但是我现在有点问题,问题是这样的:我先新建一个文本文档,暂且命名为test.txt,放在D盘根目录下。我用各种方式打开test.txt,希望能够记录日志内容为:打开C:\test.txt
1、如果我双击直接用文本文档打开,会记录:打开C:\test.txt,这个是预期结果
2、如果我右击,选择打开方式,然后在打开方式中选择记事本,记录:打开无标题-记事本,这跟预期的结果不符合。
3、如果我右击,选择打开方式,然后再打开方式中选择UltraEdit,记录:打开:UltraEdit,这跟预料的结果也不符合。用过的朋友知道怎么解决吗?
急。

解决方案 »

  1.   

    见过个代码,通过HOOK系统消息,就知道文件创建、打开、删除等任何事件。
      

  2.   

    我大致明白你想说什么了,你是不是想说你用着两个函数监视计算机的操作。当你直接双击Text1.Txt时,会记录到“打开C:\test.txt”,但是如果你用打开方式去选择一个程序去打开这个文件,就只能够记录到“打开XXX程序”,是吗?如果是这样,这是与Windows对文件的控制有关。直接双击,Windows的文件系统会判断到打开该文件,然后Windows才通过注册表找到对应格式应该用的程序,然后启动这个程序,并将文件路径作为命令行参数传给应用程序。既然Windows能判断到是打开文件的操作,自然你就可以监视到。但是,如果你选择打开方式,Windows就不是当成打开文件的操作了,因为Windows不再需要去注册表选择程序,需要用的程序已经由你自己指定,所以Windows制作了一个很简单的操作,就是像你用运行命令一样,直接运行程序,所以记录到的是打开程序而不是打开文件。尽管在你的理解里是“用程序打开了文件”,所以应该监视到打开文件的命令,其实是没有的。如果你要知道在你用打开方式选择程序来打开文件的时候,打开了什么文件,你就必须截获Windows到底发送了一个怎样的命令行给应用程序,而最简单的是:“notepad.exe D:\test.txt”,就是用记事本打开。你试一下启动你的监视,在开始菜单里打开运行对话框,将上面的输入进去,然后运行,你就会发现记录到的是“运行notepad”
      

  3.   

    所谓“未公开的函数”,在.NET早就封装成了FileSystemWatcher。
      

  4.   

    如果楼主用VB6的话, 可以考虑下WMI, 不用这么复杂的
      

  5.   

    我也用这些API做过文件监视程序,但这些API只能对windows系统中一部分打开文件的操作进行监听。
    想要真正做到监视文件操作,需要写文件驱动,就像那些杀毒软件、防火墙软件。
    参考一下filemon,开源的,但不是VB写的。