CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

关于计算点击次数的鼠标钩子!!!

楼主drift1981(delphi coder)2005-06-03 20:12:58 在 VC/MFC / 基础类 提问

做了一个全局钩子在dll里,导出函数为getl(鼠标左键次数)与getr(鼠标右键次数)!测试程序是一个单文档程序,我想把鼠标左键与右键的次数实时在视图上显示出来!现在的问题是我只能拦截在视图view上鼠标的点击次数,不知道为什么!!!高手帮忙!!dll代码如下  
  #pragma   data_seg("mydata")  
  static   HHOOK   hook;  
  static   int   lnum,rnum;  
  #pragma   data_seg()  
  BEGIN_MESSAGE_MAP(CMousehookApp,   CWinApp)  
  //{{AFX_MSG_MAP(CMousehookApp)  
  //   NOTE   -   the   ClassWizard   will   add   and   remove   mapping   macros   here.  
  //         DO   NOT   EDIT   what   you   see   in   these   blocks   of   generated   code!  
  //}}AFX_MSG_MAP  
  END_MESSAGE_MAP()  
   
  /////////////////////////////////////////////////////////////////////////////  
  //   CMousehookApp   construction  
   
  CMousehookApp::CMousehookApp()  
  {  
  //   TODO:   add   construction   code   here,  
  //   Place   all   significant   initialization   in   InitInstance  
  }  
   
  /////////////////////////////////////////////////////////////////////////////  
  //   The   one   and   only   CMousehookApp   object  
  int   __declspec(dllexport)__stdcall   getl()  
  {  
      AFX_MANAGE_STATE(AfxGetStaticModuleState());  
      return   lnum;  
  }  
   
  int   __declspec(dllexport)__stdcall   getr()  
  {  
      AFX_MANAGE_STATE(AfxGetStaticModuleState());  
      return   rnum;  
  }  
   
  LRESULT   __declspec(dllexport)__stdcall   CALLBACK   MouseProc(  
      int   nCode,            
      WPARAM   wParam,      
      LPARAM   lParam        
  )  
  {  
  if   (nCode   <   0)     //   do   not   process   the   message    
  {  
  return   CallNextHookEx(NULL,   nCode,   wParam,   lParam);    
  }  
   
  if(wParam   ==   WM_RBUTTONDOWN)   rnum++;  
          else   if(wParam   ==   WM_LBUTTONDOWN)   lnum++;  
  return   CallNextHookEx(NULL,   nCode,   wParam,   lParam);  
  }  
   
  BOOL   __declspec(dllexport)__stdcall   installhook()  
  {  
  AFX_MANAGE_STATE(AfxGetStaticModuleState());  
  hook=SetWindowsHookEx(WH_MOUSE,(HOOKPROC)MouseProc,AfxGetInstanceHandle(),0);  
  if(!hook)  
  {  
  TRACE("SetWindowsHookEx()   call   failed");  
  return   false;  
  }    
  return   true;  
  }  
   
  BOOL   __declspec(dllexport)__stdcall   unstallhook()  
  {  
  UnhookWindowsHookEx(hook);  
  return   true;  
  }  
  问题点数:0、回复次数:8Top

1 楼drift1981(delphi coder)回复于 2005-06-04 10:05:48 得分 0

upTop

2 楼drift1981(delphi coder)回复于 2005-06-05 16:24:50 得分 0

upTop

3 楼yangzhi_family(lante)回复于 2005-06-05 18:07:49 得分 0

兄弟,判断一下LParam   参数,是否是左键还是右键Top

4 楼drift1981(delphi coder)回复于 2005-06-06 09:29:10 得分 0

左键右键不是通过wparam判断的吗Top

5 楼drift1981(delphi coder)回复于 2005-06-07 09:44:41 得分 0

upTop

6 楼kissfall(钟爱小雨)回复于 2005-06-07 10:34:49 得分 0

LRESULT   CALLBACK   MouseProc(  
      int   nCode,             //   hook   code  
      WPARAM   wParam,     //   message   identifier  
      LPARAM   lParam       //   mouse   coordinates  
  );  
     
  Parameters  
  nCode    
  Specifies   a   code   the   hook   procedure   uses   to   determine   how   to   process   the   message.   This   parameter   can   be   one   of   the   following   values:   Value   Meaning    
  HC_ACTION   The   wParam   and   lParam   parameters   contain   information   about   a   mouse   message.    
  HC_NOREMOVE   The   wParam   and   lParam   parameters   contain   information   about   a   mouse   message,   and   the   mouse   message   has   not   been   removed   from   the   message   queue.   (An   application   called   the   PeekMessage   function,   specifying   the   PM_NOREMOVE   flag.)    
   
   
  If   nCode   is   less   than   zero,   the   hook   procedure   must   pass   the   message   to   the   CallNextHookEx   function   without   further   processing   and   should   return   the   value   returned   by   CallNextHookEx.    
   
  wParam    
  Specifies   the   identifier   of   the   mouse   message.    
  lParam    
  Pointer   to   a   MOUSEHOOKSTRUCT   structure.    
   
  试一下,用SendMessage将获得的次数发送到主程序窗口。Top

7 楼kugou123(酷狗)(彪悍的人生,不需要解释 www.xiaozhou.net)回复于 2005-06-07 10:37:21 得分 0

在你的编译器选项中加入:         /SECTION:mydata,rwsTop

8 楼kugou123(酷狗)(彪悍的人生,不需要解释 www.xiaozhou.net)回复于 2005-06-07 10:38:47 得分 0

给你参考一个回调函数:  
   
  LRESULT   WINAPI   MouseHookProc(int   nCode,WPARAM   wParam   ,LPARAM   lParam)  
  {  
  if(nCode==HC_ACTION)  
  {  
  switch(wParam)    
  {  
  case   WM_LBUTTONDOWN:  
  nLButtonDown++;  
  PostMessage(hClientWnd,WM_MYNOTIFY,0,0);  
  break;  
  case   WM_RBUTTONDOWN:  
  nRButtonDown++;  
  PostMessage(hClientWnd,WM_MYNOTIFY,0,0);  
  break;  
  default:break;  
  }  
  }    
          return   CallNextHookEx(hMouse,nCode,wParam,lParam);  
  }Top

相关问题

  • 鼠标钩子的问题
  • 谁有鼠标钩子BCB源代码
  • 鼠标钩子~~~~谁能解答???
  • 键盘,鼠标钩子的问题?
  • 帮帮小弟(关于鼠标钩子)
  • 真诚请教鼠标钩子高手
  • 鼠标钩子的细节问题
  • 求一鼠标全局钩子
  • 鼠标钩子问题, 谢谢!!
  • 请教关于鼠标钩子

关键词

  • 鼠标
  • cmousehookapp
  • 次数
  • declspec
  • afx
  • map

得分解答快速导航

  • 帖主:drift1981

相关链接

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

广告也精彩

反馈

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