C# 检查文件访问,获取进程id 是否可以检查某个目录中的文件是否被进程X访问并获得进程ID(C++或更好的C?)?< /P>
我认为一定有那么一个时刻,当文件在被进程打开之前被进程访问。(例如,反病毒工具也在使用此功能) 例如:C# 检查文件访问,获取进程id 是否可以检查某个目录中的文件是否被进程X访问并获得进程ID(C++或更好的C?)?< /P>,c#,c++,c,C#,C++,C,我认为一定有那么一个时刻,当文件在被进程打开之前被进程访问。(例如,反病毒工具也在使用此功能) 例如: 我双击一个txt文件 在记事本自动打开之前,C++或C语言程序在打开之前应获取记事本的进程ID。 这可能吗?有人告诉我,这可以用低级钩子实现,但我还没有找到“文件访问钩子” 谢谢。我认为实现这一点的唯一方法是挂接API函数。见此: HWND hWnd = FindWindow(0, "Untitled - Notepad"); //Specify the title of notepad.ex
谢谢。我认为实现这一点的唯一方法是挂接API函数。见此:
HWND hWnd = FindWindow(0, "Untitled - Notepad"); //Specify the title of notepad.exe
DWORD ProcessId = GetWindowThreadProcessId(hWnd, &ProcessId);
API挂钩是一项非常困难的任务,并且容易出错。如果您必须这样做,我建议使用第三方库,例如:
您可能希望钩住与打开文件关联的函数。除非你真的知道自己在做什么,除非你有很好的理由去做,否则我不会建议你去做;就像我之前说的,它会导致很多东西停止工作。例如,API挂钩可能与安全设置甚至与安全软件(如防病毒软件或防火墙)冲突
如果可能的话,用C#从头开始做这件事更加困难。据我所知,没有直接的方法可以像上面用C#描述的那样监视文件;因为这些低级任务总是在内核模式下完成的
您将需要创建一个系统文件驱动程序,这不是一项简单的任务,但如果您想自己尝试,则需要创建一个系统文件驱动程序。什么操作系统?unix上有inotify和dnotify。@Chris,但unix通常没有c#或记事本