2012-06-13 4 views
5

특정 백그라운드 프로세스 (즉, 이미 실행중인 응용 프로그램)를 식별하고 포 그라운드로 가져 오는 방법을 알려주는 사람은 누구입니까? 예를 들어, 메모장 응용 프로그램이 백그라운드에서 실행중인 경우, WIN32 응용 프로그램을 실행할 때 메모장 응용 프로그램을 식별하고 메모장이 팝업되거나 포 그라운드로 와야합니다.백그라운드 프로세스를 식별하고 C++에서 전경으로 가져 오기 WIN32

SwitchToThisWindow() 함수를 시도했지만 Alt + 탭처럼 작동합니다. 백그라운드 프로세스를 식별하지 않습니다.

은 pls ..

+4

'EnumWindows' 및'SetForegroundWindow'에 대한 작업과 비슷합니다. – chris

+1

* Windows 시스템이 전경 프로세스에 의해 황폐화 된 시대에 한 가지 기능이있었습니다 ... 그리고 그 이름은'SetForegroundWindow'입니다! * – Default

+0

예, SetForegroundWindow는 내 윈도우를 맨 위에 표시합니다. 그러나 백그라운드 프로세스를 식별 할 수있는 방법이 있습니까? – Guru

답변

3

감사합니다 ..이 나에게 연습 가이드를 제안하지만 유닉스 쉘 개념은, 윈도우의 백그라운드 프로세스

을 식별 할 수있는 방법이있다 그것을 가지고 있지 않습니다. 지금 나는 전경에 있지 않은 창문을 만든 10 개의 "배경"프로세스가 있고 그렇지 않은 다른 50 개의 좋은 프로세스가 있습니다. 그들 중 누구도 백그라운드 프로세스가 아니며, 모두 똑같이 배경입니다. 일반적으로 창에 대한 작업 표시 줄 단추를 클릭하거나 Alt + Tab을 눌러 그 중 하나를 포 그라운드로 전환합니다. 또는 코드에서 SetForegroundWindow()를 호출하십시오.

+0

나는 주어진 윈도우의 "백그라운드"프로세스 이후라고 가정했다. * nix 창은 프로세스에 단단히 연결되어 있지 않습니다 (다른 컴퓨터에있을 수 있음). – Deanna

3

여기 당신이 '백그라운드 프로세스'는 무엇을 의미하는 취소,하지만 아니에요는 몇 가지 아이디어입니다 :

사용 EnumWindows 당신에게 모든 바탕 화면에서 최상위의 Hwnd을 얻을 수 있습니다. 여기에는 필터링하지 말아야 할 것들이 많이 포함됩니다. Spy ++를 사용하여 HWND 트리가 어떤 모양인지, 여기에서 찾을 수있는 HWND 종류를 확인하십시오.

이 세트에서 보이지 않는 HWND를 필터링하거나 무시해야합니다 (IsWindowVisible을 사용하거나 WS_VISIBLE 스타일).

또한 WS_POPUP이 설정된 창을 필 터링합니다. 툴팁, 메뉴 팝업, 부동 툴바 등과 같은 것들입니다.

현재 활성 창을 필터링하려면 (아직 모르는 경우) idThread = 0 인 GetGUIThreadInfo를 사용하십시오. GUIHREADINFO.hwndActive는 활성 윈도우를 반환하므로, 최상위 HWND가 비활성 윈도우가 아닙니다.

특별히 최소화 된 창을 찾고있는 경우 IsIconic(hwnd)을 사용하여 검색 할 수 있습니다.

마지막으로 '배경'으로 간주되는 창을 발견하면 GetWindowText를 사용하여 제목을 가져 오거나 GetWindowThreadProcessId를 사용하여 프로세스 ID를 가져올 수 있습니다.

관련 문제