我有一个打开资源管理器窗口到某个文件夹的程序,但是我想在资源管理器窗口关闭后立即执行一个操作,但如果我使用以下代码:
Process proc = Process.Start("explorer.exe", "D:\\");
proc.WaitForExit();
它可以根据需要打开资源管理器窗口,但WaitForExit命令没有任何作用,它只是直接经过它。
有没有不同的方式打开浏览器窗口,让我知道它何时被用户关闭?
发布于 2011-05-27 18:42:24
无法重新生成错误。我刚试了一下:
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"
您需要重新启动计算机才能使其生效。
发布于 2011-05-27 18:48:33
这个问题在The Old New Thing上解释得很好。
WaitForSingleObject立即返回的原因是资源管理器是一个单实例程序(嗯,有限实例)。打开资源管理器窗口时,请求将传递给正在运行的资源管理器副本,并且启动的资源管理器副本将退出。这就是为什么你的WaitForSingleObject会立即返回。
他提供了几个你可能会用到的解决方案(大量使用PInvoke),比如使用this。
最后,对于你来说,使用其他类型的文件浏览器可能会更容易一些,这些文件浏览器可能来自你有更多控制权的C#库,而不是资源管理器。
https://stackoverflow.com/questions/6156327
复制相似问题