DebugProc中DEBUGHOOKINFO的成员idThread值总是为当前线程ID
下面的代码中debug->idThread的值总是固定不变。
我用SPY++查看时居然也没有变,非常奇怪。
如果是WH_CALLWNDPROC类型的HOOK,可以检查到目标窗口改变了。现在的问题是如何在DebugProc中得到目标窗口。
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;}