2012-06-13 8 views
5

Kann mir jemand sagen, wie man einen bestimmten Hintergrundprozess (d. H. Bereits laufende Anwendung) identifiziert und in den Vordergrund bringt? Wenn beispielsweise eine Editor-Anwendung im Hintergrund ausgeführt wird, sollte beim Ausführen meiner WIN32-Anwendung die Anwendung Notepad identifiziert werden, und der Editor sollte eingeblendet werden oder in den Vordergrund gelangen.Um den Hintergrundprozess zu identifizieren und in C++ in den Vordergrund zu bringen WIN32

Ich habe versucht SwitchToThisWindow() -Funktion, aber es funktioniert wie Alt + Tab. Es wird den Hintergrundprozess nicht identifizieren.

Pls schlagen mir Walkthrough Guide für diesen ..

Thank you ..

+4

Klingt wie ein Job für 'EnumWindows' und' SetForegroundWindow'. – chris

+1

* In einer Zeit, in der ein Windows-System durch Vordergrundprozesse zerstört wurde, gab es eine Funktion, die sich wehrte. Und ihr Name war 'SetForegroundWindow'! * – Default

+0

Ya, SetForegroundWindow wird mein Fenster nach oben halten. Aber gibt es eine Möglichkeit, den Hintergrundprozess zu identifizieren? – Guru

Antwort

3

Aber gibt es eine Möglichkeit, den Hintergrundprozess

Das ist ein Unix-Shell-Begriff, Fenster zu identifizieren hat es nicht. Im Moment habe ich 10 "Hintergrund" Prozesse, die Fenster erstellt haben, die nicht im Vordergrund stehen, andere gut 50 oder so, die nicht haben. Keiner von ihnen ist der Hintergrundprozess, sie sind alle gleichermaßen heiter. Normalerweise klicken Sie auf die Taskleistenschaltfläche für ein Fenster oder drücken Sie Alt + Tab, um eine davon in den Vordergrund zu schalten. Oder rufen Sie SetForegroundWindow() in Code auf.

+0

Ich nahm an, dass sie nach dem "Hintergrund" -Prozess eines gegebenen Fensters waren. * Nix-Fenster sind nicht so eng mit einem Prozess verbunden (wie es auf einer anderen Maschine sein kann :) – Deanna

3

Es ist nicht klar, was du mit ‚Hintergrundprozess‘ bedeuten, aber hier ist ein paar Ideen:

Verwenden EnumWindows Sie alle die Top-Level-HWNDs auf dem Desktop zu bekommen. Dies beinhaltet eine Menge Dinge, die Sie nicht möchten, dass Sie herausfiltern müssen. Ich empfehle Ihnen, mit Spy ++ zu spielen, um zu sehen, wie der HWND-Baum aussieht und welche Art von HWNDs Sie hier finden:

Von diesem Set wollen Sie unsichtbare HWNDs herausfiltern oder ignorieren (verwenden Sie IsWindowVisible oder suchen Sie nach der WS_VISIBLE-Stil).

Filtern Sie auch Fenster, die WS_POPUP-Set haben - das sind Dinge wie Tooltips, Menü-Popups, schwebende Symbolleisten und dergleichen.

Um das derzeit aktive Fenster herauszufiltern, (wenn Sie es nicht bereits wissen) verwenden Sie GetGUIThreadInfo mit idThread = 0; GUIHREADINFO.hwndActive gibt das aktive Fenster zurück, so dass jedes HWND der obersten Ebene, das nicht das ist, ein inaktives Fenster ist.

Wenn Sie speziell nach minimierten Fenstern suchen, können Sie diese mit IsIconic(hwnd) erkennen.

Wenn Sie schließlich ein Fenster gefunden haben, das Sie als "Hintergrund" betrachten, können Sie GetWindowText verwenden, um den Titel abzurufen, oder GetWindowThreadProcessId, um die Prozess-ID abzurufen.

Verwandte Themen