Hallo Leute. Wir setzen hier Barcodescanner für verschiedene Dinge ein. Ich möchte nun so einen Barcodescan gerne mit AutoIt abfangen und dann weiterverarbeiten. Wie stelle ich das am einfachsten an?
Barcodescanner-"Stream" abfangen
-
Scritch -
6. Juli 2018 um 15:38 -
Erledigt
-
-
Hallo Scritch
meinst du nur während des Scans mitlesen, um mit dem Inhalt arbeiten zu können, oder willst du die Eingabe wirklich auch so abfangen, dass sie nicht weitergeleitet wird?
-
- Offizieller Beitrag
Ich hatte mir für meinen Scanner mal ein Script geschrieben:
AutoIt
Alles anzeigen#include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <StructureConstants.au3> #include <WinAPI.au3> #include <WindowsConstants.au3> OnAutoItExitRegister('OnAutoItExit') Global $sBuffer = '' Global $hKeyProc = DllCallbackRegister('_KeyProc', 'long', 'int;wparam;lparam') Global $hmod = _WinAPI_GetModuleHandle(0) Global $hKeyHook = _WinAPI_SetWindowsHookEx($WH_KEYBOARD_LL, DllCallbackGetPtr($hKeyProc), $hmod) Global $hGui = GUICreate('Barcodescanner', 300, 100) Global $idCode = GUICtrlCreateInput('', 10, 30, 280, 30, BitOR($ES_CENTER, $ES_AUTOHSCROLL, $ES_NUMBER)) GUICtrlSetFont(-1, 16, 400, 0, 'Courier New') GUISetState() Do Until GUIGetMsg() = $GUI_EVENT_CLOSE Exit Func _EvaluateKey($keycode) Switch $keycode Case 48 To 57 ; 0 - 9 $sBuffer &= Chr($keycode) Case 13 ; RETURN ConsoleWrite(StringFormat('Barcode-Nummer = %i\r\n', $sBuffer)) GUICtrlSetData($idCode, $sBuffer) $sBuffer = '' Case 27 ; ESC Exit Case Else $sBuffer = '' EndSwitch EndFunc ;==>_EvaluateKey Func _KeyProc($nCode, $wParam, $lParam) Local $tKEYHOOKS = DllStructCreate($tagKBDLLHOOKSTRUCT, $lParam) If $nCode < 0 Then Return _WinAPI_CallNextHookEx($hKeyHook, $nCode, $wParam, $lParam) If $wParam = $WM_KEYDOWN Then _EvaluateKey(DllStructGetData($tKEYHOOKS, 'vkCode')) Return _WinAPI_CallNextHookEx($hKeyHook, $nCode, $wParam, $lParam) EndFunc ;==>_KeyProc Func OnAutoItExit() _WinAPI_UnhookWindowsHookEx($hKeyHook) DllCallbackFree($hKeyProc) EndFunc ;==>OnAutoItExit
Das hängt aber auch davon ab, wie Dein Scanner die Daten sendet (meist konfigurierbar). Meinen Scanner habe ich so eingestellt, dass er die Nummer und anschließend ein <RETURN> sendet.
Damit klappt das mit obigen Script, dass die Nummer automatisch ins Inputfeld eingetragen wird.
-
Um das noch zu ergänzen. Vielleicht sehe ich es einfach nicht. Dieses Skript fängt die Message des Scanners nicht in dem Sinne ab, dass nichts mehr an das aktive Fenster gesendet wird. Hier wird nur mitgelesen. Wenn wirklich ein Abfangen notwendig sein sollte, hätte ich einen Blick in Extensa - Hotkeys für unterschiedliche Eingabegeräte trennen empfohlen.
-
Hallo Leute. Mit Abfangen meine ich mitlesen. Es ist ein Fenster einer gewissen Anwendung aktiv wo mit dem Scanner gearbeitet wird. Im Hintergrund möchte ich dann aber den Scan mitlesen.
-
Hat das Programm zum Scanner vielleicht ein Interface welches du ansprechen könntest oder wird der Scanner als HID-Gerät erkannt?
-
Es handelt sich bei dem Programm um eine Terminalanwendung die in Putty läuft.
-
Hat keiner noch eine Idee wie ich das Vorhaben umsetzen kann?
-
Hallo Scritch
der Scanner ist an dem Computer angeschlossen, an dem du das Skript von Oscar ausgeführt hast und du kannst keinen Text auslesen? Mir schien damit dein Problem gelöst.