Windows中的消息截获-HOOK钩子

来源:计算机等级考试    发布时间:2012-08-29    计算机等级考试视频    评论

  由于本人能力有限,所以实现钩子的方法一定不是是最好的,但简单。
  本来一直打算做个APM计数器的,所谓APM计数器,就是一个全局的计算键盘鼠标平均时间下的操作量啦。如果玩过星际争霸或者魔兽争霸的一定知道APM的意义。
  为了实现全局的统计键盘和鼠标操作,我采用了HOOK的方法进行了实现,具体如下。
  首先建立一个DLL得工程,这个工程的主要目的就是进行钩子并且通过函数指针对主程序进行通知。
  其头文件如下:
  #ifdef _COMPILING_44E531B1_14D3_11d5_A025_006067718D04
  #define LIBSPEC __declspec(dllexport)
  #else
  #define LIBSPEC __declspec(dllimport)
  #endif
  LIBSPEC BOOL setMouseHook();
  LIBSPEC BOOL setKeyBoardHook();
  LIBSPEC BOOL setMsgHook();
  LIBSPEC BOOL clearAllHook();
  typedef int (*FucOnMouse)(int mousex,int mousey) ;
  LIBSPEC void setHookFuncMouse(FucOnMouse ptFuc);
  typedef int (*FucOnKeyBoard)(long code, long scancode,long flags);
  LIBSPEC void setHookFuncKeyBoard(FucOnKeyBoard ptFuc);
  typedef int (*FucOnMsg)(WPARAM wParam, LPARAM lParam);
  LIBSPEC void setHookFuncMsg(FucOnMsg ptFuc);
  #undef LIBSPEC
  而后是源文件:
  HINSTANCE hInst;
  HHOOK hookkeyboard = NULL;
  static LRESULT WINAPI KeyBoardProc(int nCode,WPARAM wparam,LPARAM lparam) ;
  BOOL APIENTRY DllMain( HINSTANCE hInstance,
  DWORD Reason,
  LPVOID Reserved
  )
  {
  switch(Reason)
  { /* reason */
  case DLL_PROCESS_ATTACH:
  hInst = hInstance;
  return TRUE;
  case DLL_PROCESS_DETACH:
  return clearAllHook();
  } /* reason */
  return TRUE;
  }
  //主程序如果要对键盘消息进行截获就调用这个函数
  __declspec(dllexport) BOOL setKeyBoardHook()
  {
  if (hookkeyboard!=NULL)
  {
  return TRUE;
  }
  hookkeyboard = SetWindowsHookEx(WH_KEYBOARD_LL,KeyBoardProc,hInst,0);
  if(hookkeyboard!=NULL)
  { /* success */
  return TRUE;
  }
  return FALSE; // failed to set hook
  }
  //然后在主程序中设置一个函数指针来处理键盘消息。
  static FucOnMouse g_ptfucmouse = NULL;
  __declspec(dllexport) void setHookFuncMouse(FucOnMouse ptFuc)
  {
  g_ptfucmouse = ptFuc;
  }
  //这部分就是HOOK的时候传入的处理函数啦

上一页12下一页

视频学习

我考网版权与免责声明

① 凡本网注明稿件来源为"原创"的所有文字、图片和音视频稿件,版权均属本网所有。任何媒体、网站或个人转载、链接转贴或以其他方式复制发表时必须注明"稿件来源:我考网",违者本网将依法追究责任;

② 本网部分稿件来源于网络,任何单位或个人认为我考网发布的内容可能涉嫌侵犯其合法权益,应该及时向我考网书面反馈,并提供身份证明、权属证明及详细侵权情况证明,我考网在收到上述法律文件后,将会尽快移除被控侵权内容。

最近更新

社区交流

考试问答