怎么回事呢?用钩子处理消息时多了一个WM_CHAR发出,内详
我用WH_GETMESSAGE处理键盘按键消息WM_KEYDOWN和WM_KEYUP后,对其进行转换后,会发出两个WM_CHAR消息,很奇怪,后来我把处理WM_KEYUP的那部分代码去掉后,就正常了,不过这样导致不平衡:按下的是一个键,释放的却是另一个键,有点纳闷,为什么会产生两个WM_CHAR呢?
LRESULT CALLBACK GetMsgProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if(nCode < 0 )
return ::CallNextHookEx(g_hHook, nCode, wParam, lParam);
MSG *pMsg=(MSG *)lParam;
if(pMsg->message==WM_KEYDOWN)
{
if (pMsg->wParam==(WPARAM)VkKeyScan('a')
{
//设置lParam
WORD ld=1;
WORD hd=LOWORD(OemKeyScan('h');
DWORD md=(hd<<16)+ld;
//填充新值
pMsg->wParam=(WPARAM)VkKeyScan('h');
pMsg->lParam=md;
}
}
else if (pMsg->message==WM_KEYUP)
{
if (pMsg->wParam==(WPARAM)VkKeyScan('a')
{
//设置lParam
WORD ld=1;
WORD hd=LOWORD(OemKeyScan('h');
DWORD md=(hd<<16)+ld;
//填充新值
pMsg->wParam=(WPARAM)VkKeyScan('h');
pMsg->lParam=md;
}
}
return ::CallNextHookEx(g_hHook, nCode, wParam, lParam);
}