【问题标题】:Check file access, get process id检查文件访问,获取进程ID
【发布时间】:2010-02-20 21:19:09
【问题描述】:

是否可以检查特定目录中的文件是否被进程 X 访问并获取进程 ID(在 c++ 或更好的 c# 中)?

我认为必须有一个时刻,文件在被进程打开之前被进程访问。 (例如杀毒工具也在使用这个)

例子:

  1. 我双击一个txt文件
  2. 在记事本自动打开之前,c++或c#程序应该在记事本打开之前获取它的进程ID。

这可能吗?有人告诉我,这可以用低级挂钩来完成,但我还没有找到“文件访问挂钩”。

谢谢。

【问题讨论】:

  • 什么操作系统? unix 上有 inotify 和 dnotify。
  • @Chris 但 unix 通常没有 c# 或记事本

标签: c# c++ c


【解决方案1】:
HWND hWnd = FindWindow(0, "Untitled - Notepad"); //Specify the title of notepad.exe
DWORD ProcessId = GetWindowThreadProcessId(hWnd, &ProcessId);

【讨论】:

    【解决方案2】:

    我认为唯一的方法是挂钩 API 函数。看到这个:http://www.codeproject.com/KB/system/hooksys.aspx

    API 挂钩是一项非常困难的任务,并且容易出现很多错误。如果必须这样做,我建议使用第三方库,例如这里的:http://madshi.net/

    您可能希望挂钩与打开文件相关的函数。除非您真的知道自己在做什么,并且除非您有充分的理由,否则我不建议您这样做;就像我之前说的,它会导致很多东西停止工作。例如,API 挂钩可能与安全设置冲突,甚至与防病毒或防火墙等安全软件发生冲突。

    如果可能的话,从头开始在 C# 中执行此操作更加困难。

    【讨论】:

      【解决方案3】:

      据我所知,没有像上面描述的 C# 那样直接监视文件的方法;因为这些低级任务总是在内核模式下完成。

      您将需要创建一个系统文件驱动程序,这不是一项简单的任务,但如果您想自己尝试一下,here is where you should start from

      【讨论】:

        猜你喜欢
        • 2013-11-16
        • 1970-01-01
        • 2013-09-29
        • 2010-12-11
        • 1970-01-01
        • 2016-03-25
        • 2018-04-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多