简单的鼠标钩子
发布时间:2025-12-09 21:07:02
浏览次数:4
简单的鼠标钩子示例:
MouseHook.h
#ifndef _MOUSE_HOOK_H_#define _MOUSE_HOOK_H_#include <Windows.h>/// @brief 安装并启用鼠标钩子/// @param[in] hWnd : 接收消息的窗口句柄/// @remark /// @return 安装成功则返回TRUE,否则FALSEBOOL StartMouseHook(HWND hWnd, int nMsgID);/// @brief 卸载钩子/// @param[in] void : 无/// @remark /// @return 卸载成功则返回TRUE,否则FALSEBOOL StopMouseHook(void);#endif//_MOUSE_HOOK_H_
MouseHook.cpp #include "MouseHook.h"static HHOOK g_MouseHook= NULL;static HWND g_hWnd= NULL;//接收消息的窗口句柄static int g_nMessageID= 0;//鼠标钩子过程LRESULT CALLBACK MouseProc(int nCode, // hook codeWPARAM wParam, // message identifierLPARAM lParam // mouse coordinates){//有鼠标消息时,将其发给主程序if (g_hWnd!=NULL && nCode==HC_ACTION){::SendMessage(g_hWnd, g_nMessageID, wParam, lParam);return 1;// 不再转发给操作系统,由自身程序接管}return CallNextHookEx(g_MouseHook, nCode, wParam, lParam);}/// @brief 安装并启用鼠标钩子/// @param[in] hWnd : 接收消息的窗口句柄/// @remark /// @return 安装成功则返回TRUE,否则FALSEBOOL StartMouseHook(HWND hWnd, int nMsgID){//WH_MOUSE:只能监控钩子所在模块的鼠标事件//WH_MOUSE_LL:可以截获整个系统所有模块的鼠标事件BOOL bResult = FALSE;g_MouseHook = SetWindowsHookEx(/*WH_MOUSE*/WH_MOUSE_LL, MouseProc, GetModuleHandle(NULL), 0);if(g_MouseHook != NULL){bResult = TRUE;}g_hWnd = hWnd;g_nMessageID = nMsgID;return bResult; }/// @brief 卸载钩子/// @param[in] void : 无/// @remark /// @return 卸载成功则返回TRUE,否则FALSEBOOL StopMouseHook() {BOOL bResult=FALSE;if(g_MouseHook){bResult= UnhookWindowsHookEx(g_MouseHook);if(bResult){g_MouseHook = NULL;g_hWnd = NULL;}}return bResult;}