我是Java的新手。有这样的事情: 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上运行......
答案 0 :(得分:4)
实际上非常简单。我没有找到任何例子或任何东西。
然后我在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);
}
可以在交换机内部使用以下代码来检测收到的事件: