怎么回事呢?用钩子处理消息时多了一个WM_CHAR发出,内详

lxslove 2008-09-21 10:18:09
我用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);
}
...全文
158 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
s11ss 2011-10-17
  • 打赏
  • 举报
回复
怎么解决的。。。。说下阿!!!
lxslove 2008-09-21
  • 打赏
  • 举报
回复
没人会啊?还是要靠自己啊,已经解决了

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧