Vilket språk ska jag använda mig av för att lyssna av musen/tangentbordet?

Trädvy Permalänk
Medlem
Plats
Örnsköldsvik
Registrerad
Jun 2008

Vilket språk ska jag använda mig av för att lyssna av musen/tangentbordet?

Hej!

Jag har grundläggande kunskaper inom C++, Java och C och Python. Jag har byggt ett program som ska kunna styra musen med hjälp av Java's robotklass. Det var väldigt enkelt.

Problemet är att jag vill spela in koordinater från musen och kunna lyssna av tangentbordet samt musens knappar. Sånt går att göra i Java, men det är begränsat. Man MÅSTE ha en så kallad GUI Frame som man få röra sig inom. Jag vill skapa ett program som lyssnar av tangentbordet och musen men det ska vara textbaserat. Det finns dock en klass inom java som hanterar muskoordinater och den heter Mouseinfo. Men det är bara koordinater och inte musklick eller tangentbordsklick.

Jag kör oftast textbaserat då det är jag som använder programmet endast.

Anledningen varför jag valde Java har med att ett javaprogram fungerar både i Windows som i Linux. Jag kör Lubuntu Linux 15.10 då det är snabbare än Windows 10.

Så jag har nu märkt att mina gränser är nådd och nu måste jag troligtvis byta språk för att lösa mitt problem. Har ni något förslag?
Jag vill helst att biblioteket/språket ni rekommenderar mig ska fungera både i Windows som i Linux, eller att biblioteket är användarvänligt.

| CPU: MMX 200 MHz Intel Pentium I| GPU: Voodo2 3dfx 8 Mb| RAM: SDRAM 32 Mb 133 Mhz | PSU: 3V fläkt 2W | Chassi: HP Vectra VE 5| Skärm: HP Ergo 1024| HDD: Toshiba 2033 MB | OS: Windows 95 B | Mus: HP |

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Jul 2013

https://github.com/titanium007/Windows-User-Action-Hook

Verkar göra det du vill.

EDIT; Bara i Windows troligtvis.

Trädvy Permalänk
Medlem
Plats
Örnsköldsvik
Registrerad
Jun 2008
Skrivet av sickhouse:

Okej! C# är typ som Java i grunden. Jag ska kolla mer på det där!

| CPU: MMX 200 MHz Intel Pentium I| GPU: Voodo2 3dfx 8 Mb| RAM: SDRAM 32 Mb 133 Mhz | PSU: 3V fläkt 2W | Chassi: HP Vectra VE 5| Skärm: HP Ergo 1024| HDD: Toshiba 2033 MB | OS: Windows 95 B | Mus: HP |

Trädvy Permalänk
Moderator
Plats
Linköping
Registrerad
Apr 2004

Utan att veta gissar jag att det kan vara svårt att hitta något som fungerar tillförlitligt på flera olika plattformar samtidigt, men kanske behöver man inte skriva så mycket systemspecifik kod ändå? Om man koncentrerar sig på windows är väl det mest naturliga att titta direkt i windows-api:et, där man till exempel hittar den här funktionen:
https://msdn.microsoft.com/en-us/library/windows/desktop/ms64...
som kan användas för att lyssna på tangentbordet. Motsvarande för mushändelser är:
https://msdn.microsoft.com/en-us/library/windows/desktop/ms64...

Använd dem till exempel så här:

#include "stdafx.h" #include <iostream> HHOOK hHook, hHook2; LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam) { if (nCode == HC_ACTION ) { KBDLLHOOKSTRUCT* p = (KBDLLHOOKSTRUCT*) lParam; if (wParam == WM_KEYDOWN) std::cout << "key down: "; else std::cout << "key up: "; std::cout << p->vkCode << " " << (char) p->vkCode << std::endl; } return CallNextHookEx(hHook, nCode, wParam, lParam); } LRESULT CALLBACK LowLevelMouseProc(int nCode, WPARAM wParam, LPARAM lParam) { MSLLHOOKSTRUCT* p = (MSLLHOOKSTRUCT*) lParam; if (wParam == WM_LBUTTONDOWN) std::cout << "left button down"; else if (wParam == WM_LBUTTONUP) std::cout << "left button up"; if (wParam == WM_RBUTTONDOWN) std::cout << "right button down"; else if (wParam == WM_RBUTTONUP) std::cout << "right button up"; else if (wParam == WM_MOUSEMOVE) std::cout << "mouse move"; std::cout << " (" << p->pt.x << ", " << p->pt.y << ")" << std::endl; return CallNextHookEx(hHook, nCode, wParam, lParam); } int main(int argc, char** argv) { HINSTANCE hInstance = GetModuleHandle(NULL); hHook = SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, hInstance, 0); hHook2 = SetWindowsHookEx(WH_MOUSE_LL, LowLevelMouseProc, hInstance, 0); MSG msg; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; }