2009-05-20 5 views
3

시스템 트레이에 앉아 있고 활성 창에서 작업을 수행 할 수있는 응용 프로그램을 개발 중입니다. 그러나 시스템 트레이의 아이콘을 클릭하면 GetForegroundWindow()이 작업 표시 줄을 반환합니다. 작업 표시 줄이 활성화되기 전에 활성 상태였던 창을 가져와야합니다.최근에 활성화 된 창의 창 핸들 얻기

데스크톱 창을 EnumWindowsGetWindow으로 열거 해 보았습니다. 그러나 데스크탑 가젯과 다른 항목이 자주 사용되지 않습니다. 창을 비활성화하면 정보가 완전히 손실 될 수도 있습니까?

답변

2

정보를 얻는 유일한 방법은 WH_CALLWNDPROC에 시스템 전체 후크 (SetWindowsHookEx)를 설치하고 모두 WM_ACTIVATEAPP을 캡처하는 것입니다. 이렇게하면 언제 어떤 창을 사용했는지에 대한 전체 기록을 추적 할 수 있습니다.

+0

정말 잘 작동합니다. 그러나 64 비트 (또는 64 비트 용으로 컴파일하면 32 비트)이기 때문에 영향을받지 않는 일부 응용 프로그램에 대해서는 문제가 있습니다. 어떤 아이디어? –

+0

32 비트와 64 비트 DLL을 모두 연결할 수 있고 두 프로세스 간의 통신을 사용할 수 있지만 매우 혼란 스럽습니다. –

+0

불행히도 나는 그것을하는 깔끔한 방법이 없다고 생각합니다. 따라서 두 개의 DLL과 일부 IPC가 ASFAIK 유일한 방법입니다. –

관련 문제