1

我从我的应用程序中打开文件资源管理器窗口。我按以下方式进行:

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 是正确的非零句柄)...

我怎样才能关闭这个窗口?

4

1 回答 1

1

意外破坏其他进程资源会导致不可预知的行为......此外,您还依赖于此处的窗口类等细节。非常不稳定的代码,我希望我永远不会把这个产品放到我的机器上。

无论如何,您可以使用 COM 使用可靠且记录在案的 API“引导”Windows 资源管理器。我对这种技术非常生疏,但我可以为您指明正确的方向: http: //www.codeproject.com/Articles/12029/Automate-the-Active-Windows-Explorer-or-Internet-E(文章都是关于 IE 和 Windows 资源管理器的,因为它们共享许多共同的基础架构)。

.NET 也可以使用 COM API。代码有时看起来更漂亮。

于 2013-08-01T12:25:23.387 回答