windows钩子初级问题
初学windows钩子遇到了问题,前来请教
问题概述:想监视按键,但按下键盘后调用不到DLL里的回调函数。
下面是钩子用到的DLL的源码:
#include <objbase.h> #include <iostream> using namespace std; extern "C" __declspec(dllexport) LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam) { cout << "KeyboardProc() is involked!" << endl; return CallNextHookEx(0, nCode, wParam, lParam); } BOOL APIENTRY DllMain(HANDLE hModel, DWORD dwReason, void* lpReserved) { switch (dwReason) { case DLL_PROCESS_ATTACH: cout << "dll is attached!" << endl; break; case DLL_PROCESS_DETACH: cout << "dll is detached!" << endl; break; default: break; } return true; }
下面是主程序的源码:
#include <windows.h> #include <iostream> using namespace std; void main() { HINSTANCE hInst = LoadLibrary("testdll.dll"); if (NULL == hInst) { return; } HOOKPROC hkprcSysMsg = (HOOKPROC)GetProcAddress(hInst, "_KeyboardProc@12"); cout << "hkprcSysMsg = " << hkprcSysMsg << endl; static HHOOK hhookSysMsg = SetWindowsHookEx(WH_KEYBOARD, hkprcSysMsg, hInst, 0); cout << "hhookSysMsg = " << hhookSysMsg << endl; Sleep(5000); UnhookWindowsHookEx(hhookSysMsg); }
注:DLL中KeyboardProc的函数名是_KeyboardProc@12,我用dumpbin看过了。运行时hkprcSysMsg和hhookSysMsg都不是0。
现在的问题是运行起来后我按键调不到函数KeyboardProc(即打印不出"KeyboardProc() is involked!"这句话)。
请指点,谢谢。
我不是葛炮
11 years, 10 months ago