安裝任何應用程序期間。通常要求用戶在開始安裝之前關閉所有窗口。如果沒有,安裝將停在中間 並要求用戶關閉所有打開的窗口。 我被要求在XXX應用程序中添加代碼。當應用程序正在運行,並且如果用戶打開任何其他窗口(例如:Explore,瀏覽器,單詞等),則應用程序應該拋出一個窗口,說明您已打開窗口列表。 我請求你,請建議我如何在C#中啓動。獲取打開的窗口列表C#
6
A
回答
0
嘗試SetWinEventHook通過P/Invoke的WinAPI函數。你可以勾選EVENT_OBJECT_CREATE
事件,但我不是100%確定的。我從來沒有在C#中做過,只有在C/C++中。
1
您可以使用System.Diagnostics.Process
類來獲取機器中正在運行的所有進程的信息。然後,您可以嘗試查找預期的應用程序/進程是否正在運行。
您可以使用GetProcesses()
或GetProcessByName()
方法。請參閱this msdn link以供參考。我相信可以有更高效的方式來實現。 HTH
7
測試此:
var openWindowProcesses = System.Diagnostics.Process.GetProcesses()
.Where(p => p.MainWindowHandle != IntPtr.Zero && p.ProcessName != "explorer");
的openWindowProcesses
應該包含他們有一個活躍的主窗口中所有打開的應用程序。
我把p.ProcessName != "explorer"
放在where表達式中,因爲explorer是桌面的主進程,它永遠不應該關閉。
要觀察執行過程,您可以使用ManagementEventWatcher
類。請參閱this。
1
建立一個foreach循環像這樣枚舉系統上的所有打開的應用程序(即有明顯的主窗口)
foreach (var process in Process.GetProcesses().Where(p => p.MainWindowHandle != IntPtr.Zero)) {
//do something with the process here. To display it's name, use process.MainWindowTitle
}
+0
如果應用程序有多個可見窗口,該怎麼辦? – Neolisk 2015-12-29 17:06:51
相關問題
- 1. 打開QtiPlot窗口列表
- 2. 獲取所有打開的窗口使用AutoIt的列表
- 3. 如何從xserver獲取打開的窗口列表
- 4. 如何獲取Qt中打開的窗口列表
- 5. 獲取打開的窗口列表在Python
- 6. 獲取打開的彈出窗口列表
- 7. 獲取列表中所有打開的MDI窗口
- 8. 獲取打開的窗口可可
- 9. 如何檢測何時打開新窗口和/或獲取打開的窗口列表?
- 10. 打開的窗口C#WPF
- 11. 打開窗口並獲取其URL?
- 12. C#獲取所有打開的窗口標題
- 13. 從C#中打開窗口獲取網頁的源代碼
- 14. C# - 獲取打開的窗口不工作,因爲它應該
- 15. 攔截打開窗口 - C#
- 16. RadWindow:從C#打開窗口#
- 17. 獲取CRM彈出窗口刷新打開窗口
- 18. 如何從CLI中獲取KDE中所有打開的窗口列表?
- 19. 打開窗口
- 20. 窗口打開
- 21. C++打開的窗口中的Hello World
- 22. 將數據傳遞到打開的窗口|捕獲窗口打開事件
- 23. usercontrol打開不同的窗口c#
- 24. 如何獲取由彈出窗口打開的窗口的標題?
- 25. 窗口打開之前窗口的SetParent
- 26. 獲取背景窗口列表。
- 27. 軌打開的子窗口,並打開父窗口
- 28. 打開彈出窗口中易於打開的彈出窗口
- 29. 獲取打開的Windows錯誤列表
- 30. 打開新窗口
爲了解決需要通過定時器得到窗口列表中所描述的問題。隱藏的窗戶是什麼? – DReJ 2010-12-15 15:23:35
我想誰問這個問題知道關於使用計時器和......關於隱藏的窗口;在這種情況下,我認爲這足以關閉具有未隱藏窗口的進程。儘管在這些情況下,流程比窗口更重要。程序員應該檢查進程,找出哪一個不應該打開。通過更改Where方法中的表達式很容易實現。 但是,謝謝!我將在我的答案中添加關於觀看過程的一些信息。 – 2010-12-15 15:35:51
非常感謝您的建議。一旦我執行,我會讓你知道結果 – user517206 2010-12-16 05:57:58