Ich hab das ganze mal etwas uebersichtlicher umstrukturiert. Jetzt musst du eigentlich nur noch die _processInput und _exitWithNumber aendern.
#include <WinAPISys.au3>
#include <WinAPIConstants.au3>
#include <WindowsConstants.au3>
OnAutoItExitRegister('_OnExit') ; Freigeben der Ressourcen bei Skriptende
Global $mHookData[]
$mHookData["keyProc"] = Null
$mHookData["hook"] = 0
_InitKeyHook()
Local $iTimer = TimerInit(), $iTimeOutSec=5
While Sleep(10)
If TimerDiff($iTimer)>$iTimeOutSec*1000 Then Exit 999 ; Timeout wenn kein NFC-Tag gelesen wird
WEnd
Func _OnExit()
_WinAPI_UnhookWindowsHookEx($mHookData.hook)
DllCallbackFree($mHookData.keyProc)
EndFunc ;==>_OnExit
Func _processInput($sInput)
; $sInput = "1D70536A031080"
; $sInput = "36046403873762845"
; ConsoleWrite("INPUT: "&$sInput&@crlf)
If StringLen($sInput) = 17 Then ; ??? is a normal integer number => Example: 36046403873762845
_exitWithNumber(Number($sInput))
ElseIf StringLen($sInput) = 14 Then ; ??? is a hex number => Example: 1D70536A031080
_exitWithNumber(Number("0x"&$sInput))
EndIf
Exit 815 ; Was not a valid input
EndFunc
Func _exitWithNumber($iNumber)
; ConsoleWrite("exit with "&$iNumber&@crlf)
$iNumber = Mod($iNumber, 1000000) ; Make sure to return only the last 6 numbers
ConsoleWrite($iNumber&@crlf)
Exit ($iNumber) ; ??? return value
EndFunc
Func _KeyProc($nCode, $wParam, $lParam)
Local static $sInput = ""
$sPattern = @CRLF
Local $tKEYHOOKS, $sChar
$tKEYHOOKS = DllStructCreate($tagKBDLLHOOKSTRUCT, $lParam)
If $nCode < 0 Then Return _WinAPI_CallNextHookEx($mHookData.hook, $nCode, $wParam, $lParam)
If $wParam = $WM_KEYDOWN Then
Local $iAscii = _WinAPI_MapVirtualKey($tKEYHOOKS.vkCode, $MAPVK_VK_TO_CHAR)
Local $sChar = Chr($iAscii)
If $iAscii = 13 Then ; Enter pressed
_processInput($sInput)
$sInput = ""
Else
$sInput &= $sChar
EndIf
Return -1 ; Eingabe wird nicht an das System weitergeleitet
EndIf
Return _WinAPI_CallNextHookEx($mHookData.hook, $nCode, $wParam, $lParam)
EndFunc ;==>_KeyProc
Func _InitKeyHook()
If $mHookData.keyProc = Null Then
$mHookData.keyProc = DllCallbackRegister('_KeyProc', 'long', 'int;wparam;lparam')
Local $hmod = _WinAPI_GetModuleHandle(0)
$mHookData.hook = _WinAPI_SetWindowsHookEx($WH_KEYBOARD_LL, DllCallbackGetPtr($mHookData.keyProc), $hmod)
EndIf
EndFunc ;==>_InitKeyHook
Alles anzeigen
Ich bin mir nur komplett unsicher, wann du was bei den Zahlen abschneiden willst...
Bei der Dezimalzahl wolltest du die letzten 6 Zahlen... Bei der Hexadezimalen schreibweise auf einmal die ersten 8??? Das macht keinen Sinn. Ich hab die Umwandlung von Hexadezimal zu Dezimal implementiert, was genau damit passieren soll musst du wissen^^
Wenn du selbst experimentieren willst kannst du die ConsoleWrite Zeilen in den Funktionen auskommentieren, dann solltest du jedesmal sehen, was genau eingelesen wird und was daraus gemacht wird.
Du solltest auch echt ueberdenken, die Zahl mit dem ExitCode zurueck zu geben... der ist eigentlich nur dafuer da, Fehlercodes zurueckzugeben... Fuer so etwas schreibt man normal mit ConsoleWrite in den STDOUT, der von anderen Programmen weiterverarbeitet werden kann und dadurch auch komplexere Daten zurueckgeben kann. Gleichzeitig ist das Ergebnis dann auch in der Konsole zu lesen.
Ich hoffe, das hilft dir weiter.
LG, Kanashius