在SetWindowHookEx里面 对WH_CALLWNDPROC进行挂钩,
在回调里面 CWPSTRUCT* tg= (CWPSTRUCT*)lParam;
RECT rt;
GetWindowRect(tg->hwnd, &rt);
char* p = new char[100];
sprintf(p, "%d %d %d %d\r\n", rt.left, rt.top, rt.left, rt.bottom);
OutputDebugString(p);
delete[] p;查看调试输出,发现得到只是当前窗口(就是调用HOOK DLL的窗口,不知道怎么描述合理)的rect,即使移动其他窗口,也不会输出其他窗口的rect,是哪里出了问题么?我SetWindowHookEx的Thread参数传的0,MSDN说0代表所有存在的窗口。
难道这个hook不是全局hook么?
在回调里面 CWPSTRUCT* tg= (CWPSTRUCT*)lParam;
RECT rt;
GetWindowRect(tg->hwnd, &rt);
char* p = new char[100];
sprintf(p, "%d %d %d %d\r\n", rt.left, rt.top, rt.left, rt.bottom);
OutputDebugString(p);
delete[] p;查看调试输出,发现得到只是当前窗口(就是调用HOOK DLL的窗口,不知道怎么描述合理)的rect,即使移动其他窗口,也不会输出其他窗口的rect,是哪里出了问题么?我SetWindowHookEx的Thread参数传的0,MSDN说0代表所有存在的窗口。
难道这个hook不是全局hook么?
hCallWndHook = SetWindowsHookEx(
WH_CALLWNDPROC,
(HOOKPROC)CallWndProc,
hInstance,
0
);其中hInstance = (HINSTANCE)hModule;
[email protected]
谢谢了哈
很遗憾,
Hook Keyboard和Mouse可以实现全局,但是CALLWNDPROC只能对于当前进程有效。
不知道是不是CALLWNDPROC本来这样,,,
是的
现在的问题是,如果hook keyboard_ll 可以实现全局挂钩,
但是CallWndProc,只能对当前进程。
WH_CALLWNDPROC全局钩子必须要用DLL。WH_JOURNALPLAYBACK,WH_JOURNALRECORD,WH_KEYBOARD_LL,WH_MOUSE_LL。
This hook is called in the context of the thread that installed it.
所以不需要dll.
我试过Keyboardhook,把WH_KEYBOARD_LL直接换成WH_CALLWNDPROC,其他什么都没变,全局就失效了,
其中哪里还有蹊跷么?
我在WH_CALLWNDPROC中依然响应的WM_KEYDOWN,所以拦截不到,,我SB了。。
感谢你 列宁同志,中国人民不会忘记你的