初学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!"这句话)。
请指点,谢谢。