一个程序的主窗口有一个子控件,子控件上有个按钮,如果用SPY++直接监听主窗口的消息时监听不到WM_COMMAND消息,如果监听子控件的WM_COMMAND时,就监听到了下面的消息,为什么我怎么也HOOK不到这个消息啊,DLL已经注入进去了用了WH_GETMESSAGE ,WH_CALLWNDPROC都拦截不到,请问该怎么办啊
<00001> 00011600 P WM_COMMAND WNOTIFYCOD :0 (send form a menu) wID:2187用以下的代码
pidg:= GetWindowThreadProcessId(htable, nil); //htable就是子控件的句柄
khook:=SetWindowsHookEx(WH_CALLWNDPROC,@CallWndProc,hInstance,pidg); //WM_GETMESSAGE也不行,pidg改成0也不行,为什么SPY++就行啊?
<00001> 00011600 P WM_COMMAND WNOTIFYCOD :0 (send form a menu) wID:2187用以下的代码
pidg:= GetWindowThreadProcessId(htable, nil); //htable就是子控件的句柄
khook:=SetWindowsHookEx(WH_CALLWNDPROC,@CallWndProc,hInstance,pidg); //WM_GETMESSAGE也不行,pidg改成0也不行,为什么SPY++就行啊?
可以去攔截 該控件的容器控件,或者說 父控件。通過判斷 參數,來確定是否 為指定的子控件
SetWindowLong(handle,GWL_WNDPROC,Longint(@WinProc));//handle為子控件的handle //============================================================================Function WinProc(Hwnd,Msg,wParam,lParam:longint):LRESULT; stdcall;
begin
case Msg of
WM_COMMAND:
....
end;
Result:=CallWindowProc(OldProc,Hwnd,Msg,wParam,lParam);
end;
代码放在哪啊?DLL里吗?