问题:程序只设置了一个钩子,但是钩子函数的反应却是两次,为什么?
钩子函数是按正常的步骤走的:
1、LRESULT CALLBACK HookFun(int nCode,WPARAM wParam,LPARAM lParam)//定义钩子函数
2、在上面的钩子函数中返回:return CallNextHookEx(g_hHook,nCode,wParam,lParam);
3、在按键处理函数中添加:
g_hHook=SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)HookFun,NULL,GetCurrentThreadId());
4、在另一个按键处理函数中添加:
UnhookWindowsHookEx(g_hHook);
问题如上,为什么会出现这种问题呢,如何解决这种问题?
谢谢各位好心的朋友帮忙解答!!!
钩子函数是按正常的步骤走的:
1、LRESULT CALLBACK HookFun(int nCode,WPARAM wParam,LPARAM lParam)//定义钩子函数
2、在上面的钩子函数中返回:return CallNextHookEx(g_hHook,nCode,wParam,lParam);
3、在按键处理函数中添加:
g_hHook=SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)HookFun,NULL,GetCurrentThreadId());
4、在另一个按键处理函数中添加:
UnhookWindowsHookEx(g_hHook);
问题如上,为什么会出现这种问题呢,如何解决这种问题?
谢谢各位好心的朋友帮忙解答!!!
LRESULT CALLBACK HookFun(int nCode,WPARAM wParam,LPARAM lParam)//定义钩子函数
{
CString strTmp="";
if(nCode==HC_ACTION)
switch(wParam)
{
case 0x08: //回车键
case 0x0A: //linefeed
case 0x1B: //escaps
case 0x09: //"tab"键
case 0x0D: //return
break;
default:
ch[0]=(TCHAR)wParam;
MessageBox(NULL,ch,"Catch the letter!",MB_OK);
}
return CallNextHookEx(g_hHook,nCode,wParam,lParam);
}
你说的wparam和lparam参数,我只了解他们是传递的参数,具体是有什么影响,我也不知道啊!
能否解释下?
__declspec(dllexport) LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if( HC_ACTION==nCode && lParam & 0x40000000)
{
........
}
return CallNextHookEx(m_hHook, nCode, wParam, lParam);
}
注意红色的部分就是避免你所说的问题的处理方法
具体的lParam的参数的意义去看MSDN,应该是这个参数的第30位还是第31位标识了当前按键事件是弹起还是按下。