2010-08-16 4 views
0

작업 표시 줄을 만들고 있는데 활성 창이 언제 바뀌는 지 알아야합니다. 나는 타이머를 사용하고 싶지 않다. 아마도 내가 가로 챌 수있는 WndProc 메시지가있을 것이라고 생각하고 있습니다.창이 활성화되고 비활성화 될 때 어떻게 추적합니까?

나는 SetWindowsHookEx, WH_SHELL 설정 후크를 필요로 C#을

+0

'작업 표시 줄'이 의미하는 바를 명확히 할 수 있습니까? Windows 화면 하단의 작업 표시 줄과 비슷한 막대를 의미합니까? –

+0

죄송합니다, 명확하지 않았습니다. 네, 그게 무슨 뜻인지. –

답변

1

을 사용하고 있습니다. 콜백은 HSHELL_WINDOWACTIVATED 및 HSHELL_WINDOWCREATED와 같은 알림을받으며 최상위 창에서 무슨 일이 일어나는지 알 수 있습니다. 얻을 수있는 전체 알림 목록은 SDK 문서 "ShellProc"을 확인하십시오. 그 중 거의 모든 것이 자신의 작업 표시 줄 구현과 관련이 있습니다.

좋은 소식이었습니다. 나쁜 소식은 WH_SHELL이 글로벌 훅이라는 것입니다. 다른 프로세스에 주입 할 수있는 DLL이 필요합니다. 문제는 그 DLL을 관리되는 코드로 작성할 수 없다는 것입니다. 관리 코드를 관리되지 않는 프로세스에 주입하는 것은 불가능합니다.

다시 좋은 소식으로, 누군가가 그 문제를 해결하고 주사 가능한 관리되지 않는 DLL을 만들어 관리되는 코드와 상호 작용할 수 있습니다. 프로젝트 is here. 얼마나 좋은지 전혀 모르겠다. UAC의 증거가 아닐지도 모른다.

+0

또한 64 비트 Windows에서는 작동하지 않습니다. 이를 위해서는 2 개의 주입 DLL과 2 개의 주입기 응용이 필요합니다. 그렇지 않으면 인젝터/인젝션 DLL과 동일한 비트의 애플리케이션에서만 이벤트를 얻을 수 있습니다. – Tergiver

+0

그래, 그것은 하나의 합병증이 될 것이다. –