原文:https://www.pediy.com/kssd/pediy09/pediy09-251.htm
int WINAPI WinMain(...){
......
while ( GetMessage(&msg, NULL, 0, 0) ){
TranslateMessage(&msg) ;
DispatchMessage(&msg) ;
}
return msg.wParam ;
}
LRESULT CALLBACK WndProc(...) {
switch ( message ){
...
}
return DefWindowProc(...) ;
}
一般程序都是这个结构,DispatchMessage负责把message提交给WndProc处理,但我找不到WndProc的地址,只能找到DispatchMessage,按F8之后这个消息就已经处理完了,怎么能跟进去找到WndProc的起始地址呢?
GetWindowLong
1. 已知窗口句柄求窗口过程地址,用GetWindowLong/GetClassLong函数
lpfnWndProc = (WNDPROC)GetWindowLong(hWnd, GWL_WNDPROC)
lpfnWndProc = (WNDPROC)GetClassLong(hWnd, GCL_WNDPROC)
2. 下断RegisterClassA(W)/RegisterClassExA(W)查看其参数所指向的WNDCLASS(EX)结构体的lpfnWndProc成员
总之方法很多
对DefWindowProc下断。