Guten Morgen Racer,
das hast du in der Tat richtig verstanden. Allerdings sind die Rechner im Regelfall bereits aufgesetzt und sollen in die Wiederverwertung verabschiedet werden...
mfG
hipfzwirgel
Beiträge von hipfzwirgel
-
-
Hallo Racer,
vielen lieben dank für deinen Denkanstoß
sollte es zum Auftrag kommen muss ich eine TPMClear-Routine in ein bestehendes Programm implementieren. Da der TPM-Clear erst nach erfolgtem Reboot durchgeführt wird, soll/muss ich den Reboot protokollieren.
Unser WinPE-Admin sagte mir, daß unser WINPE die Start und Endezeit loggt(quasi wie im MS-Eventviewer). Also dachte ich mir wenn ein User den Button TPM-Clear klickt,
veranlasse ich via WMI den TPMClear und reboote den Rechner direkt in den verwendeten WIN-PE-USB-Stick um die 2. Startzeit zu protokollieren. bcdedit ist zwar keine schlechte Idee,
jedoch wird das in Verbindung mit dem genannten Stick nicht gehen, da das WINPE dort nicht veränderbar ist. Ich denke da muss ich die Bootreihenfolge im BIOs entsprechend setzen... -
Hallo Schnuffel,
vielen lieben Dank für den Denkanstoß. Da hast du mich auf eine Idee gebracht:
zuerst per WMI oder Herstellertool die Bootreihenfolge ändern, dann TPM-Clear ausführen mit Neustart.
Muss ich mir dann anschauen, sollte es zum Auftrag kommen.
sollte jemand noch eine weitere Idee haben, immer her damit... -
Hallole Gemeinde,
ist es möglich per Autoit-Script einen Rechner in ein vorgegebenes Bootmedium zu rebooten?
Ich soll ein Script erstellen, welches auf einem USB-Stick mit WINPE gestartet wird. Die zu erledigende Aufgabe(TPMClear) erfordert zwingend einen Reboot. Um den Reboot
protokollieren zu können wäre es eben gut, wenn ich den Reboot so steuern kann, das der Rechner auf jeden Fall wieder über den USB-Stick bootet... -
Hallo Bugfix,
$g_hStub_KeyProc = 0 in der Funktion "EvaluateKey" hatte ich geschrieben im verzweifelten Versuch das Einlesen zu beenden,
damit wie gesagt ich später die HW-Parameter scannen kann und ich auch die Ausweisnummer als ganzen String in der Variable $sAusweisnr drin habe.
Ich würde gerne dein Angebot wahrnehmen und dir das gesamte Script per PN zur Verfügung stellen. Ich glaube langsam da sind so manche Böcke drin.... -
Hallo Bugfix,
ich stimme mit dir überein, dass das Callback-Konstrukt unglücklich gelöst zu sein scheint. Mit dem Konstrukt habe ich 2 Probleme:
1. wie oben schon beschrieben bleiben die eingelesenen Werte i-wo im Speicher, denn wenn die Kallback() erneut aufgerufen wird, wird nicht eingelesen, sondern sofort eine
Verarbeitung gestartet, d.h. es wird die bereits eingelesene Ausweisnummer geprüft und das Programm macht entsprechend weiter...
2. Wenn ich das Callback-Konstrukt nicht beende, würde es beim späteren Einscannen der Hardware-Parameter immer noch aktiv sein und den Ablauf kolossal stören.
Daher hatte ich die Kallback() geschrieben in der Hoffnung ich könne das Einlesen bei Bedarf neu starten... -
Hallo Bugfix,
wünsche ein gesundes und gutes neues Jahr und danke für deine Idee. Sie entspricht so ziemlich dem was water vorgeschlagen hatte
Nur wie eben schon geschrieben spuckt mir da die Callback in die Suppe... -
Hallo water,
vielen lieben Dank für den Denkanstoß. Ich habe deinen Tipp umgesetzt. Mein Proggi entspricht ja dem von dir skizzierten Basiskonstrukt.
Gemäß deiner Ausführungen habe ich nun eine Func Neutstart() geschrieben, die alle Globalen Variablen zurücksetzt.Spoiler anzeigen
Func Neustart()
Global $sAusweisNr = ""
Global $sSerial = ""
Global $sString = ""
Global $sUserId = ""
Global $sPwd1 = ""
Global $sPwd2 = ""
Global $sName = "" ; LoGonName, z.B. ae91fe
Global $sDispName = "" ; Username, z.B. Mustermann, Horschd wird erst in Ausweischeck() oder AD-Login() befüllt
Global $start_char = 0
Global $end_char = 47
Global $sStartAd = 1
Global $iRetValue = 0
Global $sDatabaseName = @ScriptDir & "\TestHW.accdb"
Global $sKundenNr = ""
Global $sRechnername = ""
Global $iReturn = 0
Global $g_sBuffer = Null
Global $g_hStub_KeyProc = Null
Global $hmod = Null
Global $g_hHook = Null
Global $iLength = Nul
GUICtrlSetData($sDisplayname, "Please lay your Company-ID-Card on the Reader....")
GUICtrlSetFont($sDisplayname, 16, 600, 0, "Bosch Office Sans")
GUICtrlSetData($idCode, "")
EndFunc ;==>Neustart
Kommt es im Programm zum Abbruch oder Fehler so wird zunächst diese Func aufgerufen und dann kommt der Return.Spoiler anzeigen
$sUserId = InputBox("Login", "AD-Loginname" & @CRLF & @CRLF & "e.g. de\xy123z", " ", " M")
If @error = 1 Then ; Wenn user den Abbrechen Button drueckt...
Neustart()
Return
EndIf
Das würde glaube ich auch funktionieren aber da kommt dann wieder ein Problem zum Tragen, das ich schon einmal zum Thema gemacht hatte:
Die Callback-Funktion "speichert oder puffert" irgendwie und -wo die eingelesenen Werte und ich bekomme diese Werte nicht gelöscht. Denn wenn der Return erfolgt,
wird in der While-Schleife der GUI die Callback aufgerufen, damit ich wieder einlesen kann. Allerdings sind wie gesagt die vorher eingelesenen Werte noch existent und es wird damit sofort eine Verarbeitung initiiert...Hier mal das Callback-Konstrukt:
Code
Alles anzeigenFunc 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 ; 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 $tKEYHOOKS $tKEYHOOKS = DllStructCreate($tagKBDLLHOOKSTRUCT, $lParam) If $nCode < 0 Then Return _WinAPI_CallNextHookEx($g_hHook, $nCode, $wParam, $lParam) EndIf If $wParam = $WM_KEYDOWN Then EvaluateKey(DllStructGetData($tKEYHOOKS, "vkCode")) EndIf Return _WinAPI_CallNextHookEx($g_hHook, $nCode, $wParam, $lParam) EndFunc ;==>_KeyProc 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 ; $sStartAd wird im Aufruf OnAutoItExit() auf Null gesetzt $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) Neustart() Return EndIf EndIf EndIf EndSwitch Else If (($iKeycode > 64) And ($iKeycode < 91)) _ ; a - z Or (($iKeycode > 96) And ($iKeycode < 123)) Then ; A - Z MsgBox(4112, "Keycode-Error!!!", " Only digits are allowed! Scan ID-Card again..." & @CRLF & @CRLF & @TAB & "Don't use Keyboard or anything else!", 5) Neustart() Return EndIf EndIf EndFunc ;==>EvaluateKey
Bei einem Neustart des Proggis ist der Puffer aber weg. Darum auch die Intention mit dem Neuanfang des Proggis....
-
Hallo Velted und MojoeB,
ich bedanke mich bei euch für eure Ideen, befürchte aber ihr denkt viel zu kompliziert. Der Sachverhalt stellt sich so dar:
Das Tool soll ein Buchungssystem werden um Hardwareausgaben und -Rückgaben zu buchen. Es soll auf einem Kiosk-PC laufen(immer an).
Wenn nun ein User eine Buchung startet und es irgendeinen Fehler/Abbruch gibt oder die Buchung erfolgreich durchgelaufen ist, muss das Programm quasi neu gestartet werden, damit
die Leseroutine wieder aktiv wird um eine neue Buchung machen zu können. Welcher Fehler oder welcher Abbruch ist dabei unrelevant.
Ob nun das Event ein fehlender User in der Db ist, ein manueller Abbruch durch den User, ein deaktiviertes AD-Konto oder die erfolgreiche Buchung ist, spielt keine Rolle.
Es geht hier nicht um das Abfangen von Fehlern sondern nur darum das Programm wieder auf Anfang zu setzen! -
Hallo Leute,
ich bin jetzt mal soweit, dass ich den Hauptcode in eine Funktion Verarbeitung() ausgelagert habe.
1. Erfolg: Der AbruchButton innerhalb des Switches (Case $Button2) für die Gui, funktioniert und "startet" das Proggi neu,
indem die Func Verarbeitung() neu aufgerufen wird.Code
Alles anzeigenFunc Verarbeitung() #Region ### START Koda GUI section ### ; Control Größenangaben immer: Left*, Top*, Breite, Höhe *ausgehend von linker oberer Ecke des Fensters Global $hGui = GUICreate("Labor Hardware Inventory Management System", $sWidth, $sHeigth, "", "", $WS_Caption + $WS_SYSMENU + $WS_MAXIMIZE) GUISetBkColor(0xFFFFFF) Global $idCode = GUICtrlCreateEdit("LaberBLa", 1100, 344, 700, 250) ; Edit zum Scannen der HW GUICtrlSetData(-1, "") GUICtrlSetFont(-1, 20, 800, 0, "Bosch Office Sans") GUICtrlSetState(-1, $GUI_DISABLE) Global $sDisplayname = GUICtrlCreateEdit("SysInfo", 88, 288, 550, 75, $ES_readonly) ; Edit zum Antzeigen von Programm-Informationen GUICtrlSetData(-1, "Please lay your Company-ID-Card on the Reader....") GUICtrlSetFont(-1, 16, 600, 0, "Bosch Office Sans") Global $Button1 = GUICtrlCreateButton("Booking", 600, 900, 377, 89) ; Button Buchung GUICtrlSetFont(-1, 36, 800, 0, "Bosch Office Sans") GUICtrlSetColor(-1, 0x000080) Global $Button2 = GUICtrlCreateButton("Cancel", 1650, 900, 200, 59) ; Button Abbruch GUICtrlSetFont(-1, 24, 800, 0, "Bosch Office Sans") GUICtrlSetColor(-1, 0x000080) $Pic1 = GUICtrlCreatePic(@AppDataDir & "\HaSc\Images\Logo_Firma_neu.jpg", 1192, 48, 669, 164) ; 669, 164 GUICtrlSetResizing(-1, $GUI_DOCKAUTO) $Pic2 = GUICtrlCreatePic(@AppDataDir & "\HaSc\Images\Band.jpg", 0, 0, $sWidth, 10) ; 1913, 25 GUICtrlSetResizing(-1, $GUI_DOCKAUTO) $Label1 = GUICtrlCreateLabel("Hardware Inventory Management System", 24, 64, 915, 57) GUICtrlSetFont(-1, 36, 800, 4, "Bosch Office Sans") GUICtrlSetColor(-1, 0x000080) Global $Label2 = GUICtrlCreateLabel("", 1104, 304, 695, 30) GUICtrlSetFont(-1, 20, 800, 0, "Bosch Office Sans") GUICtrlSetColor(-1, 0x000080) GUICtrlSetState(-1, $GUI_Hide) GUISetState(@SW_SHOW) Kallback() #EndRegion ### END Koda GUI section ### While 1 $nMsg1 = GUIGetMsg() Switch $nMsg1 Case $GUI_EVENT_CLOSE Exit Case $Button1 #Region ### Feststellung Serialnumber GUICtrlSetState($Label2, $GUI_Hide) $sString = GUICtrlRead($idCode) $aString = StringSplit($sString, @CRLF, 1) $sRechnername = $aString[1] $saVar = _ArraySearch($aString, "S/N", 0, 0, 0, 1, 0, 0) $sSerial = StringMid($aString[$saVar], 6) #EndRegion ### Feststellung Serialnumber Buchung($sSerial, $sDispName) Case $Button2 GUISetState(@SW_DISABLE, $hGui) MsgBox(4112, "Canceled by User - Alert", "Programm is canceled by useraction") ;GUIDelete($hGui) Verarbeitung() EndSwitch WEnd EndFunc ;==>Verarbeitung
Hat jemand eine Idee warum der Codeschnipsel vom Case $Button2 in anderen Funktionen nicht das gleiche Ergebnis liefert?Wenn ich z.B. in der AD-Login Func den Codeschnipsel als Abbruch-code für den Cancelbutton einer InputBox ausführe,
wird zwar das Fenster neu geladen, dieses bleibt aber weiss (leer)Spoiler anzeigen
$sUserId = InputBox("Login", "AD-Loginname" & @CRLF & @CRLF & "e.g. de\xy123z", " ", " M")
If @error = 1 Then ; Wenn user den Abbrechen Button drueckt...
GUISetState(@SW_DISABLE, $hGui)
MsgBox(4112, "Canceled by User - Alert", "Programm is canceled by useraction")
Verarbeitung()
EndIf
Nachtrag: in der Titelleiste des Fesnters erscheint "keine Rückmeldung" und der Cursor mutiert zur Sanduhr... -
Hallo misterspeed,
danke für den Tipp im Namen aller Interessierten. Das war nach Rücksprache mit unserem MS-Ansprechpartner und verantwortlichem Admin
auch mein Sachstand. Jetzt hoffe ich, dass MS das auch für lokale Zugriffe(bei mir die Kopierfunction per Scripting.FileSystemObject ) gefixt bekommt... -
Hallo Alle,
zunächst ein gutes und vor allem ein gesundes neues Jahr euch allen.
@ VE: So einfach geht das leider nicht, da das Einlesen des "nächsten" Betriebsausweises so nicht erneut startet...
@ Water und Moombas:
zunächst Danke für die Idee. Ich bin mir nur nicht im Klaren was in die vorgeschlagene While rein muss, bzw. wie ich diese in die Programmstruktur integrieren soll?
Der Aufbau ist zur Zeit folgender:
1. AutoitWrapperangaben2. Includes
3. Fileinstall und Definition Globaler Variablen
4. Definition des GUI
5. Aufruf der Funktion Kallback() i.V. mit Funktion _KeyProc und EvaluateKey (siehe Hilfe zu _WinAPI_SetWindowsHookEx) zum Auslesen des Betriebsausweises6. WhileSchleife zur Steuerung des GUI
7. Die Func EvaluateKey ruft nach Feststellung der Ausweisnummer die Func AusweisNrCheck auf um festzustellen ob die Nummer valide ist, der User bereits in der Db drinsteht
und ob das AD-Objekt des Users überhaupt aktiv ist (wenn nicht wird die Func AD-Login aufgerufen -> User authentifiziert sich und bei Erfolg werden die Userdaten mit der Func InDBSchreiben() in die DB geschrieben).
8. Wenn die User-Authentifizierung erfolgreich war, kann der User dann nach Scannen des HW-QR-Codes per Buttonklick( in GUI-Whileschleife -> Aufruf der Func Buchung) die Buchung vornehmen.CodeStruktur zur Übersicht:
C
Alles anzeigen#RequireAdmin #Region ;**** Directives created by AutoIt3Wrapper_GUI **** . . . #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI **** #include <AD.au3> . . . #include <WindowsConstants.au3> Global $oErrorHandler = ObjEvent("AutoIt.Error", "_ErrFunc") ; Zur Anzeige von Autoit-Systemfehlern OnAutoItExitRegister('OnAutoItExit') ; Wichtig für die DLLCALlBAckregister func DirCreate(@AppDataDir & "\HaSc\Images") Sleep(500) FileInstall("E:\Arbeit\Batchdateien\Scripte\Images\Band.jpg", @AppDataDir & "\HaSc\Images\Band.jpg") . . Global $sAusweisNr . . . Global $sRechnername #Region ### START Koda GUI section ### ; Control Größenangaben immer: Left*, Top*, Breite, Höhe *ausgehend von linker oberer Ecke des Fensters Global $hGui = GUICreate("Hardware Inventory Management System", $sWidth, $sHeigth, "", "", $WS_Caption + $WS_SYSMENU + $WS_MAXIMIZE) GUISetBkColor(0xFFFFFF) . . . GUISetState(@SW_SHOW) Kallback() #EndRegion ### END Koda GUI section ### While 1 $nMsg1 = GUIGetMsg() Switch $nMsg1 Case $GUI_EVENT_CLOSE OnAutoItExit() Exit Case $Button1 #Region ### Feststellung Serialnumber GUICtrlSetState($Label2, $GUI_Hide) $sString = GUICtrlRead($idCode) $aString = StringSplit($sString, @CRLF, 1) $sRechnername = $aString[1] $saVar = _ArraySearch($aString, "S/N", 0, 0, 0, 1, 0, 0) $sSerial = StringMid($aString[$saVar], 6) #EndRegion ### Feststellung Serialnumber Buchung($sSerial, $sDispName) EndSwitch WEnd Func Kallback() . . . EndFunc ;==>Kallback Func _KeyProc($nCode, $wParam, $lParam) . . . EndFunc ;==>_KeyProc Func EvaluateKey($iKeycode) . . . EndFunc ;==>EvaluateKey Func ADLogin() . . . EndFunc ;==>ADLogin Func AusweisNrCheck($sAusweisNr) . . . EndFunc ;==>AusweisNrCheck Func _InDbEmpfSchreiben($sVorname, $sNachname, $sAusweisNr, $sUserId, $sFQDN, $sDispName) . . . EndFunc ;==>_InDbEmpfSchreiben Func Buchung($sSerial, $sDispName) . . . EndFunc ;==>Buchung Func OnAutoItExit() . . . EndFunc ;==>OnAutoItExit Func _ErrFunc($oError) . . . EndFunc ;==>_ErrFunc
-
Hallo Gemeinde,
gibt es eine (einfache) Möglichkeit zum Anfangsstatus eines Programms zurückzukehren, ohne es sich selbst neu starten zu lassen?
Hintergrund: Ich programmiere immer noch mein Hardwarebuchungssystem. Dieses soll auf einem "Kiosk-System" immer laufen.
D.h. ein MA geht ins Labor, schnappt sich ein Testdevice, Scannt seinen Ausweis und das Gerät und bucht es als ausgeliehen und geht. Der nächste user kommt und bucht usw.
Das bedingt aber, dass nach einem Buchungsvorgang oder nach einem Buchungsfehler(z.B. S/N existiert nicht in der DB) das Programm wieder in seinen Anfangszustand "zurückkehrt",
damit ein neuer Buchungsvorgang vorgenommen werden kann... -
Hallo water,
ich hoffe du hattest ein schönes Weihnachtsfest und einen guten Rutsch. Jedenfalls wünsche ich euch allen ein vor allem gesundes neues JahrAlso der hier angesprochene Fehler kommt von einem Microsoft-Office-Update. Dieses verhindert den im VBA-Modul gezeigten "Kopiervorgang."
Der dazugehörige Fix hat zwar bei der Produktiv-Db geholfen, nicht jedoch bei der von mir genutzten Kopie der Db. Anfrage bei MS läuft noch... -
Hallo Gemeinde,
ich öffne und schließe den MS-Access-Zugriff mit nachfolgendem Code:Code
Alles anzeigen$oConnection = ObjCreate("ADODB.Connection") $oConnection.Open("Driver=Microsoft Access Driver (*.mdb, *.accdb); DBQ=" & $sDatabaseName & "; Exclusive = 1") $oRecordSet = ObjCreate("ADODB.RecordSet") $sQuery = "Select Ausdr1 From " & $sTableName & " WHERE Ausweisnummer = " & "'" & $sSearch & "'" $oRecordSet.Open($sQuery, $oConnection) $aRecordSetArr = $oRecordSet.GetRows $sDispName = $aRecordSetArr[0][0] ; hier wird dann je nach Query eine Tabelle ausgelesen oder in eine Abfrage geschrieben oder der Query ausgewertet etc. ; hier im Beispiel wird der der Ausweisnummer zugeordnete Benutzername ausgelesen... $oRecordSet.Close() $oRecordSet = 0 $oConnection.Close() $oConnection = 0
Der Zugriff funktioniert soweit bestens. Meine Frage: Schließe ich die den Zugriff richtig so oder fehlt etwas?
Ich kann nämlich im Explorer beobachten, daß beim Zugriff via Proggi auf die Db, im Explorer eine *.laccdb-Datei angelegt wird, diese aber nicht mehr gelöscht wird.
Ich habe die Db für exclusiven Zugriff eingerichtet und wenn ich sie per Doppelklick manuell starte wird die laccdb-datei nicht angelegt.
Wenn ich es richtig verstanden habe bedeutet die laccdb-Datei, dass die Db als gesperrt markiert ist.
Da alles soweit funktioniert fiel mir das erst gar nicht auf und in der laccdb steht ja auch nichts drin.Erst als bei manuellem Öffnen, die Erstellung einer Sicherheitskopie(VBA-Modul in der Db) mit Laufzeitfehler 70 fehlschlug
ist mir klar geworden, dass die DB wohl i-wie gesperrt bleibt...
VBA-MODUL
Dim Quelldatei As String, Zieldatei As String, oFSO As Variant
Zieldatei = "E:\...TestHWSic" & Format(Now, "YYMMDD_HHMM") & ".sic"
Quelldatei = "E:\...\TestHW.accdb"
'Set oFSO = CreateObject("Scripting.FileSystemObject")
'oFSO.copyFile Quelldatei, Zieldatei, True
'objShell.PopUp "Es wurde eine Sicherheitskopie unter " & Zieldatei & " erstellt", 3, "Info"
'Set objShell = Nothing
### im Moment habe ich das Anlegen der Kopie auskommentiert ### -
Hallo Water,
mittlerweile habe ich das Proggi soweit, das der Errorrhandler funzt. der Fehler allerdings kommt nicht mehr.
Ich vermute ich hatte zuviel der Close-Sequenzen drin... -
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... -
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)? -
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 durchSpoiler 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 Bugfix,
vielen lieben dank für den Tipp. Da war ich ja gar nicht so weit entfernt bei meinen Recherchen. Allerdings sah/sieht das bei mir gleich aus. Weiß der Geier
warum immer die DB-Treiber angemeckert wurden. Seit heute, nachdem ich den Post released hatte, geht der Aufruf des Proggis ganz normal über F5.
Alles sehr miraculös