Device File (/dev/input) lesen
Verfasst: 21.11.2018 18:43
Hi,
nach etwa 7 Jahren Pause habe ich mal wieder den Weg zurueck zu PureBasic gefunden. RSBasic hat mich gestern auf eine interessante Idee gebracht: Er verwendet unter Windows eine separate Tastatur fuer Shortcuts. Das moechte ich jetzt unter Linux mit PureBasic umsetzen.
Ich habe schon rausgefunden wie man die Tastatureingaben direkt aus dem Device File liest und verhindert dass der X Server darauf reagiert. Also habe ich mal versucht in PB das Device File mit ReadFile zu oeffen und Bytes rauszulesen. Laut einem Blogartikel ist jedes Keyboard Event 24 Byte lang. Allerdings scheint PB mit den Read* Funktionen auf mehr Bytes zu warten.
Beispiel:
Wenn ich das Programm starte, wartet es trotz Eingabe auf der Tastatur auf ReadData. Erst nach etwa 30 Tastendruecken bekomme ich ein Ergebnis obwohl doch durch das erste Event (Key Down) schon 24 Bytes zum Lesen vorhanden sind. Es ist auch kein Read Timeout oder aehnliches, denn wenn ich keine Eingabe mache wartet das Programm ewig.
Mit dem Python Script aus dem Blogartikel funktioniert das Auslesen problemlos.
Hat jemand eine Idee was ich falsch mache?
nach etwa 7 Jahren Pause habe ich mal wieder den Weg zurueck zu PureBasic gefunden. RSBasic hat mich gestern auf eine interessante Idee gebracht: Er verwendet unter Windows eine separate Tastatur fuer Shortcuts. Das moechte ich jetzt unter Linux mit PureBasic umsetzen.
Ich habe schon rausgefunden wie man die Tastatureingaben direkt aus dem Device File liest und verhindert dass der X Server darauf reagiert. Also habe ich mal versucht in PB das Device File mit ReadFile zu oeffen und Bytes rauszulesen. Laut einem Blogartikel ist jedes Keyboard Event 24 Byte lang. Allerdings scheint PB mit den Read* Funktionen auf mehr Bytes zu warten.
Beispiel:
Code: Alles auswählen
EnableExplicit
ReadFile(0, "/dev/input/event12")
Define *memory = AllocateMemory(24)
ReadData(0, *memory, 24)
Debug PeekS(*memory, 16) ; timestamp
Debug PeekW(*memory + 16); type
Debug PeekW(*memory + 18); code
Debug PeekL(*memory + 20); value
Mit dem Python Script aus dem Blogartikel funktioniert das Auslesen problemlos.
Hat jemand eine Idee was ich falsch mache?