3

JavaからQTを初めて使用します。次のようなものはありますか: QT のhttps://code.google.com/p/jnativehook/ ? すべてのマウス イベントを座標で取得できますか? 私は次のことをしました:

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でのみ実行する必要があります...

4

1 に答える 1

5

それは実際には非常に簡単です。例も何も見つかりませんでした。

次に、探しているものを正確に示すビデオを 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
于 2013-12-06T13:30:50.133 に答える