Ansonsten kannst du auch einfach nach Zeile 47 ein ConsoleWrite($iKeyCode&@crlf) einfügen.
Ohhh.... Das ist eine geniale idee.
Das mit den ASCI -> Char hab ich im internet gefunden für 0-9 und A-z aber Shift war da nicht dabei.
Macht ja auch sinn wenn das 0 ist.
Die Methode mit ElseIf hat funktioniert!
Tausend dank.
Ich kann eigentlich das ganze P-Touch mit ControlClicks steuern. Machts recht bequem.
AutoIt
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <WinAPI.au3>
#include <WinAPIvkeysConstants.au3>
OnAutoItExitRegister('OnAutoItExit')
Global $fileName = "[PoC_3.lbx]", $windowName = "P-touch Editor - "&$fileName
HotKeySet('{ESC}', '_exit')
Global $sStart = StringUpper("TZProduktion-")
Global $arBuffer[200], $iBufferEnd = 0, $bBufferMatch = False, $arStart = StringSplit($sStart, "", BitOR(1, 2))
Global $hKeyProc = DllCallbackRegister('_KeyProc', 'long', 'int;wparam;lparam')
Global $hmod = _WinAPI_GetModuleHandle(0)
Global $hKeyHook = _WinAPI_SetWindowsHookEx($WH_KEYBOARD_LL, DllCallbackGetPtr($hKeyProc), $hmod)
Global $iWidth = 300, $iHeigt = 200
Global $hGui = GUICreate('Barcodescanner', $iWidth, $iHeigt)
Global $idBarcode = GUICtrlCreateLabel('', 10, 10, $iWidth-20, 30)
GUISetState(@SW_SHOW) ;HIER FENSTER VERSTECKEN.
While True
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
_exit()
EndSwitch
WEnd
Func _barcodeFound($sBarcode)
ConsoleWrite("FOUND: "&$sBarcode&@crlf)
If WinExists($windowName) Then
WinActivate($windowName)
Else
MsgBox(0, "Error Kein Window", $windowName) ;ODER Programm Starten und Vorlage öffnen!
Exit ;temp.....
EndIf
ControlClick($windowName, "", 11945) ;Suchfeld öffnen
WinWait("Suchen")
ControlSetText("Suchen", "", 11171, StringTrimLeft($sBarcode, 13))
ControlClick("Suchen", "Gefundene &Datensätze auswählen", 11178) ;Suchen
Sleep(200)
If WinExists("P-touch Editor", "Alle Datensätze wurden durchsucht.") Then
;~ MsgBox(262144, "ERROR", "Existiert nicht")
ControlClick("P-touch Editor", "OK", 2)
ControlClick("Suchen", "Schließen", 2)
Beep(500, 500)
Sleep(50)
Beep(500, 500)
ToolTip("ERROR! Auftrag nicht gefunden")
Else
WinWaitActive($windowName)
ControlClick($windowName, "", 5350) ;Direct Print
EndIf
EndFunc
Func _exit() ;just to enable the ESC hotkey
Exit
EndFunc
; ACHTUNG! Callback-Funktion!
; In dieser Funktion darf es keinen blockierenden Code (z.B. MsgBox, Sleep, etc.) geben!
; Hier werden direkt die virtuellen Keycodes der Tastatur ausgewertet:
; https://docs.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes
Func _KeyProc($nCode, $wParam, $lParam)
Local $tKBDLLHOOK = DllStructCreate($tagKBDLLHOOKSTRUCT, $lParam)
Local $iKeyCode = $tKBDLLHOOK.vkCode, $iPressTime
$iKeyCode = _WinAPI_MapVirtualKey($iKeyCode, $MAPVK_VK_TO_CHAR) ; needed for different keyboard layouts (e.g. US-layout - is ASCII 189, not 45 otherwise)
If $nCode >= 0 Then
Switch $wParam
Case $WM_KEYUP
If $iKeyCode = 45 Or _ ;key -
($iKeyCode>=48 And $iKeyCode<=57) Or _ ;Numbers 0 to 9
($iKeyCode>=65 And $iKeyCode<=90) Then ; Letters A to Z
$arBuffer[$iBufferEnd] = Chr($iKeyCode)
$iBufferEnd += 1
If $iBufferEnd>UBound($arBuffer)-1 Then $iBufferEnd = 0 ; Reset if longer than buffer, may lead to scan loss
If Not $bBufferMatch Then _checkBuffer()
ElseIf $iKeyCode <> 0 Then
If $bBufferMatch Then _barcodeFound(_bufferToStr())
$bBufferMatch = False
$iBufferEnd = 0
EndIf
GUICtrlSetData($idBarcode, _bufferToStr())
; Return 1
EndSwitch
EndIf
Return _WinAPI_CallNextHookEx($hKeyHook, $nCode, $wParam, $lParam)
EndFunc ;==>_KeyProc
Func _checkBuffer()
Local $iCount = 0, $iStart = 0
While $iCount<$iBufferEnd
$iStart = $iCount
While $iStart < $iBufferEnd
If $arBuffer[$iStart] <> $arStart[$iStart-$iCount] Then
$iCount += 1
ContinueLoop 2
EndIf
If $iStart-$iCount >= UBound($arStart)-1 Then
$bBufferMatch = True
Return True
EndIf
$iStart+=1
WEnd
ExitLoop
WEnd
If $iCount<>0 Then
Local $iDiff = $iBufferEnd-$iCount
If $iDiff<=0 Then
$iBufferEnd=0
Else
For $i=0 To $iDiff Step 1
$arBuffer[$i] = $arBuffer[$iCount+$i]
Next
$iBufferEnd=$iDiff
EndIf
Return False
EndIf
Return True
EndFunc
Func _bufferToStr()
Local $sRes = ""
For $i=0 To $iBufferEnd-1 Step 1
$sRes &= $arBuffer[$i]
Next
Return $sRes
EndFunc
; Wichtig! Beim Programmende den Hook wieder entfernen.
Func OnAutoItExit()
_WinAPI_UnhookWindowsHookEx($hKeyHook)
DllCallbackFree($hKeyProc)
EndFunc ;==>OnAutoItExit
Alles anzeigen