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

方案(强制删除文件,不能在重新启动时删除):

  • 我有一个在某些程序中打开的文件,例如MS Word。 可能还有一些其他文件在MS Word中打开。
  • 在我的C#程序中,我需要知道什么进程正在访问该特定文件,并且需要关闭/从Word释放该特定文件。 其他文件不应该被打扰,所以我不会使用Process.Kill()方法。
  • 鉴于上述情况,我做了以下工作:

  • 找到在这里使用代码访问我的目标文件的过程(Process类的实例)

  • 找到该进程拥有的句柄列表(使用NtQuerySystemInformation()方法)。

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

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


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

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

    这篇文章在这里引起了一些影响和相关问题

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

    链接地址: http://www.djcxy.com/p/40549.html

    上一篇: Closing a process child window (e.g. a Word window) accessing a specific file

    下一篇: deleting image files locked by vshost.exe c#