Beiträge von hipfzwirgel
-
-
Trotzdem Danke für die Antwort Musashi.
By the Way: ist der Objectcreate-aufruf eig. richtig so? -
Hallo Alpines,
ja, ich habe den Wald vor lauter Bäumen nicht gesehen. jede Zeile muss auch mit einem ' abgeschlossen werden. -
Hallo an Alle AutoIt-Profis,
ich möchte in einem Autoit-Proggi vbs-Script implementieren(das VBS-Script soll Bios-Settings via herstellerabhängigen WMI-Klassen ändern).
Folgenden Code habe ich aus dem Forum in den Autoitcode übernommen:Code
Alles anzeigenFunc ViewStatus() Local $Vbs = ObjCreate("MSScriptControl.ScriptControl") If @error Then MsgBox(16, 'Error', 'Error creating ScriptControl') Exit EndIf Local $sCode = 'Function ViewStatus()' & _ @LF & ' On Error Resume Next & _ @LF & ' Dim colItems & _ @LF & ' If WScript.Arguments.Count <> 3 Then & _ @LF & ' WScript.Echo "SetConfigPassword.vbs [setting] [value] [password + encoding]" & _ @LF & ' WScript.Quit & _ @LF & ' End If & _ @LF & ' strRequest = WScript.Arguments(0) + "," + WScript.Arguments(1) + "," + WScript.Arguments(2) + ";" & _ @LF & ' strComputer = "LOCALHOST" ' Change as needed. & _ @LF & ' Set objWMIService = GetObject("WinMgmts:" _ & _ @LF & ' &"{ImpersonationLevel=Impersonate}!\\" & strComputer & "\root\wmi") & _ @LF & ' Set colItems = objWMIService.ExecQuery("Select * from Lenovo_SetBiosSetting") & _ @LF & ' For Each objItem in colItems & _ @LF & ' ObjItem.SetBiosSetting strRequest, strReturn & _ @LF & ' Next & _ @LF & ' WScript.Echo strRequest & _ @LF & ' WScript.Echo " SetBiosSetting: " + strReturn & _ @LF & ' WScript.Quit & _ @LF & ' End Function' & @LF $Vbs.Language = 'VBScript' $Vbs.AddCode($sCode) $sRET = $Vbs.Run('WakeOnLAN', 'Disable', 'bla,ascii,us') $aArray1 = StringSplit($sRET, ":") _ArrayDisplay($aArray1) EndFunc ;==>ViewStatus
Was ich nicht verstehe ist, dass der Originalcode(s.u.) keinen Syntaxfehler ausgibt. Bei meinen geänderten VBS-Zeilen der Variablen $sCode, jedoch jedes ' reklamiert wird
Kann mir wer den Unterschied erklären und benötige ich für die Aktion i-welche Includes?
Originalcode:
Code
Alles anzeigenGlobal $Vbs, $sCode, $sRET $sCode = 'Function LoginValues(sUserInput, sPassInput)' & _ @LF & ' Dim RetStr' & _ @LF & ' RetStr = "Login values were:" & vbCRLF' & _ @LF & ' RetStr = RetStr & "User name = " & sUserInput & vbCRLF' & _ @LF & ' RetStr = RetStr & "Password = " & sPassInput & vbCRLF' & _ @LF & ' LoginValues = RetStr' & _ @LF & 'End Function' & @LF $Vbs = ObjCreate('ScriptControl') If @error Then MsgBox(16, 'Error', 'Error creating ScriptControl') Exit EndIf $Vbs.Language = 'VBScript' $Vbs.AddCode($sCode) $sRET = $Vbs.Run('LoginValues', 'My_User_Name', 'My_Password') ConsoleWrite("$sRET = " & $sRET & @LF)
-
Hallo Musashi,
hallo Alpines,
der Code in Beitrag #1 ist der Originalcode aus dem CMD-File. Dort heißt die Varaible wie genannt. Ich habe in Autoit-Code die Variable auf $sSecretPW geändert,
Allerdings ist das 2. S tatsächlich ein großes. Ist hier nur ein Tippfehler, sorry for that. -
Hallo Alpines,
ich danke dir vielmals für deine Anregungen. Werde ich testen. Das mit Opt() war mir bisher nicht bekannt.
Ich setze den Beitrag zunächst auf erledigt... -
-
Hallo Alpines,
auch dir danke für deine Antwort. Aber die beiden " " zwischen den & sind Leerzeichen die ich übergebe. Es soll also ein GesamtString von "/set... bis verbose"" sein.Meinst du das erste & fehlt da ein " nach 4"" ?
Meine Frage nach einer Übersicht über die Escape-Möglichkeiten ist bisher nicht beantwortet. Hast du oder jemand anderes eine Idee hierzu?
-
Achja: vieleln lieben Dank für die Hilfe
-
Hallo Musashi,
hallo Bufix,
dann habe ich den Shellexecutewait wohl i-wie falsch interpretiert, ich dachte ich muss den String als einen Parameter übergeben.
Dennoch bleibt die Frage ob es für die Escaperei irgendeine Unterlage, Liste, etc. gibt?
Mein Versuch mit Shellexecute:CodeShellExecuteWait($sProggi, "/setvalue:""Password Minimum Length"",""4"" & " " & ""/cspwdfile:"" & $ssecretPW & " " & ""/verbose"", "", "", "")
beim Kompilieren zeigt er mir immer einen Syntaxfehler bei den / an.
-
Hallo und guten Morgen an alle Autoit-Profis,
ich möchte folgende CMD-Befehlszeile in Autoit-Code umsetzen
z.B. mit Shellexecutewait(bcu64.exe...). Leider scheitere ich an den /-Strichen der Parametern.
Kann mir jemand mitteilen, wie ich die Schräger escape und 2. Frage: Gibt es i-wo eine Zusammenstellung aller Escapesequenzen/-möglichkeiten in Autoit.Ich suche mir bereits den ganzen Morgen einen Wolf nach Escapesequenzen finde aber nur zehmillionen Einträge bzgl. des escapens von "
-
-
Hallo Alpines,
vielen lieben dank für deine Antwort. Demnach geht es wohl grundsätzlich. Aber verstehe ich das richtig, dass dann beides gleichzeitig geöffnet wird?Also die grafische Oberfläche UND eine Konsolenversion?
ich dachte an so etwas wie Doppelclick auf die Exe -> Start mit grafischer Oberfläche -> Klick auf Button "Copy" -> ein Kopiervorgang wird durchgeführt.
In der CMD-Konsole die Exe-Datei mit Startparameter aufführen(z.B. bla.exe -c) und bei Taste Enter wird der o.g.
Kopiervorgang des Programms ebenfalls ausgeführt ohne sichtbare Oberfläche.# Copy ist hier nur ein Beispiel zur Verdeutlichung! #
-
Hallo an alle Autoit-Spezialisten,
folgender Sachverhalt:Ich möchte ein Autoit-Programm erstellen. Der Wunsch: die spätere EXE-Datei soll sowohl mit grafischer Oberfläche, als auch direkt auf der CMD-Konsole(Eingabeaufforderung mit Startparametern) gestartet werden können.
1. Frage: Geht so etwas überhaupt oder brauche ich hierfür zwei Exe-Files.
2. Frage: Kann mir jemand erklären oder besser, hat wer ein Scriptbeispiel wie ich eine Exe-Datei mit Startparametern erstelle? -
Hallo Musashi,
vielen lieben allerherzlichsten Dank für die Hilfe/deine Anregung. Nun geht das mit dem automatischem Schließen des Fensters, wenn nichts gedrückt wurde.
Den Select kannte ich bisher bei Autoit noch nicht. Das hat mich zunächst etwas verwirrt. Man lernt eben immer dazu. -
Hallo Bitnugger,
danke für den Tipp aber wie du vielleicht übersehen hast nutze ich den Befehl bereits wenn ich auf den Button OK klicke(siehe Zeile 45-47 im Code).
In Musashis Tipp wird das Fenster durch den Timer aber außerhalb der Schleife geschlossen durch die Func Quit.
Hier geht Exitloop ja nicht, sodass zwar das Fenster geschlossen werden kann(mit Guidelete) aber die Schleife läuft
ja dann weiter und stoppt die Ausführung des Proggis dadurch...
Code
Alles anzeigenElse $Form1_1 = GUICreate("Meldung", 366, 167, -1, -1, -1, BitOR($WS_EX_TOPMOST,$WS_EX_WINDOWEDGE)) GUICtrlCreateLabel("", 40, 24, 4, 4) $Heute = GUICtrlCreateLabel("Heute ist nicht Freitag." & @CRLF & @CRLF & "Also KEINE Datensicherung!!!", 2, 30, 361, 60, $SS_CENTER) GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif") $doch = GUICtrlCreateButton("Aber hallo DOCH!", 18, 125, 121, 25) GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif") $OK = GUICtrlCreateButton("OK", 272, 125, 65, 25) GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif") GUISetState(@SW_SHOW) _Timer_SetTimer($Form1_1, 10000, "Quit") While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $doch MsgBox(0, "Warnung!!!", "Bitte alle Programme und oder geöffneten Dateien schließen!!!") $sStatus = Run(@ComSpec & " /c " & "7z a -tzip E_Bosch_sic.zip C:\E -pChange34%", "C:\Users\uah7fe", @SW_HIDE, $STDOUT_CHILD) ProcessWaitClose($sStatus) $sOutput &= StdoutRead($sStatus) MsgBox(0, "Dieses Fenster nicht verschieben!!!", $sOutput & @CRLF & @CRLF & " Soll der Content Kopiert werden?", 7) Local $hProgressProc = DllCallbackRegister('_ProgressProc', 'bool', 'uint64;uint64;uint64;uint64;dword;dword;handle;handle;ptr') ProgressOn('Verschieben', 'Moving...', '0%', -1, -1, 18) If Not _WinAPI_MoveFileEx($sSource, $sDesti, 3, DllCallbackGetPtr($hProgressProc)) Then _WinAPI_ShowLastError('Error copying ' & $sSource) EndIf DllCallbackFree($hProgressProc) ProgressOff() Case $OK MsgBox(327680, "Meldung", "weiter geht's!!!") GUIDelete($Form1_1) ExitLoop EndSwitch WEnd ;~ GUIDelete($Form1_1) ;~ MsgBox(0, "Meldung", "Heute ist nicht Freitag oder ein ungerader Tag. Also keine Datensicherung!!!", 4) EndIf Func Quit($Form1_1, $nMsg, $iIDTimer, $dwTime) ; Funktion zum Beenden des Fensters Form1_1 ;GUIDelete($Form1_1) Exit EndFunc
-
Hallo Musashi,
vielen lieben Dank für deinen Tipp. Eine Frage hätte ich noch:
1. Der Exit-Befehl killt mir das komplette Proggi. Es sollte aber lediglich die Gui geschlossen und die While
muss natürlich auch beendet werden, damit das Proggi weitermacht...
Im Moment habe ich das so gelöst: Buttonklick auf OK dann GUIDelete($Form1_1) und ExitLoop
GuiDelete in die Func Quit geht ja noch aber wie beende ich die While???
In der Timer-Hilfe fand ich dazu leider nichts -
Hallo Autoitprofis,
gibt es die Möglichkeit den OK-Button auf einer GUI nach einer bestimmten Wartezeit quasi automatisch auslösen zu lassen?
In meinem Autostart-Programm wird ermittelt ob es Freitag ist oder nicht. Wenn ja wird eine Datensicherung erstellt.
Wenn nein wird ein von mir erstelltes Hinweisfenster eingeblendet. Dieses enthält 2 Buttons. Der erste Button soll die Datensicherung(bei klick) dennoch starten. Der zweite(OK-Button) soll
nur das Hinweisfenster schließen, damit das Programm weiter macht mit dem Autostart. Ich hätte es gerne so, das das Hinweisfenster nach ein paar Sekunden sich selber schliesst wenn nichts gedrückt wird,
damit das Programm weiter laufen kann.
C
Alles anzeigen#Region ;**** Directives created by AutoIt3Wrapper_GUI **** #AutoIt3Wrapper_Outfile_x64=Autostart_2.exe #AutoIt3Wrapper_Compression=4 #AutoIt3Wrapper_Res_Comment=Autostart with Backup-Function #AutoIt3Wrapper_Res_Description=Autostart with Backup #AutoIt3Wrapper_Res_Fileversion=1.0.0.11 #AutoIt3Wrapper_Res_Fileversion_AutoIncrement=y #AutoIt3Wrapper_Res_LegalCopyright=2019 - by HaSc #AutoIt3Wrapper_Res_Field=Made by|HaSc #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI **** #include <MsgBoxConstants.au3> #include <AutoItConstants.au3> #include <ButtonConstants.au3> #include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> #include <Date.au3> #include <String.au3> #include <StringConstants.au3> #include <EditConstants.au3> #include <Misc.au3> #include <Array.au3> #include <WinAPIEx.au3> #include <WinAPIDiag.au3> #include <WinAPIFiles.au3> Local $sLongDayName = _DateDayOfWeek(@WDAY, $DMW_LOCALE_LONGNAME) ; Name Wochentag feststellen Local $sOutput = "" Global $sSource = "Sicherungszipdatei" Global $sDesti = "SicherungsLW" Global $Konto = "harald" ; Logindatgen für PWD-Schutz Zip Datei Global $Kontonr = "PWD" If $sLongDayName = "Freitag" Then $sEidi = MsgBox(4, "Meldung", "Heute ist " & $sLongDayName & "!!!" & @CRLF & @CRLF & "Möchten sie die Datensicherung durchführen?") If $sEidi = "6" Then MsgBox(0, "Warnung!!!", "Bitte alle Programme und oder geöffneten Dateien schließen!!!") $sStatus = Run(@ComSpec & " /c " & "7z a -tzip sic.zip C:\E -pPWD", "Benutzer", @SW_HIDE, $STDOUT_CHILD) ; ZIP wird erstellt im Userkontext ProcessWaitClose($sStatus) $sOutput &= StdoutRead($sStatus) MsgBox(0, "Dieses Fenster nicht verschieben!!!", $sOutput & @CRLF & @CRLF & " Soll der Content Kopiert werden?", 7) Local $hProgressProc = DllCallbackRegister('_ProgressProc', 'bool', 'uint64;uint64;uint64;uint64;dword;dword;handle;handle;ptr') ProgressOn('Verschieben', 'Moving...', '0%', -1, -1, 18) If Not _WinAPI_MoveFileEx($sSource, $sDesti, 3, DllCallbackGetPtr($hProgressProc)) Then _WinAPI_ShowLastError('Error copying ' & $sSource) EndIf DllCallbackFree($hProgressProc) ProgressOff() EndIf Else ; Hier beginnt das Hinweisfenster das automatisch geschlossen werden soll wenn kein Button gedrückt wird... $Form1_1 = GUICreate("Meldung", 366, 167, -1, -1, -1, BitOR($WS_EX_TOPMOST,$WS_EX_WINDOWEDGE)) GUICtrlCreateLabel("", 40, 24, 4, 4) $Heute = GUICtrlCreateLabel("Heute ist nicht Freitag." & @CRLF & @CRLF & "Also KEINE Datensicherung!!!", 2, 30, 361, 60, $SS_CENTER) GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif") $doch = GUICtrlCreateButton("Aber hallo DOCH!", 18, 125, 121, 25) GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif") $OK = GUICtrlCreateButton("OK", 272, 125, 65, 25) GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif") GUISetState(@SW_SHOW) While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $doch MsgBox(0, "Warnung!!!", "Bitte alle Programme und oder geöffneten Dateien schließen!!!") $sStatus = Run(@ComSpec & " /c " & "7z a -tzip E_Bosch_sic.zip C:\E -pChange34%", "C:\Users\uah7fe", @SW_HIDE, $STDOUT_CHILD) ProcessWaitClose($sStatus) $sOutput &= StdoutRead($sStatus) MsgBox(0, "Dieses Fenster nicht verschieben!!!", $sOutput & @CRLF & @CRLF & " Soll der Content Kopiert werden?", 7) Local $hProgressProc = DllCallbackRegister('_ProgressProc', 'bool', 'uint64;uint64;uint64;uint64;dword;dword;handle;handle;ptr') ProgressOn('Verschieben', 'Moving...', '0%', -1, -1, 18) If Not _WinAPI_MoveFileEx($sSource, $sDesti, 3, DllCallbackGetPtr($hProgressProc)) Then _WinAPI_ShowLastError('Error copying ' & $sSource) EndIf DllCallbackFree($hProgressProc) ProgressOff() Case $OK MsgBox(0, "Meldung", "weiter geht's!!!", 3) EndSwitch WEnd ;MsgBox(4, "Meldung", "Heute ist nicht Freitag. Also keine Datensicherung!!!", 7) EndIf
-
Hallo AutoIT-Spezialisten,
ich habe ein Script erstellt mit welchem ich eine Zip-Datei erzeuge und diese dann verschiebe. Für den Verschiebevorgang habe ich eine Progressbar(wie im Forum beschrieben) implementiert.
Dieses Progressbarfenster lässt sich NICHT verschieben und genau das ist meine Frage. Kann mir jemand erklären warum nicht und ob ich das ändern kann?
Des Weiteren hätte ich gerne eine Progressbar für den Vorgang des Erstellens der Zip-Datei, da diese eine sehr große Datei(ca. 25 GB/Datensicherung) sein wird und der Vorgang ziemlich lange dauert.
Hätte jemand eine Idee wie ich das bewerkstelligen könnte?Auszug:
C
Alles anzeigen#include <MsgBoxConstants.au3> #include <AutoItConstants.au3> #include <ButtonConstants.au3> #include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> #include <Date.au3> #include <String.au3> #include <StringConstants.au3> #include <EditConstants.au3> #Include <Misc.au3> #include <Array.au3> #Include <WinAPIEx.au3> #include <WinAPIDiag.au3> #include <WinAPIFiles.au3> Local $sLongDayName = _DateDayOfWeek(@WDAY, $DMW_LOCALE_LONGNAME) ; Name Wochentag feststellen Local $sOutput = "" Global $sSource = "C:\Users\User\Test.zip" Global $sDesti = "U:\Test.zip" If $sLongDayName = "Freitag" Then $sEidi = MsgBox(4, "Meldung", "Heute ist " & $sLongDayName & "!!!" & @CRLF & @CRLF & "Möchten sie die Datensicherung durchführen?") If $sEidi = "6" Then MsgBox(0, "Warnung!!!", "Bitte alle Programme und oder geöffneten Dateien schließen!!!") $sStatus = Run(@ComSpec & " /c " & "7z a -tzip Test.zip C:\E\01_DOKUMENTE -pPASSWORT", "C:\Users\User", @SW_HIDE, $STDOUT_CHILD) ; ZIP-File wird mit /Zip erzeugt ProcessWaitClose($sStatus) $sOutput &= StdoutRead($sStatus) Msgbox(0, "Meldung Verschieben", $sOutput & @CRLF & @CRLF & " Soll der Content Kopiert werden?", 7) Local $hProgressProc = DllCallbackRegister('_ProgressProc', 'bool', 'uint64;uint64;uint64;uint64;dword;dword;handle;handle;ptr') ProgressOn('Verschieben', 'Moving...', '0%', -1, -1, BitOR($DLG_NOTONTOP, $DLG_MOVEABLE)) If Not _WinAPI_MoveFileEx($sSource, $sDesti, 3, DllCallbackGetPtr($hProgressProc)) Then _WinAPI_ShowLastError('Error copying ' & $sSource) EndIf DllCallbackFree($hProgressProc) ProgressOff() EndIF Else MsgBox(0, "Meldung", "Heute ist nicht Freitag. Also keine Datensicherung!!!", 4) EndIf Func _ProgressProc($iTotalFileSize, $iTotalBytesTransferred, $iStreamSize, $iStreamBytesTransferred, $iStreamNumber, $iCallbackReason, $hSourceFile, $hDestinationFile, $pData) #forceref $iStreamSize, $iStreamBytesTransferred, $iStreamNumber, $iCallbackReason, $hSourceFile, $hDestinationFile, $pData Local $iPercent = Round($iTotalBytesTransferred / $iTotalFileSize * 100) If $iPercent = 100 Then ProgressSet($iPercent, '', 'Complete') Sleep(1500) Else ProgressSet($iPercent, $iPercent & '%') EndIf Sleep(10) ; to slow down to see the progress bar If _IsPressed('1B') Then ;Abbruch wenn EXC-Taste gedrückt wird Return $PROGRESS_CANCEL Else Return $PROGRESS_CONTINUE EndIf EndFunc ;==>_ProgressProc
-
Hallo Autoit-Professionals,
ich habe immer wieder in meinen Scripten beim Kompilieren weitere Ressourcen-Felder eingefügt wie z.B. Made by = HaSc.
Warum werden diese im Explorer unter Details nicht angezeigt, bzw. wie richte ich es ein, dass sie angezeigt werden?
Danke für die Tipps...