2012-06-13 20 views
5

Czy ktoś może mi powiedzieć, jak zidentyfikować konkretny proces w tle (tj. Już działającą aplikację) i przenieść go na pierwszy plan? Na przykład, jeśli aplikacja Notatnik działa w tle, po uruchomieniu aplikacji WIN32 powinna zidentyfikować aplikację Notatnik, a notatnik powinien pojawić się lub przejść na pierwszy plan.Aby zidentyfikować proces w tle i wprowadzić go na pierwszy plan w C++ WIN32

Próbowałem funkcji SwitchToThisWindow(), ale działa jak Alt + tab. Nie rozpoznaje procesu w tle.

Pls sugerują mi Walkthrough instrukcji dla tego ..

Dziękuję ..

+4

Brzmi jak zadanie dla 'EnumWindows' i' SetForegroundWindow'. – chris

+1

* W czasach, gdy system Windows został zniszczony przez procesy pierwszoplanowe, istniała jedna funkcja, która walczyła z powrotem ... A jej nazwa brzmiała "SetForegroundWindow"! * – Default

+0

Ya, SetForegroundWindow będzie kepp moje okno do góry. Ale czy istnieje jakiś sposób identyfikacji procesu w tle? – Guru

Odpowiedz

3

Ale czy jest jakiś sposób, aby zidentyfikować proces tła

To jest Unix shell pojęcie, Windows nie ma go. W tej chwili mam 10 procesów "tła", które stworzyły okna, które nie są na pierwszym planie, inne dobre 50 lub takie, które nie mają. Żadna z nich nie jest THE background process, wszystkie są równie szare. Zwykle klikasz przycisk paska zadań dla okna lub naciskasz Alt + Tab, aby przełączyć jeden z nich na pierwszy plan. Lub wywołaj SetForegroundWindow() w kodzie.

+0

Zakładam, że chodziło o proces "tła" danego okna. * okna nix nie są tak ściśle powiązane z procesem (jak to może być na innej maszynie :) – Deanna

3

Nie jest jasne, co masz na myśli przez „proces w tle”, ale oto kilka pomysłów:

Zastosowanie EnumWindows aby Ci wszystko się HWNDs na pulpicie najwyższego poziomu. Będzie to zawierało mnóstwo rzeczy, których nie chcesz, musisz odfiltrować. Zalecasz grę ze Spy ++, aby zobaczyć, jak wygląda drzewo HWND i jakie rodzaje HWND znajdziesz tutaj:

Z tego zestawu będziesz chciał odfiltrować lub zignorować niewidoczne pliki HWND (użyj IsWindowVisible lub sprawdź dla styl WS_VISIBLE).

Odfiltruj także okna z zestawem WS_POPUP - są to np. Podpowiedzi, wyskakujące menu, pływające paski narzędzi i tym podobne.

Aby odfiltrować aktualnie aktywne okno, (jeśli jeszcze go nie znasz) użyj GetGUIThreadInfo z idThread = 0; GUIHREADINFO.hwndActive zwraca aktywne okno, więc dowolny HWND najwyższego poziomu, który nie jest, jest nieaktywnym oknem.

Jeśli szukasz specjalnie zminimalizowanych okien, możesz wykryć te, używając IsIconic(hwnd).

Wreszcie, po znalezieniu okna, które uznaje się za "tło", można użyć GetWindowText, aby uzyskać tytuł, lub GetWindowThreadProcessId, aby uzyskać identyfikator procesu.

Powiązane problemy