Einlesen eines Strings mit RFID-Kartenleser

  • Hallo Gemeinde,

    ich drehe gerade total durch und raste aus = Ich brauche Hilfe:

    Ich muss ein Programm entwickeln, zur Erfassung von HW-Entnahmen aus dem Labor. Damit der Entleiher identifiziert werden kann, lese ich mittels RFID-Leser dessen Betriebsausweis aus.

    das mache ich mit folgendem Konstrukt(Stark gekürzt damit das keiner missbrauchen kann ;) )

    Der von mir auszulesende String ist 6 Zeichen lang(nur Zahlen). Wenn das 6. Zeichen erfasst ist, breche ich den Lesevorgang ab(aufruf Func OnAutoitExit) und rufe dann die nächste func(AdLogin) auf.

    Das Problem: Die "Leseroutine" schreibt mir die letzte Ziffer immer in das in der Func ADLogin sich öffnende Input-Feld.

    WIE KANN ICH DAS VERHINDERN :?::?::?:

  • Wäre es nicht einfacher alles was gescannt wird zu nehmen und einfach nur die vorderen 6 Zeichen zu nutzen?

    Oder das Eingabefeld auf 6 Zeichen via GUICtrlSetLimit zu begrenzen?

  • Hallo funkey, hallo Moombas

    sorry das ich mich nicht früher gemeldet hatte.

    hier zunächst der Code von OnAutoitexit:

    Code
    Func OnAutoItExit()
    
        _WinAPI_UnhookWindowsHookEx($g_hHook)
        DllCallbackFree($g_hStub_KeyProc)
    
    EndFunc   ;==>OnAutoItExit

    @ funkey: die Variable $g_hStub_KeyProc muss ich auf Null setzen, damit die 2. Zeile (Dll...) entsprechend ausgeführt wird (die Callbackfunktion hält die Variable nämlich immer auf 1). Auf 0 wird die Lesefunktion gestoppt.

    @ Moombas: Das auf das Einlesen folgende Inputfeld nimmt die AD-UserKennung auf, dieses kann ich also nicht begrenzen. Durch die func Stringlength werden nur 6 Zeichen angenommen. Soweit passt das alles.
    Die 6-stellige Ausweisnummer steht auch in der $sAusweisNr zur Verfügung. das passt auch. Das einzige was nicht passt, ist, dass wenn das Inputfeld geöffnet wird, dort immer eine 0 rein geschrieben wird. Das ist aber für einen AD-Login äußerst unpassend. Im Moment helfe ich mir mit einem vor dem Aufruf des Inputfeldes gesendeten {Backspace}. Es wäre aber schön zu wissen woher die Null kommt und wie ich das ohne {Backspace} verhindert bekomme...

    Einmal editiert, zuletzt von hipfzwirgel (26. November 2021 um 10:06)

  • Das mit der Null hört sich nach einem "Standard Rückgabewert" einer Funktion bzw. in deinem Fall ja des DLL Callback an, wenn kein Wert übergeben wurde.

    Kannst du das nicht abfragen und dann abfangen (wenn <> 0, sonst leer)?

  • Hallo Moombas,

    zunächst eine schöne Woche. Die Null kommt tatsächlich aus der Callback-Funktion.
    Es wird immer das letzte Zeichen des eingelesenen Strings in das Inputfeld geschrieben. Das ist es was ich nicht verstehe.
    Ich vermute es gibt irgend einen "Puffer" in dem das jeweils letzte Zeichen noch gespeichert ist. Da es sich dabei um einen Schreibvorgang handelt,
    wird es wohl nicht einfach eine Variable sein, sondern so etwas wie eine weitere (letzte) ausgabe an den STDOUT-Stream oder so...