设为首页 加入收藏

TOP

计算机二级C++技巧:C++鼠标全局钩子实现代码
2014-11-23 20:15:01 】 浏览:340
Tags:计算机 二级 技巧 鼠标 全局 钩子 实现 代码

  全国计算机等级考试资料下载


  本程序分为两个部分:
  第一:dll部分。
  第二:程序部分。
  本程序是主要获得任意窗口的标题。
  第一部分代码如下:
  #include
  #pragma data_seg("mydata")
  HWND g_hPrevTarWnd = NULL;
  //上次鼠标所指的窗口句柄
  HWND g_hDisplayWnd = NULL;
  //显示目标窗口标题编辑框的句柄
  HHOOK g_hHook = NULL; //安装的鼠标勾子句柄
  #pragma data_seg()
  #pragma comment(linker,"/section:mydata,rws")
  //实现数据共享
  //钩子函数的实现:
  LRESULT CALLBACK MouseProc(int nCode,WPARAM wparam,LPARAM lparam)
  {
  LPMOUSEHOOKSTRUCT pMouseHook =
  (MOUSEHOOKSTRUCT FAR *)lparam;
  if (nCode >= 0)
  {
  HWND glhTargetWnd =
  ::WindowFromPoint(pMouseHook->pt);
  if ((glhTargetWnd != g_hPrevTarWnd) &&
  (NULL != glhTargetWnd))
  {
  char szCaption[256];
  GetWindowText(glhTargetWnd,szCaption,100);
  //取目标窗口标题
  if(IsWindow(g_hDisplayWnd))
  {
  SendMessage(g_hDisplayWnd,WM_SETTEXT,0, (LPARAM)(LPCTSTR)szCaption);
  }
  g_hPrevTarWnd=glhTargetWnd;//保存目标窗口
  }
  }
  return CallNextHookEx(g_hHook,nCode,wparam,lparam);
  //继续传递消息
  }
  //启动钩子
  _declspec(dllexport) void StartHook(HWND hWnd)
  {
  g_hHook = SetWindowsHookEx(WH_MOUSE,MouseProc,GetModuleHandle("Hook"),0);
  //全局钩子最后一个函数要为零
  g_hDisplayWnd = hWnd;
  }
  //卸载钩子
  _declspec(dllexport) void StopHook()
  {
  BOOL bResult;
  bResult = UnhookWindowsHookEx(g_hHook);
  if(bResult)
  {
  g_hPrevTarWnd = NULL;
  g_hDisplayWnd = NULL;
  g_hHook = NULL;
  }
  }
   第二部分主要代码:
  建立一个基于对话框的应用程序,然后在OnInitDialog函数里面添加启动钩子函数,具体代码:
  // TODO: Add extra initialization here
  CWnd* pWnd=GetDlgItem(IDC_HOOkEDIT);
  StartHook(pWnd->GetSafeHwnd());
  分别添加卸载钩子和取消的按钮命令,代码如下:
  void CHookTestDlg::OnStophook()
  {
  // TODO: Add your control notification handler code here
  StopHook();
  GetDlgItem(IDC_STOPHOOK)->EnableWindow(FALSE);
  }
  void CHookTestDlg::OnCancel()
  {
  // TODO: Add extra cleanup here
  StopHook();
  CDialog::OnCancel();
  }


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Linux下C++程序的异常处理技巧 下一篇errorLNK2005:……alreadydefined..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目