문제

WNDPROC (창의 창의 주소를 찾을 수있는 방법 다른 과정). DLL을 주입하고 getClassInfoEx () 또는 getWindowLong () 또는 getWindowLongptr ()로 찾으려고하더라도 항상 0xffff08ed와 같은 값을 얻습니다. MSDN에 따르면 : "... 창 절차의 주소, 또는 주소를 나타내는 손잡이 창 절차의. "

불행히도 그것은 나에게 충분하지 않습니다. 실제 주소가 필요합니다. Spy ++는 대부분의 시간을 제대로 수행합니다 (그러나 때로는 실패하더라도). 따라서 가능해야합니다. 고맙습니다.


편집 :] kudos to 크리스 베키 내 작은 문제에 대한 매우 빠르고 정확한 솔루션을 제공합니다!

도움이 되었습니까?

해결책

아마도 당신은 windowproc의 잘못된 버전을 요구하고 있기 때문에 당신은 stymied를 받고있을 것입니다.

응용 분야와 같은 창문은 ANSI와 유니 코드의 두 가지 맛으로 발생합니다. Windows는 ANSI 창에 대한 원시 포인터를 Unicode 응용 프로그램 또는 Versa로 반환 할 수 없습니다. 잘못된 문자열 유형으로 호출하려고 시도합니다.

따라서 getwindowlongptr 기능이 없습니다. Windows API가 제공하는 두 가지 '실제'기능으로 해결되는 매크로입니다. 창이 유니 코드 창이고 getwindowlongptra가 Windows라고 불리는 경우 원시 포인터 대신 핸들을 반환하여 호출을 가로 채고 (CallwindowProc을 통해 만들어 졌음) 문자열을 ANSI에서 유니 코드로 마샬링 할 수 있습니다. 반대 전환은 다른 방식으로 유지됩니다.

올바른 함수를 호출하더라도 여전히 핸들을 되 찾을 수 있습니다. ANSI 코드가 유니 코드 창을 서브 클래스로 만들 수 있습니다. 따라서 WindowProc은 CallwindowProc 핸들 중 하나로 완전히 대체되었습니다.

이 경우 - 힘든 행운을 생각합니다.

다른 팁

Chris Becke의 답변을 확장하려면 (내 문제를 해결 한 것, 감사합니다!) :

따라서 getwindowlongptr 기능이 없습니다. Windows API가 제공하는 두 가지 '실제'기능으로 해결되는 매크로입니다. 창이 유니 코드 창이고 getwindowlongptra가 Windows라고 불리는 경우 원시 포인터 대신 핸들을 반환하여 호출을 가로 채고 (CallwindowProc을 통해 만들어 졌음) 문자열을 ANSI에서 유니 코드로 마샬링 할 수 있습니다. 반대 전환은 다른 방식으로 유지됩니다.

문제의 창이 IsWindowUnicode 기능. 이 정보를 사용하면 어느 것을 결정할 수 있습니다 GetWindowLongPtr (런타임에) 함수를 호출해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top