CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

键盘,鼠标钩子的问题?

楼主sunmono(太阳)2002-03-20 15:04:42 在 VC/MFC / 基础类 提问

写了一个键盘,鼠标钩子的程序!  
  当只启动一个时,能正常工作!  
  但是启动两个或更多的时候,以前运行的程序就不能捕获道键盘鼠标的信息?  
  如何才能实现无论启几个程序,使得每个程序还是能正常工作? 问题点数:100、回复次数:14Top

1 楼ahr(电磁波)回复于 2002-03-20 15:11:41 得分 0

你的hook   funtion里有这样返回吗?  
  return(CallNextHookEx(g_hhook,   nCode,   wParam,   lParam));  
  不然只有最后安装的钩子可以工作了Top

2 楼hx(www.efsite.net)回复于 2002-03-20 15:15:53 得分 0

挂在。。。消息链上。。。  
  Top

3 楼sunmono(太阳)回复于 2002-03-20 15:19:02 得分 0

to   ahr(电磁波)    
  有返回的  
  return   CallNextHookEx(hKeyHook,   nCode,   wParam,   lParam);  
  单单启动一个什么问题都没?  
  启动多了,后面的程序就会使前面程序的钩子失效  
  Top

4 楼papaya_stone(^_^)shentong(^_^)回复于 2002-03-20 15:19:43 得分 0

消息被你的程序吃了!   :)Top

5 楼sunmono(太阳)回复于 2002-03-20 15:25:46 得分 0

那有什么办法解决?Top

6 楼ahr(电磁波)回复于 2002-03-20 15:32:05 得分 0

代码帖出来看看。对了,你用的是不是同一个dll?Top

7 楼ahr(电磁波)回复于 2002-03-20 15:38:03 得分 0

如果同一个dll,并且向共享数据里一个HWND窗口发消息,那么后面的程序可能会改变它的值。Top

8 楼sunmono(太阳)回复于 2002-03-20 15:42:16 得分 0

没错使用同一个dll阿  
  LRESULT   CALLBACK   MouseProc(int   nCode,   WPARAM   wParam,   LPARAM   lParam)  
  {  
  //   发送消息,通知窗口鼠标活动了  
  CTime   CurTime   =   CTime::GetCurrentTime();  
  CTimeSpan   ts   =   CurTime   -   KeepTime;  
   
  if   (ts.GetTotalSeconds()   >   POSTMSG_INTERVAL)  
  {  
  ::PostMessage(hSharedWnd,   WM_HOOK,   0,   0);            
  KeepTime   =   CurTime;  
  }  
   
  return   CallNextHookEx(hMouseHook,   nCode,   wParam,   lParam);  
  }  
   
  //////////////////////////////////////////////////////////////////////  
  //   安装钩子。  
  //  
  BOOL   __declspec(dllexport)__stdcall   InstallHook(HWND   hWnd)  
  {  
  hSharedWnd   =   hWnd;  
   
  KeepTime   =   CTime::GetCurrentTime();  
   
  //   安装鼠标钩子  
  hMouseHook   =   ::SetWindowsHookEx(WH_MOUSE,   (HOOKPROC)MouseProc,   hInst,   0);  
   
  return   TRUE;  
  }Top

9 楼sunmono(太阳)回复于 2002-03-20 15:49:23 得分 0

是同一个dll,并且向共享数据里一个HWND窗口发消息  
  有什么办法可以解决?Top

10 楼ahr(电磁波)回复于 2002-03-20 15:57:56 得分 100

那你干吗要运行那么多实例?  
  每次安装钩子   hSharedWnd   =   hWnd;这句都把HWND给改了。  
  如果你一定要很多程序都用。  
  就声明一个HWND数组吧,相应代码要变一下!  
   
  Top

11 楼sunmono(太阳)回复于 2002-03-20 16:21:36 得分 0

我先修改一下代码看看能否实现Top

12 楼sunmono(太阳)回复于 2002-03-21 09:42:01 得分 0

程序如下:但是我在其他窗口下使用键盘时,钩子得到响应  
  但是hSharedWnd[iCount]记录的值确为NULL  
  但是在启动钩子的程序上的得到的hSharedWnd[iCount]就是正确地址  
  为什么会这样?  
   
  #pragma   data_seg("SharedData")  
  HWND   hSharedWnd[10];                 //   共享数据,主窗口句柄  
  int                 iCount   =   0;  
  HHOOK   hKeyHook   =   NULL;                 //   键盘钩子  
  #pragma   data_seg()  
   
   
  BOOL   __declspec(dllexport)__stdcall   InstallHook(HWND   hWnd)  
  {  
          hSharedWnd[iCount]   =   hWnd;  
          iCount   ++;  
          //   安装键盘钩子  
          hKeyHook   =   ::SetWindowsHookEx(WH_KEYBOARD,   (HOOKPROC)KeyboardProc,   hInst,   0);  
           
          return   TRUE;  
  }Top

13 楼ahr(电磁波)回复于 2002-03-21 11:27:20 得分 0

听不明白。  
  你在“其他窗口下使用键盘时,钩子得到响应“,那里的代码贴出看看啦。  
  你这样做有点儿不好,其实在InstallHook中可以判断如果hKeyHook   !=   NULL;  
  就不用再设了。   钩子函数里循环发消息就行了。  
  不然钩子太多,系统效率会低。Top

14 楼begin(编程新手)回复于 2002-03-21 20:06:13 得分 0

我帮你解决,给我分Top

相关问题

  • 钩子高手们,关于鼠标键盘钩子的超级重大问题!!
  • 求bcb键盘鼠标全局钩子的例子
  • 键盘钩子
  • 键盘钩子
  • 同样的程序:键盘钩子就OK,鼠标钩子就无法结束!太苦恼了!!
  • 谁能给我一份鼠标和键盘全局钩子的源码。谢谢
  • 谁可以在vb中使用全局钩子?处理键盘和鼠标事件
  • 用钩子函数实现键盘,鼠标的完全锁定,有意者请进。
  • 为什么我在 M$ Win2000 使用钩子拦截键盘鼠标消息就那么困难
  • 在钩子中如何判断键盘或鼠标消息是发送给哪一个句柄的

关键词

  • 键盘
  • 鼠标
  • 安装
  • 代码
  • 消息
  • 数据
  • dll
  • null
  • 钩子
  • hsharedwnd

得分解答快速导航

  • 帖主:sunmono
  • ahr

相关链接

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

广告也精彩

反馈

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