DebugProc中DEBUGHOOKINFO的成员idThread值总是为当前线程ID
下面的代码中debug->idThread的值总是固定不变。
我用SPY++查看时居然也没有变,非常奇怪。
如果是WH_CALLWNDPROC类型的HOOK,可以检查到目标窗口改变了。现在的问题是如何在DebugProc中得到目标窗口。
- C/C++ code
LRESULT CALLBACK DebugProc(int nCode, WPARAM wParam, LPARAM lParam) //WH_DEBUG钩子例程{ DEBUGHOOKINFO *debug=(DEBUGHOOKINFO *)lParam; //防止键盘被监听 if(debug->idThread!=debug->idThreadInstaller && wParam== WH_KEYBOARD) { return 1; } return ::CallNextHookEx(DEBUG_hhook, nCode, wParam ,lParam);}BOOL APIENTRY DllMain( HINSTANCE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ){ handle = hModule; return TRUE;}bool WINAPI InstallHook(){ DEBUG_hhook =::SetWindowsHookEx(WH_DEBUG,(HOOKPROC)DebugProc,handle, NULL); if(DEBUG_hhook == NULL) return false; return true;}bool WINAPI UnInstallHook(){ UnhookWindowsHookEx(DEBUG_hhook); return true;}[解决办法]
你要捕捉什么啊?
[解决办法]
不是很明白 你的意思..
[解决办法]
idThread
Type: DWORD
A handle to the thread containing the filter function.
http://msdn.microsoft.com/en-us/library/windows/desktop/ms644965(v=vs.85).aspx