初识Windows HOOK 钩子技术

初识了Windows Hook ,觉得很有趣 我们可以用来钩子来获得和屏蔽一些消息

下面是一些创建和使用钩子的一下函数

//创建HOOK
HHOOK SetWindowsHookEx(
  int idHook,        // hook type
  HOOKPROC lpfn,     // hook procedure     
  HINSTANCE hMod,    // handle to application instance
  DWORD dwThreadId   // thread identifier
);

参数一: 指定要捕获的消息类型 如捕获键盘 鼠标
参数二: 指定消息处理函数 若最后1个参数为0[为0说明要捕获所有程序的ID] 或者为其他程序的消息 这这个参数必须为动态链接

库中的导出函数
参数三:程序实例(最后一个参数为0[为0说明要捕获所有程序的ID] 或者为其他程序的消息 )这个参数为DLL的实例句柄
参数四:指定要捕获消息的线程ID 为0则捕获所有程序的消息

程序成功返回钩子的句柄 失败返回NULL

下面是一个简单的获取当前程序消息的钩子示例:

获得鼠标消息

 HHOOK m_hMouse;

 m_hMouse=SetWindowsHookEx(WH_MOUSE,MouseProc,NULL,GetCurrentThreadId());//设置本程序鼠标钩子 最后1个参数为 

         当前程序的线程ID 
 //鼠标消息处理程序
 LRESULT CALLBACK MouseProc(
         int nCode,      // hook code
         WPARAM wParam,  // message identifier
         LPARAM lParam   // mouse coordinates
         )
 {
  return 1;//返回1则表示我们已经处理了鼠标消息 相当于屏蔽所有鼠标消息
 }


获得键盘消息
 HHOOK m_hKeyBoard;
 HWND g_hWnd;//获得窗口句柄
 g_hWnd=m_hWnd;//在MFC程序内部调用
 m_hKeyBoard=SetWindowsHookEx(WH_KEYBOARD,KeyBoardProc,NULL,GetCurrentThreadId());//设置本程序鼠标钩子 最后 

           1个参数为当前程序的线程ID 
 LRESULT CALLBACK KeyboardProc(
         int code,       // hook code
         WPARAM wParam,  // virtual-key code
         LPARAM lParam   // keystroke-message information
         )
 {
  //if(VK_SPACE==wParam || VK_RETURN ==wParam)//屏蔽了某些按键消息
  /*if(VK_F4==wParam && 1==(lParam>>29 & 1))//屏蔽ALT+F4
   return 1;
  else
   return CallNextHookEx(g_hHook,code,wParam,lParam);*///将消息传递给HOOK链中的其他函数

  if (VK_F2==wParam)//按下F2窗口退出
  {
   ::SendMessage(g_hWnd,WM_CLOSE,0,0);
   UnhookWindowsHookEx(g_hkeyboard);//移除键盘钩子
   UnhookWindowsHookEx(g_hMouse);//移除鼠标钩子
  }
  return 1;
  }

至于屏蔽所有程序的消息 详见资源 Windows钩子简单实用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值