wndproc 주소 찾기
문제
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
(런타임에) 함수를 호출해야합니다.