我从我的应用程序中打开文件资源管理器窗口。我是按照以下方式做的:
var si = new ProcessStartInfo("explorer.exe", Path);
si.UseShellExecute = true;
var p = Process.Start(si);
p.WaitForInputIdle();
_hwnd = Window.FindWindow("CabinetWClass", null);
那部分有效。现在,p.HasExited已经是真的了。我不知道为什么会这样,但我认为文件浏览器不是一个普通的过程。
无论如何,我尝试了p.Close()
,p.CloseMainWindow()
,p.Kill()
并且没有任何效果
我还导入了DestroyWindow:
[DllImport("user32.dll", SetLastError = true)]
public static extern bool DestroyWindow(IntPtr hWnd);
并像这样使用它:
var result = Window.DestroyWindow(_hwnd);
但这也没有效果(_hwnd是一个正确的非零句柄)......
如何关闭此窗口?
答案 0 :(得分:1)
意外地销毁其他进程资源会导致不可预测的行为......此外,您依赖于窗口类等详细信息。非常不稳定的代码,我希望我永远不会把这个产品放到我的机器上。
无论如何,您可以使用COM使用可靠且文档化的API“引导”Windows资源管理器。我对这种技术非常生疏,但我可以指出你正确的方向:http://www.codeproject.com/Articles/12029/Automate-the-Active-Windows-Explorer-or-Internet-E(这篇文章是关于IE和Windows资源管理器的,因为它们共享许多共同的基础设施)。
.NET也可以使用COM API。代码有时看起来更好。