Tastatureingaben Manipulieren

Du hast eine Idee für ein Projekt?
Antworten
PixelSpecter
User
Beiträge: 2
Registriert: Donnerstag 7. November 2024, 13:42

Hi Community,

Vorneweg: Ich bin Absoluter Python-Noob, brauche aber ein Tool um Dinge zu tun.

Zum Projekt:

Ich habe einen RFID Scanner, der Inventarsticker scannen soll und in die entsprechende Software pasten soll. Der Scanner verhält sich Windows gegenüber wie eine Tastatur.
Das Problem ist, dass die RFID Tags wie üblich kodiert sind. Ich bekomme also einen HEX-Code vom Scanner, den ich etwas zurechtschneiden und in Ascii übersetzen muss.

Meine Idee wär also gewesen:
1. Eingabe vom Scanner abfangen
2. Zurechtschneiden
3. Übersetzen
4. Ergebnis ins Eingabefeld der Software Pasten.
5. Enter drücken

Zur Frage: Ist das überhaupt etwas, das via Python realisierbar ist?

Danke schonmal fürs lesen. Leider hab ich keine Kartoffel für das Ende des langen Posts.

VG
PS
Benutzeravatar
Dennis89
User
Beiträge: 1449
Registriert: Freitag 11. Dezember 2020, 15:13

Hallo,

nur um dich richtig zu verstehen, das Scannen findet nicht mit Python statt sondern mit einer fertigen Software?
Wenn du den Scanner direkt mit Python ansprechen kannst, dann sehe ich keine Probleme.

Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
Benutzeravatar
__blackjack__
User
Beiträge: 13703
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Dennis89: Für das Scannen braucht man keine Software, der Scanner ”ist eine Tastatur”. Der wird per USB angestöpselt und wenn man da einen Tag dran hält, dann ist das als wenn die ID von dem Tag über eine Tastatur eingegeben wird. Wenn da gerade ein Texteditor den Fokus hat, landet das dort. Wenn es im E-Mail-Programm die Subjekt-Zeile ist, dann halt da, usw.
„Incorrect documentation is often worse than no documentation.“ — Bertrand Meyer
Benutzeravatar
DeaD_EyE
User
Beiträge: 1143
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Um das zu erreichen, muss man 3 Aufgaben erledigen.

1) Eingaben des USB-Scanners verhindern. Keine Ahnung wie, aber unter Linux ist nichts unmöglich. Sicherlich gibt es auch Unterschiede zwischen X11 und Wayland.
2) Eingaben des USB-Scanners mit Python abfragen. Das ist einfach.
3) Den eingelesenen Barcode in einer DB suchen, um dann programmatisch die Tastatureingabe des gefundenen Datensatzes erledigen.

Für die letzten 2 Aufgaben kann man z.B. pynput verwenden.
Ich hatte das mal unter Wayland getestet. Die Abfrage funktioniert und in anderen Fenstern kann ich nichts mehr schreiben, solange das Programm läuft.

Hier der Beispielcode:

Code: Alles auswählen

from pynput.keyboard import Listener, Events

class BarcodeScanner:
    def __init__(self):
        self.listener = self._listener()

    def _listener(self):
        listener = Listener(suppress=True)
        listener.on_press = self.on_press
        listener.start()
        return listener

    def join(self):
        self.listener.join()

    def on_press(self, event: Events):
        print(event, type(event))


if __name__ == "__main__":
    scanner = BarcodeScanner()
    scanner.join()
Ich hatte gerade noch die Verrückte Idee einen Microcontroller (z.B. ESP32 oder RP Pico W) zu verwenden, um daten via WLAN zu senden. Aber soweit ich weiß gibt es nicht die Möglichkeit mit Micropython den Microcontroller als USB-Host zu betreiben. Umgekehrt geht es. Ich habe mal eingaben mit einem RP Pico für das Spiel HELLDIVERS2 gemacht.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
PixelSpecter
User
Beiträge: 2
Registriert: Donnerstag 7. November 2024, 13:42

Danke schonmal für die Antworten.

Mein begrenztes Wissen würde auch sagen, dass das Abfangen der Eingabe das größte Problem darstellen würde.

Im Zweifel würde man die Eingabe auch über eine API realisieren können. Das geht aber über ein kleines Nebenprojekt neben der eigentlichen Arbeit hinaus. 🙈
blacksh33p86
User
Beiträge: 1
Registriert: Donnerstag 21. November 2024, 14:02

Servus,

mir würde noch eine "dirty"-Variante einfallen. Du könntest ein Textfeld erstellen (evtl. auch versteckt) und den Fokus drauf legen. Sobald die Texteingabe vom Scanner in das Feld erfolgt könnte man über eine Event (z.B. Change) den Input checken (ggf. Länge, Regex), die Daten verarbeiten und letztlich in ein sichtbares Ergebnisfeld schreiben. Nicht schön, aber relativ einfach umsetzbar.
Antworten