转载: https://blog.youkuaiyun.com/linux7985/article/details/39644669
MSDN: https://docs.microsoft.com/en-us/windows/desktop/api/winuser/ns-winuser-tagmousehookstructex
一、MOUSEHOOKSTRUCT structure重要
typedef struct tagMOUSEHOOKSTRUCT {
POINT pt;
HWND hwnd;
UINT wHitTestCode;
ULONG_PTR dwExtraInfo;
} MOUSEHOOKSTRUCT, *PMOUSEHOOKSTRUCT, *LPMOUSEHOOKSTRUCT;
二、MSLLHOOKSTRUCT structure重要
typedef struct tagMSLLHOOKSTRUCT {
POINT pt;
DWORD mouseData;
DWORD flags;
DWORD time;
ULONG_PTR dwExtraInfo;
} MSLLHOOKSTRUCT, *PMSLLHOOKSTRUCT, *LPMSLLHOOKSTRUCT;
mouseData
Type: DWORD 解释(32位)
如果消息是类型是 WM_MOUSEWHEEL… 如果 消息是类型是WM_XBUTTONDOWN, WM_XBUTTONUP,
WM_XBUTTONDBLCLK, WM_NCXBUTTONDOWN, WM_NCXBUTTONUP, or
WM_NCXBUTTONDBLCLK, 那么 高位判断哪个按键。
举例用法:监控鼠标侧键XBUTTON1
LRESULT CALLBACK MouseHook(int nCode,WPARAM wParam,LPARAM lParam) {
LPMSLLHOOKSTRUCT pMouseHook = (MSLLHOOKSTRUCT*)lParam;
if (nCode >= 0) {
If (wParam==WM_XBUTTONDOWN && HIWORD(pMouseHook->mouseData)==XBUTTON1) {
...自己的代码;
return TRUE;
}
if (wParam == WM_XBUTTONUP && HIWORD(pMouseHook->mouseData)==XBUTTON1) {
//写上自己代码
return TRUE;
}
if (wParam == WM_XBUTTONDOWN && HIWORD(pMouseHook->mouseData)==XBUTTON2) {
//写上自己代码
return TRUE;
}
}
return CallNextHookEx(glhHook, nCode, wParam, lParam);
}
MSG structure
typedef struct tagMSG {
HWND hwnd;
UINT message;
WPARAM wParam;
LPARAM lParam;
DWORD time;
POINT pt;
} MSG, *PMSG, *LPMSG;
RECT structure
typedef struct _RECT {
LONG left;
LONG top;
LONG right;
LONG bottom;
} RECT, *PRECT;