2011-12-20 2 views
1

내 응용 프로그램에서 Windows 후크를 사용하여 다른 응용 프로그램의 크기가 다시 조정되었는지 확인합니다. 그런 다음 다른 응용 프로그램의 새 크기에 따라 몇 가지 조치를 취합니다.32 비트 및 64 비트 응용 프로그램을 모두 지원하는 SetWindowsHook

순수 32 비트 환경과 순수 64 비트 환경에서 제대로 작동합니다 (후크 dll은 MSDN 문서에서와 같이 64 비트와 32 비트를 따로 따랐습니다).

그러나 여기에 문제가 있습니다. Window 64 비트 OS에서 32 비트와 64 비트 응용 프로그램이 혼합되어 있기 때문에 64 비트 응용 프로그램을 실행하면 32 비트 응용 프로그램을 모니터 할 수 없으며 반대의 경우도 마찬가지입니다.

이렇게하는 좋은 방법이 있습니까? 그것은 완전히 다른 메커니즘 일 수 있습니다.

+0

어떤 종류의 후크를 사용하고 있습니까? –

+0

WH_CALLWNDPROCRET ... – Saibal

+5

대신 액세스 가능성 훅을 사용하십시오. –

답변

1

불행히도 32 비트 프로세스에는 32 비트 DLL을 삽입하고 64 비트 프로세스에는 64 비트 DLL 만 삽입 할 수 있습니다. 즉, DLL 버전이 2 개 필요합니다. 또한 SetWindowsHookEx()는 동일한 실행 가능 제품군에서 호출해야합니다 (즉, 32 비트 프로세스에서는 32 비트 코드에서, 64 비트 프로세스에서는 비슷하게 호출해야합니다).

응용 프로그램이 64 비트라고 가정하면 32 비트 프로그램의 인스턴스를 시작하고 후크를 설정해야합니다. 관심있는 이벤트가 트랩되었을 때 parent에 알리는 child으로이 중 하나를 갖고 싶을 것입니다. 워드 프로세서

:

SetWindowsHookEx 다른 프로세스에 DLL을 주입하는데 사용될 수있다. A 32 비트 DLL을 64 비트 프로세스에 삽입 할 수 없으며 64 비트 DLL 을 32 비트 프로세스에 삽입 할 수 없습니다. 응용 프로그램에서 다른 프로세스에서 후크를 사용해야하는 경우 32 비트 응용 프로그램이 32 비트 DLL을 32 비트 프로세스에 삽입하도록 SetWindowsHookEx를 호출하고 64 비트 응용 프로그램 호출로 SetWindowsHookEx를 호출하여 64 비트 DLL을 64 비트 프로세스로 변환합니다. 32 비트 및 64 비트 DLL의 이름은 이어야합니다.

+0

고마워요! 그것이 내가가는 길입니다 ... 나는 더 우아한 해결책이 있기를 바랬습니다. – Saibal

관련 문제