关闭访问特定文件的进程子窗口(例如Word窗口)

时间:2013-08-05 19:20:55

标签: c# process filehandle window-handles

场景(强制删除文件,重启时无法删除):

  1. 我有一个在某个程序中打开的文件,比如M.S.字。在M.S中可能还有一些其他文件也可以打开。字。
  2. 在我的C#程序中,我需要知道哪个进程正在访问该特定文件,并且只需要从Word关闭/释放该特定文件。其他文件不应该受到干扰,所以我不会使用Process.Kill()方法。
  3. 鉴于上述情况,我已完成以下工作:

    1. 找到使用代码here

    2. 访问目标文件的进程(Process类的实例)
    3. 找到该进程持有的句柄列表(使用NtQuerySystemInformation()方法)。

    4. 从句柄列表中,我能够找到保存文件的特定句柄(使用NtQueryObject()方法)。试图在这个句柄上调用CloseHandle(),但这不起作用。
    5. 现在我还可以列出目标进程中的所有子窗口句柄。
    6. 如何找到与我在上面的步骤3中找到的文件句柄相关的特定窗口句柄?我的计划是将SendMessage()方法与WM_CLOSE消息一起使用到该特定窗口,这样它就会被关闭,我的文件将被释放。

      一种方法是检查该子窗口标题中的文件名字符串,然后关闭该窗口。但问题是,可能已从某个不同的位置打开了具有相同名称的文件。

1 个答案:

答案 0 :(得分:0)

我发现了关于这个主题的非常详细的帖子,也许它可以帮助你

<强> http://forum.sysinternals.com/howto-enumerate-handles_topic18892.html

这篇文章在这里有一些讨论和相关问题

<强> http://forum.sysinternals.com/topic19403.html