一、需求说明
正常情况下,Qt获取鼠标事件都是获取窗口内的鼠标事件,当窗口、控件 获取焦点之后,点击窗口内的控件,Qt都可以获取到鼠标事件。 如果窗口没有获取到焦点,或者 点击软件范围外的其他地方,Qt正常的事件捕获就无法监听鼠标的动作了。
现在的需求是: 需要在软件之外,任何地方点击鼠标,Qt程序里都能获取到数据事件,实现全局鼠标事件侦听。
这个可以利用win32的API接口SetWindowsHookEx
来实现侦听。
具体实现代码看下面。
二、实现代码
侦听全局鼠标事件用到了windows系统API函数。
完整的测试代码如下:
#include "widget.h"
#include "ui_widget.h"
#include
#include
#pragma execution_character_set("utf-8")
#pragma comment(lib, "user32.lib")
HHOOK hHook = NULL;
using namespace std;
/*
WM_MOUSEMOVE = 0x200
WM_LBUTTONDOWN = 0x201
WM_LBUTTONUP = 0x202
WM_LBUTTONDBLCLK = 0x203
WM_RBUTTONDOWN = 0x204
WM_RBUTTONUP = 0x205
WM_RBUTTONDBLCLK = 0x206 双击事件
WM_MBUTTONDOWN = 0x207
WM_MBUTTONUP = 0x208
WM_MBUTTONDBLCLK = 0x209
WM_MOUSEWHEEL = 0x20A
WM_XBUTTONDOWN = 0x20B
WM_XBUTTONUP = 0x20C
WM_XBUTTONDBLCLK = 0x20D
WM_MOUSEHWHEEL = 0x20E
*/
LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam)
{
switch(wParam)
{
case WM_LBUTTONDOWN: //鼠标左键按下
qDebug()