CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

Hook过程的问题

楼主wf520pb()2006-11-03 08:46:50 在 VC/MFC / 基础类 提问

最下面两个函数是两个按妞的事件响应函数。  
   
  设置断点时发现,按了一个键,会进入这个过程两次。  
  第一次,lParam>>29&&1的确=0;(我没按ALT),但是他接着又进去了这个函数,这个时候lParam为一个负数,lParam>>29&&1为1了,奇怪了。  
   
  HHOOK   g_hookKeyboard;  
  LRESULT   CALLBACK   KeyboardProc(  
      int   nCode,             //   hook   code  
      WPARAM   wParam,     //   message   identifier  
      LPARAM   lParam       //   mouse   coordinates  
  )  
  {  
  if((wParam=='a'||wParam=='A')&&1==((lParam>>29)&&1))  
  {  
  AfxMessageBox("123");  
  UnhookWindowsHookEx(g_hookMouse);  
  }  
  return   1;  
  }  
   
  void   CHookMKDlg::OnKeyHook()    
  {  
  //   TODO:   Add   your   control   notification   handler   code   here  
  g_hookKeyboard=SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,NULL,GetCurrentThreadId());  
   
  }  
   
  void   CHookMKDlg::OnKeyUnHook()  
  {  
  //   TODO:   Add   your   control   notification   handler   code   here  
  UnhookWindowsHookEx(g_hookKeyboard);  
  }  
  问题点数:20、回复次数:11Top

1 楼wf520pb()回复于 2006-11-03 10:06:59 得分 0

为什么会进去2次啊?  
   
  会出现这种情况是因为什么呢?  
   
  还请高手指教一下我啊!Top

2 楼tracing(攀登者)回复于 2006-11-03 14:06:12 得分 0

按键有个UP、DOWND的问题  
  if((wParam=='a'||wParam=='A')   &&   ((DWORD)lParam&0x40000000)   &&   (HC_ACTION   ==   nCode))  
  把条件改成这样就没问题了Top

3 楼wf520pb()回复于 2006-11-05 19:00:27 得分 0

不行啊,这样还是没用啊   !Top

4 楼tracing(攀登者)回复于 2006-11-06 11:26:38 得分 0

你修改之后的代码是什么样的啊,我行的啊Top

5 楼wf520pb()回复于 2006-11-06 12:16:43 得分 0

LRESULT   CALLBACK   KeyboardProc(  
      int   nCode,             //   hook   code  
      WPARAM   wParam,     //   message   identifier  
      LPARAM   lParam       //   Keyboard   coordinates  
  )  
  {  
  char   c=wParam;  
  if((wParam=='a'||wParam=='A')&&1==((lParam>>29)&&1)&&((DWORD)lParam&0x40000000)&&nCode==HC_ACTION)  
  {  
  AfxMessageBox("123");  
  UnhookWindowsHookEx(g_hookMouse);  
  }  
  return   1;  
  }  
   
  我只按A也会弹出‘123’对话框Top

6 楼tracing(攀登者)回复于 2006-11-06 16:25:39 得分 0

可能我没理解你的意思,你原来的代码会弹出两个对话框,修改后不是只弹出一个了吗,你想要什么效果啊Top

7 楼wf520pb()回复于 2006-11-07 19:58:19 得分 0

我想要的效果是:  
  按住ALT+A后弹出"123"对话框!Top

8 楼wf520pb()回复于 2006-11-07 19:59:20 得分 0

但是出现的结果却是:  
  直接按A也可以出现这个对话框!Top

9 楼CBean(C豆)回复于 2006-11-07 20:30:02 得分 15

(lParam>>29)&&1)应该是(lParam>>29)&1)吧Top

10 楼high2003376320(年少但不轻狂)回复于 2006-11-07 21:07:00 得分 5

应该改为  
  LRESULT   CALLBACK   KeyboardProc(  
      int   nCode,             //   hook   code  
      WPARAM   wParam,     //   message   identifier  
      LPARAM   lParam       //   Keyboard   coordinates  
  )  
  {  
  if((wParam=='a'||wParam=='A')&&1==((lParam>>29&1))  
  {  
  AfxMessageBox("123");  
  UnhookWindowsHookEx(g_hookMouse);  
  }  
  return   1;  
  }  
  经运行,没问题  
  Top

11 楼wf520pb()回复于 2006-11-08 14:08:57 得分 0

CBean(C豆)  
   
  呵呵,一只没看到这个错误,笑了!  
   
  谢谢!Top

相关问题

关键词

得分解答快速导航

  • 帖主:wf520pb
  • CBean
  • high2003376320

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo