簡體   English   中英

識別后台進程並在C ++ WIN32中引入前台

[英]To identify the background process & bring to foreground in C++ WIN32

誰能告訴我如何識別特定的后台進程(即已經運行的應用程序)並將其帶到前台? 例如,如果Notepad應用程序在后台運行,當我運行WIN32應用程序時,它應該識別記事本應用程序,並且應該彈出記事本或前台。

我嘗試過SwitchToThisWindow()函數,但它的作用類似於Alt + tab。 它不會識別后台進程。

請建議我這個演練指南..

謝謝..

目前尚不清楚“背景流程”的含義,但這里有一些想法:

使用EnumWindows可以獲得桌面上的所有頂級HWND。 這將包括一些您不希望過濾掉的東西。 建議您使用Spy ++來查看HWND樹的外觀,以及您可以在此處找到的HWND類型:

從這個集合中,您將要過濾掉或忽略不可見的HWND(使用IsWindowVisible或檢查WS_VISIBLE樣式)。

還過濾掉設置了WS_POPUP的窗口 - 這些是工具提示,菜單彈出窗口,浮動工具欄等等。

要過濾掉當前活動的窗口(如果您還不知道),請使用帶有idThread = 0的GetGUIThreadInfo; GUIHREADINFO.hwndActive返回活動窗口,因此任何不是它的頂層HWND都是非活動窗口。

如果您正在尋找最小化窗口,可以使用IsIconic(hwnd)檢測那些窗口。

最后,當您找到一個您認為是“背景”的窗口時,可以使用GetWindowText獲取標題,或使用GetWindowThreadProcessId獲取進程ID。

但有沒有辦法確定后台進程

這是一個Unix shell概念,Windows沒有它。 現在我有10個“后台”進程創建了不在前台的窗口,另有50個左右沒有。 它們都不是背景過程,它們都是同樣背景的。 您通常單擊窗口的任務欄按鈕或按Alt + Tab將其中一個切換到前台。 或者在代碼中調用SetForegroundWindow()。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM