【问题标题】:Closing a Specific Instance of Windows Explorer关闭 Windows 资源管理器的特定实例
【发布时间】:2012-11-21 20:42:25
【问题描述】:

我在尝试WM_CLOSE Window Explorer 进程时遇到问题,因为发送该消息将尝试关闭 Windows Shell 资源管理器进程并提示用户关闭 Windows。这不是预期的行为,我想知道如何解决它?

如何在不同时关闭整个 PC 的情况下优雅地关闭单个资源管理器窗口?目标是具有与用户自己单击 X 按钮相同的行为。

编辑:我发现我能够获取资源管理器进程的所有子窗口,但从那时起我不确定如何识别哪些窗口是实际的、用户可见/可交互的资源管理器窗口。

11/21/2012 16:27:49 [12]  DEBUG - Closing process with PID: 2680
11/21/2012 16:27:49 [12]  DEBUG - Window has 11 descendant windows
11/21/2012 16:27:49 [12]  DEBUG - Found child window:  hWnd: 590746 Window State: Normal
11/21/2012 16:27:49 [12]  DEBUG - Found child window: 4:27 PM hWnd: 656010 Window State: Normal
11/21/2012 16:27:49 [12]  DEBUG - Found child window:  hWnd: 2294392 Window State: Normal
11/21/2012 16:27:49 [12]  DEBUG - Found child window:  hWnd: 1245586 Window State: Normal
11/21/2012 16:27:49 [12]  DEBUG - Found child window: User Promoted Notification Area hWnd: 2949496 Window State: Normal
11/21/2012 16:27:49 [12]  DEBUG - Found child window: System Promoted Notification Area hWnd: 1245548 Window State: Normal
11/21/2012 16:27:49 [12]  DEBUG - Found child window:  hWnd: 852646 Window State: Normal
11/21/2012 16:27:49 [12]  DEBUG - Found child window:  hWnd: 918356 Window State: Normal
11/21/2012 16:27:49 [12]  DEBUG - Found child window: Running applications hWnd: 1769950 Window State: Normal
11/21/2012 16:27:49 [12]  DEBUG - Found child window: Running applications hWnd: 1179980 Window State: Normal
11/21/2012 16:27:49 [12]  DEBUG - Found child window: TF_FloatingLangBar_WndTitle hWnd: 458926 Window State: Normal

【问题讨论】:

    标签: c# .net windows windows-7 explorer


    【解决方案1】:

    你是怎么得到窗口的?您可以通过文本获取带有 winapi 调用的句柄,因此桌面资源管理器可能没有标题。 http://msdn.microsoft.com/en-us/library/windows/desktop/ms633499(v=vs.85).aspx看lpWindowName参数。

    另外,我只是在这里猜测,你可以看看桌面资源管理器和其他资源管理器实例之间的关系,以及它们与 GetDesktopWindow() http://msdn.microsoft.com/en-us/library/windows/desktop/ms633504(v=vs.85).aspx987654322@返回的hande 的关系。

    【讨论】:

    • 嘿,谢谢你的提示。我找到了一种列出资源管理器进程的所有子窗口的方法,并且绝对可以将 GetDesktopWindow 返回的 hWnd 与返回的其中一个进行比较,但是在我上面发布的实例中,我只打开了两个 Windows 资源管理器窗口,所以看起来缩小范围会比这更复杂。 :)
    • 班级是一样的吗? FindWindow 也寻找类。 shell进程是否总是桌面的子进程而其他进程不是?必须有某种方法来区分那个和 shell 使用的那个。
    • 另外,shell 句柄是来自 GetDesktopWindow 的句柄吗?桌面是最高级别的父级。当我使用 spy++ 时,我看到我拥有的资源管理器实例具有它所在目录的标题。这应该有助于您区分。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多