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

C# 关闭Windows资源管理器的特定实例,c#,.net,windows,windows-7,explorer,C#,.net,Windows,Windows 7,Explorer,我在尝试关闭窗口资源管理器进程时遇到问题,因为发送该消息将尝试关闭Windows Shell资源管理器进程并提示用户关闭Windows。这不是我想要的行为,我想知道我如何才能克服它 我如何才能优雅地关闭单个资源管理器窗口,而不同时关闭整个电脑?我们的目标是让用户拥有与自己点击X按钮相同的行为 编辑:我发现我能够获得资源管理器进程的所有子窗口,但从这一点上我不确定如何确定哪些窗口是实际的、用户可见/可交互的资源管理器窗口 11/21/2012 16:27:49 [12] DEBUG - Clos

我在尝试关闭窗口资源管理器进程时遇到问题,因为发送该消息将尝试关闭Windows Shell资源管理器进程并提示用户关闭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

你怎么弄到窗户的?您可以通过文本获取winapi调用的句柄,因此桌面资源管理器可能没有标题。查看lpWindowName参数


另外,我在这里只是猜测,您可能会看到桌面资源管理器和其他资源管理器实例之间的关系,以及它们与GetDesktopWindow()返回的hande的关系。

嘿,谢谢您的提示。我找到了一种列出资源管理器进程的所有子窗口的方法,并且可以肯定地将GetDesktopWindow返回的hWnd与其中一个返回的hWnd进行比较,但是在我上面发布的实例中,我只打开了两个windows资源管理器窗口,因此缩小范围似乎很复杂。:)这门课是一样的吗?芬德温多也在找课。shell进程总是桌面的子进程,而其他进程不是吗?必须有某种方式来区分这个和shell正在使用的那个。另外,shell是否处理来自GetDesktopWindow的那个?桌面是最高级别的父级。当我使用spy++时,我看到我的explorer实例有一个它所在目录的标题。这应该有助于你区分。