gpt4 book ai didi

QT全局鼠标监听器

转载 作者:行者123 更新时间:2023-12-04 00:39:41 24 4
gpt4 key购买 nike

我是从 Java 开始接触 QT 的新手。有没有这样的东西: https://code.google.com/p/jnativehook/对于QT?我可以获取所有带坐标的鼠标事件吗?我做了以下事情:

bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{
if (event->type() == QEvent::MouseButtonRelease)
{
QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event);
ui->listWidget->addItem(QString("Mouse pressed: %1,%2").arg(mouseEvent>pos().x()).arg(mouseEvent->pos().y()));
}
return false;
}

这工作正常,但它只在我的应用程序内执行,而不是在系统范围内执行。我该怎么做才能让它在 QT 中工作?此外,这只需要在 Windows 上运行...

最佳答案

其实很简单。我没有找到任何例子或任何东西。

然后我在 YouTube 上找到了一个视频,它准确地显示了我正在搜索的内容(对于键盘,但鼠标基本相同)。

所以如果有人需要这个,你就去:

#include <Windows.h>
#pragma comment(lib, "user32.lib")
HHOOK hHook = NULL;
using namespace std;

LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam) {
switch( wParam )
{
case WM_LBUTTONDOWN: qDebug() << "Left click"; // Left click
}
return CallNextHookEx(hHook, nCode, wParam, lParam);
}

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
hHook = SetWindowsHookEx(WH_MOUSE_LL, MouseProc, NULL, 0);
if (hHook == NULL) {
qDebug() << "Hook failed";
}
ui->setupUi(this);
}

可以在开关内部使用以下代码来检测收到了哪个事件:

  • 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

关于QT全局鼠标监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20401896/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com