Deaktivierung Tastatur beim einlesen eines Strings via RFID-Leser

  • Hallo Gemeinde,

    bezugnehmend auf meinen Post bzgl. RFID-Leser ergibt sich ein größeres Problem:

    wie kann ich verhindern, das während des Einlesens des Strings andere Eingaben gemacht werden, z.B. per Tastatur?
    ich dachte temporäres deaktivieren der entsprechenden USB-Ports oder so.

    Das Einlesen von Buchstaben kann ich zwar mit StringIsInt() oder StringisDigit() verhindern nur müsste ich dann das Proggi nochmal von vorne Starten damit der Einlesevorgang nochmal beginnt.
    Das Aufrufen der Callbackfunktion durch

    Spoiler anzeigen

    Func Kallback()

    Global $g_sBuffer = ""

    Global $g_hStub_KeyProc = DllCallbackRegister('_KeyProc', 'long', 'int;wparam;lparam')

    Global $hmod = _WinAPI_GetModuleHandle(0)

    Global $g_hHook = _WinAPI_SetWindowsHookEx($WH_KEYBOARD_LL, DllCallbackGetPtr($g_hStub_KeyProc), $hmod)

    EndFunc ;==>Kallback

    hilft leider nicht. Das Proggi macht einfach weiter ;(

  • Hallo,

    kannst du vlt. vor dem Einlesen der Zahlen einen ConsoleRead machen, dessen Input du in die Zwischenablage umlenkst und nach dem Scannen den Inhalt der Zwischenablage wieder ausliest? Oder beißt sich das mit dem Scanvorgang?

  • Hallo JBO,

    mir ist nicht ganz klar wie dein Vorschlag verhindern soll das jemand versehentlich eine Eingabe per Tastatur macht?
    Die Call-back Funktion von Oscar, bzw. aus der AutoIt-Hilfe liest alles ein, egal ob per RFID-Leser eingegeben oder per Tastatur...

    Hallo AspirinJunkie,

    mit Blockinput habe ich es bereits versucht, aber ich glaube die Callback liest trotzdem ALLES ein was i-wie eingegeben wird, da sie ja
    mit den Windows-APIs kommuniziert. Jedenfalls hat es nicht geklappt...

    Sollte es nicht möglich sein USB-Ports zu deaktivieren(vielleicht per WMI oder so)?

  • Dann deaktivierst du diese aber auch für andere Programme und beim wieder aktivieren wird das angeschlossene Gerät im schlimmsten Fall wieder NEU installiert... Zusätzlich kann das an jedem PC ein anderer Port sein und was wenn jemand dann die Tastatur umsteckt? Also nicht wirklich praktikabel. Aber schau mal hier rein evtl. hilft das:

    Detect Read Barcode
    Hello Autoit Forum , I am trying to detect Barcode scanners actions.I searched the forum and i found commMG UDF but i could not detect actions. Thanks , Loken
    www.autoitscript.com
  • Hallo Moombas, ich habe jetzt das Prob anderweitig gelöst...

    Spoiler anzeigen

    Func EvaluateKey($iKeycode)

    If (($iKeycode > 47) And ($iKeycode < 58)) Then ; 0 - 9

    $g_sBuffer &= Chr($iKeycode)

    Switch $g_sBuffer

    Case $g_sBuffer <> ""

    $sAusweisNr &= $g_sBuffer

    $g_sBuffer = ''

    Global $iLength = StringLen($sAusweisNr)

    If $iLength = 6 Then

    $g_hStub_KeyProc = 0

    OnAutoItExit()

    If $sStartAd = 0 Then

    $iRetValue = AusweisNrCheck($sAusweisNr) ; Func zur Prüfung ob der AD-Account valide ist

    If $iRetValue <> 0 Then

    MsgBox(BitOR(4096, 16), "Fehler : ", "Fehlercode : " & $iRetValue & @CRLF)

    EndIf

    EndIf

    EndIf

    EndSwitch

    Else

    If (($iKeycode > 64) And ($iKeycode < 91)) _ ; a - z

    Or (($iKeycode > 96) And ($iKeycode < 123)) Then ; A - Z

    GUICtrlSetData($sDisplayname, " Only digits are allowed! Scan ID-Card again..." & @CRLF & @CRLF & @TAB & "Don't use Keyboard or anything else!")

    EndIf


    EndIf

    EndFunc ;==>EvaluateKey

    Ich frage zunächst nur Zahlen ab(da Ausweisnummer aus 6 Zahlen besteht). Wenn ein Buchstabe auftaucht wird eine Fehlermeldung ausgegeben(GuiCtrlSetData...).
    Da das Einlesen dann immer noch aktiv ist reicht es dann aus den Ausweis auf den Scanner zu legen...

    Fall erledigt...