So, Ich habe jetzt heraus gefunden, das der Fehler am Befehl _Arraysearch liegen muss.
Wenn ich mit der MsgBox den Array-index 38 ausgebe, steht in der Msgbox die gesuchte Zeile.
@error gibt 6 aus, was bedeutet das Arraysearch den Such-Begriff nicht findet. Aber Warum???
Nachtrag: Arraysearch findet die ganze Zeile <Active: True - CurrentSetting: PasswordCountExceededError,Enable>
bleibt die Frage warum er nicht die Teilsuche <PasswordCountExceededError> druchführt, bzw. findet...
Beiträge von hipfzwirgel
-
-
Hallo Gemeinde,
Könnte mir jemand auf die Sprünge helfen warum die Msgbox "Ausgabe ArrayIndex" nicht angezeigt wird? Das Array wird erzeugt und kann mit dem Arraydisplay auch angezeigt werden...
Sollte der Befehl arraySearch auf Fehler laufen, so sollte die MsgBox doch trotzdem angezeigt werden oder?C
Alles anzeigen#include <MsgBoxConstants.au3> #include <StringConstants.au3> #include <WinAPI.au3> #include <WindowsConstants.au3> #include <WinAPIFiles.au3> #include <AutoItConstants.au3> #include "Array.au3" ; Erstellt von AutoIt Scriptomatic $wbemFlagReturnImmediately = 0x10 $wbemFlagForwardOnly = 0x20 $colItems = "" $strComputer = "localhost" Global $aArray[1] $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\WMI") $colItems = $objWMIService.ExecQuery("SELECT * FROM Lenovo_BiosSetting", "WQL", _ $wbemFlagReturnImmediately + $wbemFlagForwardOnly) If IsObj($colItems) Then For $objItem In $colItems ReDim $aArray[UBound($aArray) + 1] $aArray[UBound($aArray) - 1] = "Active: " & $objItem.Active & " - CurrentSetting: " & $objItem.CurrentSetting ; If MsgBox(1, "WMI-Ausgabe", $Output) = 2 Then ExitLoop ; $Output = "" Next ;_ArrayDisplay($aArray) Else MsgBox(0, "WMI-Ausgabe", "Keine WMI-Objekte gefunden für Klasse: " & "Lenovo_BiosSetting") EndIf $sIndex = _ArraySearch($aArray, "PasswordCountExeededError", 0, 0, 0, 1) ; Zahl 1 = Teilsuche MsgBox(0, "Ausgabe ArrayIndex", $aArray[$sIndex])
Das Array sieht so aus
Row|Col 0
[0]|
[1]|Active: True - CurrentSetting: WakeOnLAN,ACOnly
[2]|Active: True - CurrentSetting: WakeOnLANDock,Enable
[3]|Active: True - CurrentSetting: EthernetLANOptionROM,Enable
[4]|Active: True - CurrentSetting: IPv4NetworkStack,Enable
die gesuchte Zeile ist diese:
[38]|Active: True - CurrentSetting: PasswordCountExceededError,Enable -
Guten Morgen AspirinJunkie und Musashi,
da ich gestern eine schnelle Lösung brauchte habe ich kurzerhand die StringReplace-Methode genutzt. Hat super funktioniert. Insofern kann ich das Thema als erledigt betrachten.
Ich werde mir aber die beiden anderen Lösungen noch anschauen und ggf. eine Antwort posten.
Vielen lieben Dank an euch beide. -
Hallo an Alle,
ich hoffe es ist nur ein kleines Problem:
Ich benutze mein Programm mal vom Netzlaufwerk, mal vom Stick, mal von der Festplatte...
die Variable $Logfile sieht so aus: $Logfile = @Scriptdir & "\HW-Summary\" & $sDateiname & $sGraka & ".PNG"
Das Problem: Wenn ich das Proggi vom USB-Stick ausführe ist es im root-Verzeichnis und @Scriptdir packt einen abschließenden Back-Slash hinzu. Wie kann ich das umgehen, bzw. vermeiden.
Nachfolgende Öffnungs.- und Kopierversuche schlagen nämlich fehl wg des 2. Backslash... -
Hallo Oscar und hallo Alpines,
vielen lieben dank für eure Antworten. Ich habe es jetzt folgendermaßen gelöst:
Ich zeige wie von Alpines angeregt die Gui(Splashscreen mit der GifAnimation.au3) am Programmanfang mit Guisetstate(@SW_show...) an und wenn die eigentliche GUI gestartet wird, verstecke ich sie mit @SW_Hide. Die Endlosschleife habe ich natürlich weggelassen, sonst würde der "Splashscreen" ja ewig angezeigt werden. Nach meinen Tests funktioniert das so wie gewünscht. Somit wäre das Thema für mich zunächst erledigt.
@ Oscar: deine Variante konnte ich leider nicht benutzen, da mir die ganzen WinApi...au3 Includes fehlen, trotzdem vielen lieben Dank für die Anregungen... -
Hallo Alpines,
danke für deinen Hinweis, ich bin war schon dabei und hatte mir eine Form mittels der Gifanimation.au3 erstellt. Wenn ich die Form
in einem Script selbst starte funzt sie super.C
Alles anzeigen#AutoIt3Wrapper_Au3Check_Parameters=-w 1 -w 2 -w 3 -w 4 -w 5 -w 6 ;.......script written by trancexx (trancexx at yahoo dot com) #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #include <GIFAnimation.au3> #include <StaticConstants.au3> Opt("MustDeclareVars", 1) ;Global $hGui = GUICreate("GIF Animations", 670, 520, -1, -1, ) #Region ### START Koda GUI section ### Global $hGui = GUICreate("BBC V00.0.1", 807, 411, 180, 122, 0) GUISetFont(8, 800, 0, "Arial") GUISetBkColor(0xFFFFFF) Global $SPPic1 = GUICtrlCreatePic(@Scriptdir & "\hlf\Grafiken\Testgrafik1", 571, 24, 229, 55) ; Die Grafiken Test 1 und 2 sind nur zu Dekoration der Form Global $SPPic2 = GUICtrlCreatePic(@Scriptdir & "\hlf\Grafiken\Testgrafik2", 0, 0, 804, 11) Global $SPLabel1 = GUICtrlCreateLabel("BIOS-CONFIGURATOR", 24, 24, 413, 39) GUICtrlSetFont(-1, 20, 800, 0, "Arial") GUICtrlSetColor(-1, 0x000080) Global $SPLabel2 = GUICtrlCreateLabel("This Applikcation is to view the status, change and erase the BIOS-LOCK", 24, 64, 406, 18) GUICtrlSetColor(-1, 0x000080) Global $SPPlease = GUICtrlCreateLabel("Please be patient until preparations are done ...", 52, 320, 700, 41) GUICtrlSetFont(-1, 22, 800, 0, "Arial") GUICtrlSetColor(-1, 0x000080) GUISetState(@SW_SHOW) #EndRegion ### END Koda GUI section ### ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX Global $sFile9 = @Scriptdir & "\hlf\Grafiken\loading.gif" Global $hGIF = _GUICtrlCreateGIF($sFile9, "", 346, 172) GUICtrlSetTip($hGIF, "Loading...") ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX GUIRegisterMsg(15, "_ValidateGIFs"); WM_PAINT GUISetState() Global $aSize, $aDimension While 1 Switch GUIGetMsg() Case -3 Exit EndSwitch WEnd Func _ValidateGIFs($hWnd, $iMsg, $wParam, $lParam) #forceref $hWnd, $iMsg, $wParam, $lParam _GIF_ValidateGIF($hGIF) EndFunc ;==>_ValidateGIFs
Wie implementiere ich die Form aber als Splashscreen, dass sie am Anfang des Proggis gestartet wird und an einer bestimmten Stelle(Start der grafischen Oberfläche in der Func Graph() ) beendet wird ?
Da ich aus rechtlichen Gründen nicht den kompletten Code meines Proggis hier veröffentlichen kann(Urheberrecht und Geheimhaltungspflichten meines Arbeitgebers)nur soviel zur Struktur hoffe das dies hilft:C
Alles anzeigen#RequireAdmin #Region ;**** Directives created by AutoIt3Wrapper_GUI **** #AutoIt3Wrapper_Icon=Grafiken\Muster.ico #AutoIt3Wrapper_Outfile_x64=bbc.exe #AutoIt3Wrapper_Res_Comment=BIOS-Configurator #AutoIt3Wrapper_Res_Description=Tool to change, check and erase the BIOS-LOCK on... #AutoIt3Wrapper_Res_Fileversion=3.0.0.6 #AutoIt3Wrapper_Res_Fileversion_AutoIncrement=y #AutoIt3Wrapper_Res_LegalCopyright=by Arbeitgeber von HaSc, latest version build in 2020 with supporting Dell-devices #AutoIt3Wrapper_Res_Field=Made By|HaSc #AutoIt3Wrapper_Run_Tidy=y #AutoIt3Wrapper_Run_Au3Stripper=y #Au3Stripper_Parameters=/MO #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI **** Sleep(500) ; Startverzögerung wg evtl. Fehlermeldungen ### Hier sollte der Splashscreen beginnen ### #include <Crypt.au3> #include <MsgBoxConstants.au3> #include <StringConstants.au3> #include <WinAPI.au3> #include <WindowsConstants.au3> #include <ButtonConstants.au3> #include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <File.au3> #include <FileConstants.au3> #include <WinAPIFiles.au3> #include <AutoItConstants.au3> #include <Array.au3> #include <WinAPIShPath.au3> #include <Date.au3> #include <Misc.Au3> #include "ExtMsgBox.au3" _WinAPI_AttachConsole() $hConsole = _WinAPI_GetStdHandle(1) _WinAPI_WriteConsole($hConsole, @CRLF & "Please be patient until preparations are done...!" & @CRLF & @CRLF) FileInstall("E:\Arbeit\Batchdateien\Scripte\Selfextracting_Archive\hlf.exe", @AppDataDir & "\hlf.exe") FileInstall("E:\Arbeit\Batchdateien\Scripte\7z.exe", @AppDataDir & "\7z.exe") FileInstall("E:\Arbeit\Batchdateien\Scripte\7z.dll", @AppDataDir & "\7z.dll") . . . Global $sVar3 = @WindowsDir Global $sVar4 = @AppDataDir & "\7z.exe" ; AppDataDir = C:\Users\Username\Appdata\Roaming Global $sWert = "..." Global $sVar1 = BinaryToString(_Crypt_DecryptData($sKey2, $sWert, $CALG_AES_256, True)) Global $sOutputbit = "" Global $sOutput = "" Global $sPwdh1 = "" Global $sPwdh2 = "" Global $sFont = "ascii,us" . . . ### verschiedene Tests zu OS und HW ### If-Verzweigung in welchen OS das Proggi ausgeführt wird um @AppDataDir zu bestimmen . . . ### Ende der Tests ### #Region ;**** Abfrage nach CommandLine-Parametern **** If $CmdLine[0] == "0" Then FileWriteLine($sFilepath, "No parameters specified!" & @CRLF & @CRLF & "Start graphical system asap..." & @CRLF & @CRLF) Sleep(300) Graph() Else Switch $CmdLine[1] Case "-b" ### Wenn mit CMD-Parameter gestartet wurde dann sollte der Splashcreen hier beendet werden ### FileWriteLine($sFilepath, $Date & ", " & $sTime & " 145 BIOS-Lock statuscheck started..." & @CRLF & @CRLF) $sContropt = "1" Statusview() Closecmd() Case "-o" . . . #EndRegion ;**** Abfrage nach CommandLine-Parametern **** Func Graph() ### Hier sollte der Splashscreen beendet werden ### #Region ### START Koda GUI section ### Global $Hauptform = GUICreate("BBC V0.0.0.2", 1100, 611, 10, 10, BitOR($GUI_SS_DEFAULT_GUI, $WS_MAXIMIZEBOX, $WS_SIZEBOX, $WS_THICKFRAME, $WS_TABSTOP, $DS_SETFOREGROUND)) GUICtrlSetResizing(-1, $GUI_DOCKAUTO) . . . #EndRegion ### END Koda GUI section ### EndFunc ;==>Graph
Wenn ich den Code der "GUi-Animation-" Form an der Anfangsmarke einfüge(ich hatte den Code in eine Funktion gepackt und diese dann mit Splashfunc() aufgerufen!) blitzt das Fenster nur kurz auf... Es sollte aber analog zur Funktion SplashImageOn, sichtbar bleiben bis die Fileinstall-dateien(deutlich mehr wie im obigen Codeschnipsel dargestellt) geladen sind(Start der Func Graph oder Ausführung der Funktionen per CMD-Parameter).
-
Hallo Gemeinde,
wenn ich mein Proggi starte, werden zunächst einige Dateien via Fileinstall "geladen". Dadurch dauert es natürlich etwas bis die grafische Oberfläche des Programms erscheint.
Mit Splashtexton oder Splashimageon könnte ich die Zeit überbrücken.
Wie kann man aber eine eigene Form mit animiertem GIF als Splashscreen einfügen? -
-
Hallo Autoit-Gemeinde,
für mein Proggi habe ich ein Hilfefenster mittels GuiCtrlCreateEdit erzeugt. Das Edit-Control habe ich mit GuiCtrlSetData befüllt. So weit so gut.
Leider ist diese Art der Darstellung eines Hilfetextes aber ziemlich aufwendig, wenn man den Text anpassen muss. Gibt es eine Möglichkeit den vorher erstellten Text z. B. aus einer Textdatei, in irgend ein Autoit-Control/Fenster mit Absätzen, Zeilenvorschüben und Tabulatoren usw. hinein zu kopieren? -
Hallo Bitnugger,
vielen lieben Dank an dich und natürlich auch an alle anderen Antowrter. Das "Prob" ist gelöst. -
Hallo Oscar,
weil das Programm sowohl als Consolen-Programm als auch als GUI-Programm funktionieren soll. Damit es sowohl in Windows 10 als auch in unserer
Windows-PE-Umgebung funktioniert...
Arbeite ich dann nicht mit _WinAPI schreibt er mir die Ausgaben in eine extra Console, mit WinAPI fehlt am Schluss der Prompt -
Hallo Bitnugger,
in Antwort 6 habe ich doch den Code für ein script eingefügt. au3-Datei anbei. Ohne den Befehlsblock öffnet sich die MsgBox gibt das Ergebnis bekannt
und wenn es geschlossen wird steht der Prompt in der Console. Mit dem Winapi-Code wird das Proggi beendet aber der Prompt bleibt weg.
Es funktionieren zwar die Proggis, sieht aber blöd aus...
Ich habe die Zeilen deiner Funktion Console_Close in meine Close-Funktion(mein OriginalProggi, nicht das Testproggi) eingefügt aber der Prompt kommt nicht. -
ich habe es mit dem folgenden Programm/Script getestet:
C
Alles anzeigen#include <AutoItConstants.au3> #include <WindowsConstants.au3> #include <Array.au3> #include <Misc.au3> #include <MsgBoxConstants.au3> #include <WinAPI.au3> _WinAPI_AttachConsole() $hConsole = _WinAPI_GetStdHandle(1) _WinAPI_WriteConsole($hConsole, @CRLF & "Please be patient until preparations are done...!" & @CRLF & @CRLF) $sName = InputBox("Eingabe Fenstername", "Bitte gib den Fenstername ein:") Local $aPos = WinGetPos($sName) _ArrayDisplay($apos, $sName)
Demnach liegt das Verhalten am _WinAPI-Code. Ohne diesen wird nach dem Ende des Proggis der Prompt angezeigt... -
Hab den Handle zusätzlich geschlossen, ändert nichts.
-
Hallo Bitnugger,
ich habe meinen Code nochmal angeschaut. Ich schließe das Proggi nach jedem Funktionsaufruf(z.B. D:\folder>programm.exe -b) per Exit.
Die Exe wird auch im Taskmanager geschlossen.Könnte es damit zu tun haben, das ich in die Console per
_WinAPI_AttachConsole()
$hConsole = _WinAPI_GetStdHandle(1)
die Ausgaben des Proggi per _WinAPI_WriteConsole in die Console schreibe?
Sollte ich den Handle per _WinAPI_CloseHandle zusätzlich schließen anstatt nur ein Exit zu machen? -
Hallo Bitnugger,
bei ca. 12.000 Zeilen Code wird das mit dem Zeigen wohl etwas schwierig aber dein Hinweis ist trotzdem sehr hilfreich,
vielen Dank dafür. -
Hallo Gemeinde,
ein hoffentlich einfaches Prob:
ich starte mein Programm im Consolen-Modus(CMD). Da steht dann im CMD-Fenster
z.B. folgende Zeile:D:\folder>
D:\folder>programm.exe
Programmausgaben
_Wenn nun das Programm fertig ist, dann blinkt da nur der Cursor(wie der Unterstrich oben). Ich hätte aber gerne analog wie bei verschiedenen Dos-Commandos, dass
da auch wieder D:\folder>_ angezeigt wird. Könnte mir jemand einen Tipp geben wie ich das bewerkstellige... -
Hallo Gemeinde,
ich glaube ich sehe den Wald vor lauter Bäumen nicht: Ich starte mein Programm mit #requireAdmin da es für einige Funktionen Admin-Rechte benötigt.
Dadurch läuft das Proggi aber auch im UserContext des Adminaccounts, der aber kein Zugriff auf die (Netz-)Laufwerke des aufrufenden Users hat.
Gibt es die Möglichkeit das Proggi trotz #requireAdmin, im Context des aufrufenden Users laufen zu lassen, damit ich die Netzlaufwerke desselben benutzen kann? -
Hallo Yjuq,
da mir im Forum bisher immer geholfen wurde, stehe ich gerne zur Verfügung. Ich muss aber fairer Weise erwähnen, das ich mich selbst als erweiterter Anfänger in Sachen Programmierung verstehe.
Nur um keine Missverständnisse aufkommen zu lassen(einfachere Programme ok aber Treiber uiuiui)... -
Hallo Bugfix,
die Test SW bei mir ist in der Tat Chipcardmaster. Bei SIM-Karten z.B. gibt es da einige Bearbeitungsmöglichkeiten. Nicht aber bei der eGK.
zumindest konnte ich außer den Druckbefehl nichts anderes finden. Ich schaue aber gerne noch einmal genauer.
Ein befreundeter Programmierer schaut gerade ob wir da über die CT-API per DLLCALL etwas machen können und ich dachte mir: frag mal nebenher im Forum nach...
Vielen lieben Dank für den Link. Den suche ich nun schon seit 2 - 3 Wochen. Da war ich schon drauf hatte damals aber noch kein Lesegerät.
Hätte ich mal gespeichert Der wird uns sicher weiterhelfen...