Ich habe ein USB-HID-Touchpad, das Eingang sammelt. Standardmäßig, wenn ich auf das Touchpad drücke erzeugt es Wagenrücklauf (Enter) und wenn ich versuche, es als eine Maus zu verwenden, gibt es tatsächlich einen schleppenden Zustand.Konvertieren von Ereignissen von einem USB-Human-Interface-Gerät mit C++
Was ich tun möchte, ist den Wagenrücklauf in eine Mausklick Ereignisses und den ziehen Zustand in einen Cursor bewegen ohne den ersten Klick Teil zu konvertieren.
Ich fand die raw input Alternative. Ich weiß jedoch nicht, wie man es in Maus umwandelt, klicken Sie und Cursor verschieben Sie. Hier
ist der Code, verantwortlich mit der Maus 'Lesen':
LRESULT CALLBACK mouseProc (int nCode, WPARAM wParam, LPARAM lParam)
{
MOUSEHOOKSTRUCT * pMouseStruct = (MOUSEHOOKSTRUCT *)lParam;
if (pMouseStruct != NULL)
{
if(wParam == WM_LBUTTONDOWN)
{
cout<<"clicked"<<endl;
}
printf("Mouse position X = %d Mouse Position Y = %d\n", pMouseStruct->pt.x,pMouseStruct->pt.y);
stringstream sx, sy;
sx << (int) pMouseStruct->pt.x << endl;
sy << (int) pMouseStruct->pt.y << endl;
}
return CallNextHookEx(hMouseHook, nCode, wParam, lParam);
}
dann die Tastatur Teil:
LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if (nCode < 0)
return CallNextHookEx(NULL, nCode, wParam, lParam);
tagKBDLLHOOKSTRUCT *str = (tagKBDLLHOOKSTRUCT *)lParam;
cout<<str->vkCode<<endl;
return CallNextHookEx(NULL, nCode, wParam, lParam);
}
dann die Protokollierung Teil:
DWORD WINAPI MyLogger(LPVOID lpParm)
{
HINSTANCE hInstance = GetModuleHandle(NULL);
hMouseHook = SetWindowsHookEx(WH_MOUSE_LL, mouseProc, hInstance, NULL);
hKeyHook = SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, hInstance, NULL);
MSG message;
while (GetMessage(&message,NULL,0,0))
{
TranslateMessage(&message);
DispatchMessage(&message);
}
UnhookWindowsHookEx(hMouseHook);
return 0;
}
Hinweis: I Ich weiß nicht, ob das relevant ist, aber ich möchte mit dem HID in einer Chromium-Instanz auf einem Windows-System spielen.
Wie würde Ihr transparentes Fenster wissen, ob es ein 'WM_MOUSEMOVE' oder ein' WM_NCMOUSEMOVE' in das darunter liegende Fenster senden soll? – IInspectable
Ich nahm an, das transparente Fenster sollte wissen, senden Sie ein 'WM_NCMOUSEMOVE' (um eine bessere Kontrolle über die 'Ausgabe'), aber ich hielt dies nicht für sehr wichtig. Sollte ich mir Sorgen machen? –
Ein Fenster erhält entweder alle Eingaben oder keine. Wenn Sie die Eingabe filtern möchten, müssen Sie einen Teil dieser Eingabe an die darunter liegenden Fenster weitergeben. 'WM_MOUSEMOVE' ist eine der Nachrichten, die Sie weitergeben möchten, und Sie müssen entscheiden, ob es' WM_MOUSEMOVE' oder 'WM_NCMOUSEMOVE' sein soll. 'WM_MOUSELEAVE' ist eine andere Nachricht, die wahrscheinlich nicht richtig zu bekommen ist, da die vorgeschlagene Konfiguration ein transparentes Fenster enthält. – IInspectable