键盘全局钩子截获消息 发送自定义消息给调用它的程序,为什么自定义消息里边的函数执行多次?谢谢

zg1981 2007-11-20 05:16:16
我写了一个键盘的全局钩子dll 一个程序调用它 当钩子截获到键盘‘A'健按下 就发送自定义消息给主程序
主程序里边有个自定义消息实现是一个截屏的功能 但是我这个程序 截屏执行了三次 ,请问可能是什么原因
LRESULT CALLBACK KeyboardProc(
int code, // hook code
WPARAM wParam, // virtual-key code
LPARAM lParam // keystroke-message information
)
{ if(VK_F2==wParam)
{ PostMessage(g_hWnd,WM_CLOSE,0,0);
UnhookWindowsHookEx(g_hKeyboard);
}
if('A'==wParam)
{
PostMessage(g_hWnd,WM_USER+101,0,0);
}
return CallNextHookEx(g_hKeyboard,code,wParam,lParam);

}
...全文
162 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zg1981 2007-11-21
  • 打赏
  • 举报
回复
if(((DWORD)lParam & 0x40000000))
{
if(VK_F2==wParam)
{
PostMessage(g_hWnd,WM_CLOSE,0,0);

UnhookWindowsHookEx(g_hKeyboard);
}
if('A'==wParam)
{
PostMessage(g_hWnd,WM_USER+101,0,0);
}
}
我改成这样 不给还是发送了两次 可能是什么原因呢
dirdirdir3 2007-11-21
  • 打赏
  • 举报
回复
lparam的30,31位就指名是按下还是弹起
zg1981 2007-11-21
  • 打赏
  • 举报
回复
to tanchuhan
呵呵 ,习惯了这种写法

还有我如何只获取一个弹起消息呢?
tanchuhan 2007-11-21
  • 打赏
  • 举报
回复
if (code == HC_NOREMOVE)
{
...
}
tanchuhan 2007-11-20
  • 打赏
  • 举报
回复
晕,这种写法看着别扭:if(VK_F2==wParam)
据说是为了不误写为:if(wParam=VK_F2)才这样的.感觉像是为了怕被车碰,而连人行道都不敢走.
billnie 2007-11-20
  • 打赏
  • 举报
回复
是两次吧,一次是按下一次是弹起消息
zg1981 2007-11-20
  • 打赏
  • 举报
回复
我的qq34403703 白天都在线 明天结贴

15,471

社区成员

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

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