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

本文关键字:窗口 例如 Word 进程 访问 文件 | 更新日期: 2023-09-27 18:26:40

场景(对于强制删除文件,无法在重新启动时进行删除):

  1. 我有一个文件是在某些程序中打开的,比如M.S.Word。可能还有一些其他文件也在M.S.Word中打开
  2. 在我的C#程序中,我需要知道访问特定文件的进程,并且只需要从Word中关闭/释放该特定文件。其他文件应该不会受到干扰,所以我不会使用Process.Kill()方法

考虑到上述情况,我做了以下操作:

  1. 找到进程(进程类的实例)访问我的目标文件使用这里的代码

  2. 找到该进程持有的句柄列表(使用NtQuerySystemInformation()方法)。

  3. 从句柄列表中,我能够找到保存我的文件的特定句柄(使用NtQueryObject()方法)。尝试对此句柄调用CloseHandle(),但不起作用
  4. 现在,我还可以列出目标进程中的所有子窗口句柄

如何找到与上面步骤3中找到的文件句柄相关的特定窗口句柄?我的计划是使用SendMessage()方法和WM_CLOSE消息到那个特定的窗口,这样它就会被关闭,我的文件就会被释放。

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

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

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

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

这篇文章在这里引发了一些讨论和相关问题

http://forum.sysinternals.com/topic19403.html