这几天公司让我写一个能够监控文件夹中文件大小变化的东东,查阅大量资料后,还有一些迷惑,特发此贴求高人指教
先说一下需求:
就是在当删除一个文件的时候需要钩子勾住,然后可一做一些动作 比如获取文件的大小
在好多的论坛里看到采用钩子和finfirstchangenotification API接口相结合来实现,请问有没有具体的实例
然后我看到好多钩子安装的方法有两种:一种是编写成独立的dll然后注册安装 另一种是使用SetWindowsHookEx api函数请问这两中方法有什么区别 文件夹监控用哪个比较好。
先说一下需求:
就是在当删除一个文件的时候需要钩子勾住,然后可一做一些动作 比如获取文件的大小
在好多的论坛里看到采用钩子和finfirstchangenotification API接口相结合来实现,请问有没有具体的实例
然后我看到好多钩子安装的方法有两种:一种是编写成独立的dll然后注册安装 另一种是使用SetWindowsHookEx api函数请问这两中方法有什么区别 文件夹监控用哪个比较好。
用这个就可以了
FileSystemWatcher watcher = new FileSystemWatcher("D:\\test");
watcher.Deleted += new FileSystemEventHandler(watcher_Deleted);
void watcher_Deleted(object sender, FileSystemEventArgs e)
{
//todo;
}
http://msdn.microsoft.com/en-us/library/ch2s8yd7(VS.71).aspx
WH_SHELL表明你监听shell事件,lpfn钩子函数(单独的标准dll文件中),hMod钩子函数所在动态库的模块句柄,0表明是系统钩子。
msdn中搜索SetWindowsHookEx,里边有详细的说明,你也可以到VC/DLL和进程里边问。
特别说明,C#无法写标准dll。但是C#可以调用标准dll.
强烈建议用VC编写。
实现
ICopyHook接口吧。具体代码....我环境没有资料,自己google一下吧
.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;