Après avoir travaillé sur this et QAbstractNativeEventFilter classe j'ai finalement obtenu des événements natifs de HID (à la fois la souris et le clavier).Obtenir le mouvement de la souris brute dans Qt
J'ai lu beaucoup de questions similaires mais aucune n'a résolu mon problème. J'essaie d'obtenir le mouvement de la souris en fonction de dpi. Je travaille sur Qt 5.5 car tout mon projet y est construit.
Je ne peux pas séparer les événements de mouvement de la souris d'autres événements HID (souris et clavier) même avec l'indicateur RIM_TYPEMOUSE.
Voici une partie de ma mise en œuvre:
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;
}
Aussi voici mon constructeur
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
}
sortie me montre des zéros (0) tout le temps.
Ce qui se passe avec hWnd. J'ai essayé de donner ceci:
HWND hWnd =::GetConsoleWindow();
mais j'ai eu le même résultat.
En main.cpp j'installer le filtre natif
MainWindow w;
a.installNativeEventFilter(&w.mm);
J'essaie de jours et je ne pouvais pas trouver la solution. Y at-il ... (???)
Mais quel est votre problème? Que voulez-vous dire par "ne peut pas séparer"? –
Soit j'ai RIM_TYPEMOUSE vérifier soit pas le même. Quand j'appuie sur une touche de la souris ou du clavier, j'ai une sortie ... Deuxièmement, je ne vois que des zéros. – thanasispap