emulierte Tastatureingabe eines RFID-Scanners in Variable schreiben

  • Hallo die Spezialisten,

    ich soll eine Lösung entwerfen, mit der wir das Entnehmen von Rechnern aus dem HW-Raum buchen können und ebenfalls die Rückgabe. Um den User der die HW entnimmt
    zu identifizieren wurde mir seitens der Firma ein RFID-Leser gegeben, der den Betriebsausweis ausliest und die gespeicherte Ausweisnummer als Tastatureingabe weiter gibt.
    Hat man z.B. ein Editorfenster offen und legt den Ausweis auf den Leser erscheint die Nummer zeichenweise im Fenster so als ob man sie eintippt.

    Da es sich dabei ja um "Personaldaten" handelt, möchte ich nun in meinem Proggi diese emulierte Tastatureingabe direkt in eine Variable schreiben ohne das jemand der vor dem Rechner steht da etwas mitlesen kann. Eine Inputbox ist also ausgeschlossen. ich dachte mir ich lasse eine Schleife laufen, die feststellt, das eine "Tastatureingabe" gemacht wurde. Hätte jemand eine Idee wie ich das realisieren könnte?

  • Da es sich dabei ja um "Personaldaten" handelt, möchte ich nun in meinem Proggi diese emulierte Tastatureingabe direkt in eine Variable schreiben ohne das jemand der vor dem Rechner steht da etwas mitlesen kann.

    Eine Inputbox ist also ausgeschlossen.

    Nein.

    Ich vermute, dass diese Übertragung den Fokus in einem editierbaren Control (Input, Edit) erfordert.

    Verwende ein Input mit Style: $ES_PASSWORD.

  • Hallo Bugfix,

    danke für deine Antwort. ;)

    Eigentlich will ich aber das das Ganze im Hintergrund abläuft, wie bei unseren Druckern in der Firma. Wir gehen an den Drucker, halten den Ausweis an den Leser
    und bekommen ohne Anzeige eines Input.- oder Loginfensters die individuellen Druckjobs angezeigt. Da meine Lösung nur per Touchscreen laufen soll will ich, außer die zur Buchung notwendigen
    Controls, nichts angezeigt haben, nach dem Motto was nicht da ist, respektive was nicht angezeigt wird, weckt auch keine Begehrlichkeiten.
    Schließlich soll sich niemand bemüßig sehen, heraus finden zu wollen, was da ausgelesen wird.

    Es sollte doch mit Autoit möglich sein den Stream(Keyboard-Eingabe) direkt und ohne grafische Controls zu verarbeiten?

  • Und wenn du das Input-Feld außerhalb der Gui 'anzeigst'?

  • Hallo funkey,

    auch das wäre ein interessanter Ansatz, vielen lieben Dank dafür. Damit sieht es aber bis jetzt so aus, als könne man in Autoit den StdIn-Stream nur
    anhand von Umwegen entgegen nehmen und in eine Variable speichern. Vielleicht hilft mir ja das Barcodescanner-Script von Oscar weiter...

  • Der RFID Scanner ist doch "sicher" per COM Port angeschlossen!?

    Also hast du sehr wahrscheinlich schon ein Programm das diese Eingabe in den Editor erst ermöglicht?

    Ich denke es wird ein Testprogramm vom Hersteller des Scanners sein?

    Wie wäre es wenn du den COM Port direkt ausliest.

    Hier ein Link zu einer UDF für COM Port

    Serial port UDF / COM port UDF
    Hi heres another UDF for the serial port. It is very similar to CommAPI using kernel32.dll, but all code is packed into a single file without any dependencies,…
    www.autoitscript.com

    If not :?: then ?( else :thumbup:

  • Hallo Concara,

    danke für den Hinweis, ich denke aber nicht. Laut Gerätemanager ist der RFID-scanner als Tastatur eingebunden.
    Das erklärt auch warum das Barcodescanner-Sript von Oscar 0 ausgibt wenn ich die Karte auf den Scanner halte,
    vorher aber den Focus auf den Desktop setze und somit eine Eingabe nicht erfolgen kann.
    Ist der Focus jedoch auf ein beliebiges Control(Editorfenster, Eingabezeile Browser etc.) gesetzt, gibt das Script die Ausweisnummer aus.

    Achja, ein Treiber oder SW war beim Scanner keine dabei...

  • Hallo funkey,

    auch das wäre ein interessanter Ansatz, vielen lieben Dank dafür. Damit sieht es aber bis jetzt so aus, als könne man in Autoit den StdIn-Stream nur
    anhand von Umwegen entgegen nehmen und in eine Variable speichern. Vielleicht hilft mir ja das Barcodescanner-Script von Oscar weiter...

    Mein Beispiel ist sicher der einfachste Weg um das Problem zu lösen.

    Ein anderer Weg, wäre ein Low-Level Tastatur-Hook, der aber wahrscheinlich in leicht abgewandelter Form als Keylogger verwendet werden könnte. Somit kannst du in diese Richtung von uns keine Hilfe erwarten, sorry.

  • Ein anderer Weg, wäre ein Low-Level Tastatur-Hook, der aber wahrscheinlich in leicht abgewandelter Form als Keylogger verwendet werden könnte. Somit kannst du in diese Richtung von uns keine Hilfe erwarten, sorry.

    Ich möchte das mal als Anlass nehmen, euch zu fragen, ob wir das Thema "Keylogger" etwas lockerer handhaben wollen?

    Gerade solche Anwendungsgebiete (RFID-Reader, Barcode-Scanner) sind ja eigentlich mit einem Tastatur-Hook viel besser zu handhaben.

    Für meinen Barcode-Scanner verwende ich hier bei mir sowieso einen Tastatur-Hook und nicht ein verstecktes Input-Control.

    In anderen Programmiersprachen sind die Hooks auch ausführlich dokumentiert und genau genommen gibt es auch in AutoIt bereits ein Script-Beispiel in der Hilfe (wenn man weiss, wo man suchen muss).

    Ich denke, zu einem Keylogger gehört ja schon etwas mehr als nur der Tastatur-Hook.

    Wenn Fragen konkret zu einem Keylogger gestellt werden, dann abwürgen, aber so...

    Was meint ihr dazu?

  • Was meint ihr dazu?

    Ich würde es auch begrüßen, wenn wir das Thema etwas lockerer sehen, denn wie du bereits gesagt hast, ist es von einem Tastatur-Hook noch ein weiter Weg zu einem (brauchbaren) Keylogger. Für mich klingt das so, als wollte ich jemandem nicht erklären, wie ein Benzinmotor funktioniert, weil er ja sonst ein Auto damit bauen könnte. Auch hier im Forum gibt es einige Scripts, in denen ein Low-Level Tastatur-Hook verwendet wird... streng genommen dürfte es die aber aufgrund der aktuellen Regeln gar nicht geben. Zudem... auch wenn ich einen guten Keylogger habe... muss ich ihn ja irgendwie auf dem Ziel-PC installieren und die Logs dann unbemerkt an mich senden... ohne das dies zurückverfolgbar ist... was dann der weitaus schwierigere Teil wäre.

  • Ich möchte das mal als Anlass nehmen euch zu fragen, ob wir das Thema "Keylogger" etwas lockerer handhaben wollen? Gerade solche Anwendungsgebiete (RFID-Reader, Barcode-Scanner) sind ja eigentlich mit einem Tastatur-Hook viel besser zu handhaben.

    [...]

    Wenn Fragen konkret zu einem Keylogger gestellt werden, dann abwürgen, aber so...

    Was meint ihr dazu?

    Meine Antwort deckt sich quasi wortwörtlich mit der von Bitnugger^^ , d.h. "das Thema sollte lockerer gesehen werden".

    Es wird, wie auch bei anderen NoGo-Themen, immer Grauzonen geben, oder um Bitnugger's Allegorie aufzugreifen : "Ich kann mir ein Auto kaufen um zu fahren, oder um damit Leute zu überfahren"
    Diese sollten aber nicht dazu führen, dass sinnvolle Anwendungsfälle per se abgewürgt werden.

    Im Einzelfall gibt es im Forum genug smarte User, die Missbrauchsversuche erkennen und entsprechend reagieren können ;) .

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Es sollte doch mit Autoit möglich sein den Stream(Keyboard-Eingabe) direkt und ohne grafische Controls zu verarbeiten?

    Hier mal die Version mit dem Tastatur-Hook:

  • Ich kann diesem Konsens nur zustimmen.

    Das benutzen eines Bar-codes-oder RFID Scanners ist heutzutage im Enterprise-Bereich weit verbreitet. Ich selbst benutze
    einen für die Hardwareverwaltung zur Erfassung von Seriennummern und dergleichen mehr. Auch RFID-Scanner werden bei uns in der Firma sehr zahlreich eingesetzt.

    Jedem Hilfesuchenden der versucht die Technologie in seine Anwendungszenarien programmatisch einzubinden obligatorisch Virusprogrammierung zu unterstellen,
    bedeutet ja, um bei der Analogie von Bitnugger zu bleiben: Man kann nicht allen Fahrschülern den Fahrunterricht verweigern mit dem Vorwurf sie würden vorsätzlich
    alle Fußgänger überfahren wollen. ;)

  • Und wenn du das Input-Feld außerhalb der Gui 'anzeigst'?

    funkey Wie sagt man das? Zwei "Dummies", ein Gedanken?
    Ich dachte als ich Post-1 gelesen hatte: wieso nicht kleine Inputfeld verwenden und einfach die Positionsangabe der Inpubox außerhalb der grafischen Darstellung angeben.
    Das was Du gemacht hast ist na klar viel besser.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Hallo Oscar,

    wie schaffe ich es, dass ich mit deiner Funktion die Ausweisnummer einlese und dann der Hook beendet wird, sodass ich weitere Eingaben(per inputbox z.B.)
    verarbeiten kann?

    Bei mir bleibt der Hook aktiv und alle nachfolgenden Eingaben werden ebenfalls erfasst. ;(

    ich habe die Zeilen

    _WinAPI_UnhookWindowsHookEx($hKeyHook)

    DllCallbackFree($hKeyProc

    ans Ende der Funktion _KeyProc gesetzt = Ohne Erfolg... Ebenso das Aufrufen der Funktion OnAutoItExit in _KeyProc

  • erledigt :rock::party::party::rock:

    die beiden Zeilen waren am Ende von Keyproc falsch.. Direkt nach dem Aufruf der Funktion war die richtige Position(also dort wo das Program nach dem Return steht) :part:

    Schönes WE

  • Hallo Oscar,

    Vor dem Aufruf von _Keyproc wird ja die Gui geladen. Wie kann ich es steuern, dass wenn das Einlesen in _Keyproc erfolgt ist, die Gui geschlossen wird und das Proggi weitermacht.

    ich habe es zunächst mit der While versucht, aber ich finde keinen Wert für den 2. Case ;(

  • Problem gelöst:

    Anstatt eines Switches in der While habe ich einen Select genommen und prüfe ob die Tastatureingabe vorgenommen wurde indem ich die buffer-Variable prüfe.
    Vorher setze ich dessen Wert auf die $sAusweis-Variable. Mann kann auch die Buffer-Variable direkt prüfen, aber ich benötige den String noch an anderer Stelle deshalb das Umsetzen.

  • Hallo hipfzwirgel,

    dein Problem hast du ja gelöst und ich habe nichts dazu beizutragen. Mir ist nur gerade die Codewiederholung in den Case Blöcken aufgefallen. Du könntest den ersten Block auch wie unten schreiben. Dann wird direkt der nächste Block ausgeführt.

    Code
    Case $nMsg = $GUI_EVENT_CLOSE
        ContinueCase

    Grüße autoiter