thisとQAbstractNativeEventFilterクラスで作業した後、クラスIは最終的にHID(マウスとキーボードの両方)からネイティブイベントを得ました。Qtでの生のマウス移動を取得
私は多くの同様の質問を読んだが、誰も私の問題を解決しなかった。私はdpiに基づいてマウスの動きを取得しようとします。 Qt 5.5で私のプロジェクト全体がビルドされています。
RIM_TYPEMOUSEフラグが設定されていても、マウスの移動イベントを他のHIDイベント(マウスとキーボード)から分離することはできません。ここで
は私の実装からいくつかのコードです:ここにも
bool MouseRawMovement::nativeEventFilter(const QByteArray &eventType, void *message, long *result)
{
if(eventType == "windows_generic_MSG")
{
MSG *msg = reinterpret_cast<MSG*>(message);
qDebug()<<msg->message; // It prints numbers such as 6,26,28,141 on each event
if(msg->message == WM_INPUT) //it never gets in
{
UINT dwSize = 40;
static BYTE lpb[40];
GetRawInputData((HRAWINPUT)msg->lParam, RID_INPUT,
lpb, &dwSize, sizeof(RAWINPUTHEADER));
RAWINPUT* raw = (RAWINPUT*)lpb;
if (raw->header.dwType == RIM_TYPEMOUSE)
{
int xPosRelative = raw->data.mouse.lLastX;
int yPosRelative = raw->data.mouse.lLastY;
qDebug()<<xPosRelative<<yPosRelative ;
}
}
}
return false;
}
は私のコンストラクタ
MouseRawMovement::MouseRawMovement()
{
Rid[0].usUsagePage = 0x01;
Rid[0].usUsage = 0x02;
Rid[0].dwFlags = RIDEV_INPUTSINK;
Rid[0].hwndTarget = 0;
if(!RegisterRawInputDevices(Rid, 1, sizeof(Rid[0])))
qDebug()<<QString::number(GetLastError()); //I see error msg 6 - Ref. ERROR_INVALID_HANDLE
}
出力がゼロ(0)のすべての時間を私に示してあります。
hWndで何が起こっているのですか?私はこれを与えることを試みた:
HWND hWnd =::GetConsoleWindow();
が、私は同じ結果を持っていました。 main.cppには
私は日のために試してみて、私は解決策を見つけることができませんでした
MainWindow w;
a.installNativeEventFilter(&w.mm);
ネイティブフィルターをインストールします。 HRAWINPUT
RAWINPUT構造へのハンドル:誰もがそこにある...(???)GetRawInputData MSDNのページ状態として
から一部ですが、あなたの問題は何ですか? 「分離できない」とはどういう意味ですか? –
私はRIM_TYPEMOUSEのどちらかをチェックしていません。マウスやキーボードのキーを押すと、出力があります...次に、ゼロだけが表示されます。 – thanasispap