我用 了这种win32下的接口调用模式,钩子却装不上跟踪时hk一直为空。
是不是必须用def的接口调用才行啊?
下面代码是简单的过程,不知错在哪里,高手请指点
static HHOOK hk = NULL;
static HINSTANCE hmod = NULL;extern "C" __declspec(dllexport) LRESULT CALLBACK KeyBoardHook(int nCode, WPARAM wParam, LPARAM lParam)
{
return CallNextHookEx(hk,nCode,wParam,lParam);
}extern "C" __declspec(dllexport) void installHook()
{
hk = SetWindowsHookEx(WH_KEYBOARD, (HOOKPROC)KeyBoardHook,hmod,0);//此句hk一直为空}
是不是必须用def的接口调用才行啊?
下面代码是简单的过程,不知错在哪里,高手请指点
static HHOOK hk = NULL;
static HINSTANCE hmod = NULL;extern "C" __declspec(dllexport) LRESULT CALLBACK KeyBoardHook(int nCode, WPARAM wParam, LPARAM lParam)
{
return CallNextHookEx(hk,nCode,wParam,lParam);
}extern "C" __declspec(dllexport) void installHook()
{
hk = SetWindowsHookEx(WH_KEYBOARD, (HOOKPROC)KeyBoardHook,hmod,0);//此句hk一直为空}
HHOOK hhk = NULL;
HINSTANCE hins = NULL;BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break; } hins=(HINSTANCE)hModule; //得到DLL实例 return TRUE;
}//加上进程设定就行了
#pragma data_seg("MyHook")
static HHOOK hk = NULL;
static HINSTANCE hmod = NULL;
#pragma data_seg()
LRESULT CALLBACK KeyboardProc( int code,
WPARAM wParam,
LPARAM lParam
)
{
return CallNextHookEx(hk,nCode,wParam,lParam);
}