这几天公司让我写一个能够监控文件夹中文件大小变化的东东,查阅大量资料后,还有一些迷惑,特发此贴求高人指教
先说一下需求:
就是在当删除一个文件的时候需要钩子勾住,然后可一做一些动作 比如获取文件的大小
在好多的论坛里看到采用钩子和finfirstchangenotification API接口相结合来实现,请问有没有具体的实例
然后我看到好多钩子安装的方法有两种:一种是编写成独立的dll然后注册安装 另一种是使用SetWindowsHookEx api函数请问这两中方法有什么区别 文件夹监控用哪个比较好。

解决方案 »

  1.   

    为什么要使用钩子呢,用 FileSystemWatcher不就行了吗?
      

  2.   

    FileSystemWatcher
    用这个就可以了
     FileSystemWatcher watcher = new FileSystemWatcher("D:\\test");
                watcher.Deleted += new FileSystemEventHandler(watcher_Deleted);
               void watcher_Deleted(object sender, FileSystemEventArgs e)
            {
                //todo;
            }
      

  3.   

    不要用钩子。你可以用FileSystemWatcher,你先看看这篇微软文章:Introduction to Monitoring File System Events
    http://msdn.microsoft.com/en-us/library/ch2s8yd7(VS.71).aspx
      

  4.   

    根据你的需求,你必须使用全局钩子,即HHOOK SetWindowsHookEx(WH_SHELL,HOOKPROC lpfn,HINSTANCE hMod,0);
    WH_SHELL表明你监听shell事件,lpfn钩子函数(单独的标准dll文件中),hMod钩子函数所在动态库的模块句柄,0表明是系统钩子。
    msdn中搜索SetWindowsHookEx,里边有详细的说明,你也可以到VC/DLL和进程里边问。
    特别说明,C#无法写标准dll。但是C#可以调用标准dll.
    强烈建议用VC编写。
      

  5.   

    那vc 写标准的dll主要实现一些什么啊 SetWindowsHookEx 又在什么时候用啊?
      

  6.   

    ,。。用comimport
    实现
    ICopyHook接口吧。具体代码....我环境没有资料,自己google一下吧
      

  7.   

    我看了一写ICopyHook的资料,写完之后怎么用啊
      

  8.   

    我有个好方法:当你打开某个文件时,不是会在系统里的任务管理器里显示相应的信息吗??
    .net里有个Process的类,可以得到当前任务管理器--应用程序里正在运行的程序。代码如下:
    C# code            Process[] ps = Process.GetProcesses();
                
                foreach (Process p in ps)
                {
                    if (p.MainWindowHandle != null)
                    {
                        Console.WriteLine("{0}---{1}", p.MainWindowTitle,p.MainModule.FileName.ToString());
                    }
                }
    别忘了添加
    using System.Diagnostics;