diff --git a/FunctionalModule/MouseKeyEvent/GlobalMouseKey/globalmouseevent_win.cpp b/FunctionalModule/MouseKeyEvent/GlobalMouseKey/globalmouseevent_win.cpp index b9ae7f495a2b353170f039d2e52964d522b90395..3241b6d1632c59a979014c7590b7d5d6e819fce6 100644 --- a/FunctionalModule/MouseKeyEvent/GlobalMouseKey/globalmouseevent_win.cpp +++ b/FunctionalModule/MouseKeyEvent/GlobalMouseKey/globalmouseevent_win.cpp @@ -9,10 +9,11 @@ static HHOOK g_hook = nullptr; /** - * @brief 处理鼠标事件的回调函数,由于这不是一个成员函数,所以需要通过中间单例类GlobalMouseEvent将鼠标信号传递出来 + * @brief 处理鼠标事件的回调函数,由于这不是一个成员函数,所以需要通过中间单例类mouseEvent将鼠标信号传递出来 * 具体内容看https://learn.microsoft.com/zh-cn/previous-versions/windows/desktop/legacy/ms644986(v=vs.85) * @param nCode 挂钩过程用于确定如何处理消息的代码。如果nCode小于零,则挂钩过程必须将消息传递给 CallNextHookEx 函数而不进行进一步处理,并且应返回CallNextHookEx返回的值 - * @param wParam 信号类型:WM_LBUTTONDOWN、WM_LBUTTONUP、WM_MOUSEMOVE、WM_MOUSEWHEEL、WM_MOUSEHWHEEL、WM_RBUTTONDOWN 或WM_RBUTTONUP(鼠标中键点击和拓展按还没找到怎么弄)。 + * @param wParam 信号类型:WM_LBUTTONDOWN、WM_LBUTTONUP、WM_MOUSEMOVE、WM_MOUSEWHEEL、WM_MOUSEHWHEEL、WM_RBUTTONDOWN 或WM_RBUTTONUP。 + * 其它扩展按键可以看https://learn.microsoft.com/en-us/windows/win32/inputdev/mouse-input * @param lParam MSLLHOOKSTRUCT结构体指针 * @return */ @@ -44,6 +45,42 @@ LRESULT CALLBACK LowLevelMouseProc(int nCode, WPARAM wParam, LPARAM lParam) emit GlobalMouseEvent::getInstance()->wheelEvent(new QWheelEvent(point, delta, Qt::MiddleButton, Qt::NoModifier)); break; } + case WM_MBUTTONUP: // 鼠标中键释放 + emit GlobalMouseEvent::getInstance()->mouseEvent(new QMouseEvent(QEvent::MouseButtonRelease, point, Qt::MiddleButton, Qt::MiddleButton, Qt::NoModifier)); + break; + case WM_MBUTTONDOWN: // 鼠标中键按下 + emit GlobalMouseEvent::getInstance()->mouseEvent(new QMouseEvent(QEvent::MouseButtonPress, point, Qt::MiddleButton, Qt::MiddleButton, Qt::NoModifier)); + break; + case WM_XBUTTONDOWN: // 鼠标功能键按下 + { + MSLLHOOKSTRUCT * msll = reinterpret_cast(lParam); + int Button = GET_XBUTTON_WPARAM (msll->mouseData); + switch (Button) + { + case XBUTTON1: // 后退 + emit GlobalMouseEvent::getInstance()->mouseEvent(new QMouseEvent(QEvent::MouseButtonPress, point, Qt::XButton1, Qt::XButton1, Qt::NoModifier)); + break; + case XBUTTON2: // 前进 + emit GlobalMouseEvent::getInstance()->mouseEvent(new QMouseEvent(QEvent::MouseButtonPress, point, Qt::XButton2, Qt::XButton2, Qt::NoModifier)); + break; + } + break; + } + case WM_XBUTTONUP: // 鼠标功能键释放 + { + MSLLHOOKSTRUCT * msll = reinterpret_cast(lParam); + int Button = GET_XBUTTON_WPARAM (msll->mouseData); + switch (Button) + { + case XBUTTON1: + emit GlobalMouseEvent::getInstance()->mouseEvent(new QMouseEvent(QEvent::MouseButtonRelease, point, Qt::XButton1, Qt::XButton1, Qt::NoModifier)); + break; + case XBUTTON2: + emit GlobalMouseEvent::getInstance()->mouseEvent(new QMouseEvent(QEvent::MouseButtonRelease, point, Qt::XButton2, Qt::XButton2, Qt::NoModifier)); + break; + } + break; + } default: break; } diff --git a/FunctionalModule/MouseKeyEvent/MouseKeyEvent.pro b/FunctionalModule/MouseKeyEvent/MouseKeyEvent.pro index 92f43a1fe1a1a04ac2314dea2fb4fe03f1b06196..3a0792d12c4a3b5932d35df3e66aabdede05c40c 100644 --- a/FunctionalModule/MouseKeyEvent/MouseKeyEvent.pro +++ b/FunctionalModule/MouseKeyEvent/MouseKeyEvent.pro @@ -30,7 +30,7 @@ include($$PWD/GlobalMouseKey/GlobalMouseKey.pri) INCLUDEPATH += $$PWD/GlobalMouseKey # 定义程序版本号 -VERSION = 1.6.2 +VERSION = 1.8.0 DEFINES += APP_VERSION=\\\"$$VERSION\\\" contains(QT_ARCH, i386){ # 使用32位编译器 diff --git a/FunctionalModule/MouseKeyEvent/widget.cpp b/FunctionalModule/MouseKeyEvent/widget.cpp index 569ac43f1cecbdd0a3a577adce9d5e1cf437a453..e5cd459363f7e6b6f7983b610f3e853c37050d67 100644 --- a/FunctionalModule/MouseKeyEvent/widget.cpp +++ b/FunctionalModule/MouseKeyEvent/widget.cpp @@ -54,6 +54,16 @@ void Widget::on_mouseEvent(QMouseEvent* event) but = "中键"; break; } + case Qt::XButton1: + { + but = "功能键【后退】"; + break; + } + case Qt::XButton2: + { + but = "功能键【前进】"; + break; + } default: { but = "未知"; @@ -70,7 +80,7 @@ void Widget::on_mouseEvent(QMouseEvent* event) ui->textEdit->append(str); break; } - case QEvent::MouseButtonRelease: // 鼠标右键抬起 + case QEvent::MouseButtonRelease: // 鼠标抬起 { QString but; switch (event->button()) @@ -90,6 +100,16 @@ void Widget::on_mouseEvent(QMouseEvent* event) but = "中键"; break; } + case Qt::XButton1: + { + but = "功能键【后退】"; + break; + } + case Qt::XButton2: + { + but = "功能键【前进】"; + break; + } default: { but = "未知"; @@ -106,6 +126,7 @@ void Widget::on_mouseEvent(QMouseEvent* event) delete event; // 使用完成后记得delete } + /** * @brief 全局鼠标滚轮事件 * @param event