[英]Open explorer window and wait for it to close
我有一個程序正在打開資源管理器 window 到某個文件夾,但我想在資源管理器 window 關閉后立即執行操作,但如果我使用以下代碼:
Process proc = Process.Start("explorer.exe", "D:\\");
proc.WaitForExit();
它正在根據需要打開資源管理器 window 但 WaitForExit 命令沒有效果,它只是通過它。
是否有其他方法可以打開資源管理器 window,當它被用戶關閉時可以讓我知道?
The Old New Thing很好地解釋了這個問題:
WaitForSingleObject 立即返回的原因是 Explorer 是一個單實例程序(嗯,有限實例)。 當您打開 Explorer window 時,請求將移交給正在運行的 Explorer 副本,並且您啟動的 Explorer 副本退出。 這就是您的 WaitForSingleObject 立即返回的原因。
他提供了一些您可能會使用的解決方案(大量使用 PInvoke),例如使用類似這樣的東西。
最后,您可能更容易使用其他類型的文件瀏覽器,可能來自 C# 庫,您可以控制更多的地方,而不是資源管理器。
無法重新生成錯誤。 剛試過這個:
Process.Start("explorer.exe", "D:\\").WaitForExit();
它會阻塞當前線程並等待直到我關閉資源管理器 windows。 確保您沒有在另一個線程上執行命令,而不是您要阻止的線程。 還要確保通過導入 below.reg 文件將 window 的每個實例設置為啟動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"
您需要重新啟動計算機才能使其生效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.