关闭特定的Windows资源管理器实例

3
我在尝试使用WM_CLOSE关闭Window Explorer进程时遇到问题。发送该消息会尝试关闭Windows Shell explorer进程并提示用户关闭Windows,这不是预期的行为。我想知道如何解决这个问题?
如何优雅地关闭单个资源管理器窗口,而不会同时关闭整个计算机?目标是与用户自己单击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
1个回答

1

嘿,谢谢你的建议。我已经找到了一种方法来列出资源管理器进程的所有子窗口,并且肯定可以将GetDesktopWindow返回的hWnd与返回的其中一个进行比较,但在我上面发布的实例中,我只打开了两个Windows资源管理器窗口,所以看起来缩小范围会更加复杂。 :) - DTI-Matt
这个类是一样的吗?FindWindow 也会寻找类。Shell 进程总是桌面的子进程,而其他进程则不是吗?必须有某种方法来区分正在被 Shell 使用的进程和其他进程。 - Mike Cheel
另外,shell 是否处理 GetDesktopWindow 的句柄?桌面是最高级别的父级。当我使用 spy++ 时,我看到我拥有的资源管理器实例具有其所在目录的标题。这应该可以帮助您区分。 - Mike Cheel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接