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

为什么我设了鼠标钩子后只能钩住我的程序窗口中的鼠标消息

楼主qingz(一只来自北方的*)2005-12-12 17:04:17 在 VC/MFC / 基础类 提问

#pragma   data_seg("MyData")  
  HHOOK   hHook   =   NULL;  
  HINSTANCE   hIns   =   NULL;  
  #pragma   data_seg()  
   
   
  //安装   Hook  
  DLLEXPORT   BOOL     CALLBACK     InstallHook()  
  {       AFX_MANAGE_STATE(AfxGetStaticModuleState());  
          hIns   =   AfxGetInstanceHandle();  
            hHook   =   SetWindowsHookEx(WH_MOUSE,   (HOOKPROC)MouseProc,   hIns,   0);  
            ....  
  }  
   
  LRESULT   CALLBACK     MouseProc(int   nCode,   WPARAM   wParam,   LPARAM   lParam)  
  {  
  if(   nCode   <   0   )  
  return   CallNextHookEx(hHook,   nCode,   wParam,   lParam);  
   
  if(   nCode   ==   HC_ACTION){  
    ******************这里面的代码只有在鼠标在本窗口中有所动作时才会执行*****  
  }  
     
  return   CallNextHookEx(hHook,   nCode,   wParam,   lParam);  
  }  
   
   
  看了别人的HOOK也是这样设的,但就不明白为什么他们的可以正常运行,而我的不行,请高手指教  
  问题点数:40、回复次数:9Top

1 楼everandforever(Forever)回复于 2005-12-12 17:09:43 得分 5

全局钩子要放在DLL中Top

2 楼gohappy_1999(碧水蓝天)回复于 2005-12-12 17:11:51 得分 8

确定吗?  
    if(   nCode   ==   HC_ACTION){  
  ******************这里面的代码只有在鼠标在本窗口中有所动作时才会执行*****  
  这里加个MESSAGEBOX看看是否真的是你说的那样  
  }  
  Top

3 楼nilliu(liuxy)回复于 2005-12-12 17:22:18 得分 7

钩子函数可以放在应用程序中或者dll中,如果要创建全局钩子或者远程钩子需要将钩子放在动态dll中。Top

4 楼qingz(一只来自北方的*)回复于 2005-12-12 17:29:14 得分 0

是放在动态DLL中Top

5 楼qingz(一只来自北方的*)回复于 2005-12-12 17:37:04 得分 0

在   What   type   of   Dll   would   you   like   中我选的是  
  Regular   Dll   using   shared   MFC   DllTop

6 楼cdo(Everything has a favourable turn)回复于 2005-12-12 17:37:34 得分 5

应该是hook不对,要放在动态的dll中。Top

7 楼hushuangyan74()回复于 2005-12-12 17:41:10 得分 10

从你目前提供的代码来看,看不出问题,可能还要看看其他的代码!Top

8 楼qingz(一只来自北方的*)回复于 2005-12-12 17:50:40 得分 0

我在下面的函数中将鼠标钩子改为键盘钩子后也是只能接收本窗口的键盘消息,是不是我哪里弄错了?  
  DLLEXPORT   BOOL     CALLBACK     InstallHook()  
  {             hHook   =   SetWindowsHookEx(WH_KEYBOARD,   (HOOKPROC)MouseProc,   hIns,   0);  
            ....  
  }Top

9 楼leoduba(想工作但无人招)回复于 2005-12-12 18:19:16 得分 5

兄弟,上面的人说得很清楚,全局的钩子要放在DLL里面才能用。Top

相关问题

  • 程序检测到被钩住,怎么卸掉这个钩子?
  • 什么叫鼠标钩子程序。怎么用VB写钩子程序
  • 鼠标钩子程序可以用但调试死机(100分)
  • 有没有关于鼠标钩子的小程序,谢谢!
  • 同样的程序:键盘钩子就OK,鼠标钩子就无法结束!太苦恼了!!
  • 高分求解,为什么我的全局钩子只能钩住自已的程序?
  • 为什么在程序外我的鼠标钩子就响应不了鼠标消息呢?
  • 鼠标钩子的问题
  • 一个系统鼠标钩子dll中如何接收应用程序发给它的消息,
  • 如果有两个程序同时安装鼠标钩子,会不会出现冲突啊?

关键词

  • 鼠标
  • null
  • hins
  • hhook
  • mouseproc
  • ncode
  • seg
  • callback
  • wparam
  • lparam

得分解答快速导航

  • 帖主:qingz
  • everandforever
  • gohappy_1999
  • nilliu
  • cdo
  • hushuangyan74
  • leoduba

相关链接

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

广告也精彩

反馈

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