打开资源管理器窗口并等待其关闭

本文关键字:等待 资源管理器 窗口 | 更新日期: 2023-09-27 17:57:46

我有一个程序正在打开某个文件夹的浏览器窗口,但我想在浏览器窗口关闭后立即执行操作,但如果我使用以下代码:

Process proc = Process.Start("explorer.exe", "D:''");
proc.WaitForExit();

它正在根据需要打开资源管理器窗口,但WaitForExit命令没有效果,它只是直接越过它。

有没有其他打开资源管理器窗口的方法可以让我知道用户何时关闭了它?

打开资源管理器窗口并等待其关闭

这个问题在The Old New Thing:中得到了很好的解释

WaitForSingleObject立即返回的原因是Explorer是一个单实例程序(好吧,有限实例)。当您打开一个资源管理器窗口时,请求会被传递给一个正在运行的资源管理器副本,并且您启动的资源管理者副本会退出。这就是您的WaitForSingleObject立即返回的原因。

他提供了一些你可能会使用的解决方案(大量使用PInvoke),比如使用这样的东西。

最后,使用其他类型的文件浏览器可能会更容易,可能来自C#库,而不是资源管理器。

无法重新生成错误。刚刚尝试过这个:

Process.Start("explorer.exe", "D:''").WaitForExit();

它会阻塞当前线程并等待,直到我关闭资源管理器窗口。请确保您没有在要阻止的线程之外的其他线程上执行该命令。还要确保通过导入以下.reg文件将窗口的每个实例设置为启动explorer.exe的新实例:

Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER'Software'Microsoft'Windows'CurrentVersion'Explorer]
"DesktopProcess"=dword:00000001
[HKEY_LOCAL_MACHINE'Software'Microsoft'Windows'CurrentVersion'Explorer]
"DesktopProcess"=dword:00000001
[HKEY_CURRENT_USER'Software'Microsoft'Windows'CurrentVersion'Explorer'BrowseNewProcess]
"BrowseNewProcess"="Yes"
[HKEY_LOCAL_MACHINE'Software'Microsoft'Windows'CurrentVersion'Explorer'BrowseNewProcess]
"BrowseNewProcess"="Yes"

您需要重新启动计算机才能使其生效。