【问题标题】:Closing a process child window (e.g. a Word window) accessing a specific file关闭访问特定文件的进程子窗口(例如 Word 窗口)
【发布时间】:2013-08-05 19:20:55
【问题描述】:

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

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

鉴于上述情况,我做了以下事情:

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

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

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

如何找到与我在上面第 3 步中找到的文件句柄相关的特定窗口句柄?我的计划是使用带有 WM_CLOSE 消息的 SendMessage() 方法到该特定窗口,以便将其关闭并释放我的文件。

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

【问题讨论】:

    标签: c# process filehandle window-handles


    【解决方案1】:

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

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

    该帖子在这里有一些讨论和相关问题

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-25
      • 1970-01-01
      • 2011-08-05
      • 1970-01-01
      • 2012-12-15
      • 1970-01-01
      • 1970-01-01
      • 2021-04-08
      相关资源
      最近更新 更多