Hi nochmal,
was genau bekommst du denn angezeigt wenn du CMD öffnest und Robocopy einfach manuell mit deinen ganzen Parametern mal aufrufst?
Wenn dort der Fehler liegt, was Schnuffel festgestellt hat, dann wirst du mit deinem AutoIt Aufruf auch nichts bekommen.
Daher bitte erst den Robocopy Aufruf manuell lauffähig bekommen, dann in AutoIt einbinden 😉 .
Viele Grüße
Sven
Beiträge von SOLVE-SMART
-
-
Hi Lambdax ,
noch bin ich nicht dazu gekommen mir das Projekt (bzw. die GitHub-Projekte) mal im Detail anzuschauen, doch bisher sieht es sehr interessant und nützlich aus.
Vielen Dank dafür 👍 . Bei Gelegenheit versuche ich mal paar Tests dazu zu machen.
Viele Grüße
Sven -
Hi casi4712 ,
Puh, ganz schöne Menge Code für eine Kopieraktion [...]
Die Funktion _runProgram() erscheint recht überladen für einen trivialen Aufruf von ShellExecuteWait(), dies muss ich zugeben, ja. Musst du für deinen Fall auch gar nicht verwenden sondern einfach das Beispiel von Oscar nutzen 😉 . Die Funktion _runProgram() ist einfach etwas robuster wenn es um andere Laufwerke/Partitionen geht ... aber egal.
[...] das Problem liegt schon in den Aufurfparametern für Robocopy [...]
Darauf wollte ich hinaus mit meiner Aussage:
Also schaue dir erstmal die Consolenausgabe an, ob deine Parameter so stimmen würden, wenn du Robocopy manuell über CMD ausführen würdest 😉 .
Tipp:
- Nutzt du SciTE oder VSCode als Editor casi4712 ? Falls nicht tue dies unbedingt. Allein das Syntax highlighting sollte dir einige potenzielle Probleme zeigen können.
- Anonsten STRG+F5 immer mal zwischendurch ausführen und schauen was der "Check" in der Console ausgibt.
- Helfen würde es uns auch, wenn du den Consolen-Output bei Fehlern hier postest, dann geht es evtl. noch schneller/genauer.
Viele Grüße
Sven
-
Hallo casi4712 ,
hier mal eine Kombination aus dem was Oscar vorgeschlagen hat und einer alten Funktion "_runProgram()" zum Aufruf eines externen Programmes:AutoIt
Alles anzeigen_syncro() Func _syncro() Local $sRobocopyExeFilePath = 'C:\windows\system32\robocopy.exe' Local $sSource = 'c:\plc\' Local $sDestination = 'f:\plc1\' Local $sParams = StringFormat('%s "%s" /E /Z /MIR /R:3 /W:5 /XD >nul 2>&1 "%sRecycled\" "%sRecycler\" "%sSystem Volume Information\"', $sSource, $sDestination, $sSource, $sSource, $sSource) _runProgram($sRobocopyExeFilePath, $sParams, True) ;~ _runProgram($sRobocopyExeFilePath, $sParams, False, True, False) ;~ _runProgram($sRobocopyExeFilePath, $sParams) EndFunc Func _runProgram($sProgramExeFilePath, $sParams = '', $bOnlyTest = False, $bWaitAfterRun = False, $bHidden = True) Local $sWaitCommand = ' /C ' Local $sDriveLetter = StringLeft($sProgramExeFilePath, 1) Local $sChangeDriveCommand = $sDriveLetter & ': && ' Local $sExeFileName = StringRegExpReplace($sProgramExeFilePath, '(.+?)\\', '', 0) Local $sExeFolder = StringTrimRight($sProgramExeFilePath, StringLen($sExeFileName)) Local $sChangeDirCommand = 'cd "' & $sExeFolder & '" ' Local $sCallProgrammCommand = '&& "' & $sExeFileName & '"' Local $sParamsCommand = '' Local $sVisibility = @SW_HIDE If $sParams <> '' Then $sParamsCommand = ' ' & $sParams EndIf If $bOnlyTest Then ConsoleWrite($sChangeDriveCommand & $sChangeDirCommand & $sCallProgrammCommand & $sParamsCommand & @CRLF) Return EndIf If $bWaitAfterRun Then $sWaitCommand = ' /K ' EndIf If Not $bHidden Then $sVisibility = @SW_SHOW EndIf ShellExecuteWait(@ComSpec, $sWaitCommand & $sChangeDriveCommand & $sChangeDirCommand & $sCallProgrammCommand & $sParamsCommand, '', '', $sVisibility) EndFuncBitte beachte:
- Im Beispielcode ist Zeile 9 aktiv (nicht auskommentiert). Du bekommst nur den Aufruf von "_runProgram()" mit Parametern in der Console ausgegeben.
- Wenn du stattdessen Zeile 10 aktivierst, dann wird dein Aufruf wirklich ausgeführt, mit sichtbaren CMD Fenster und es wird gewartet bis du CMD manuell schließt.
- Wenn du stattdessen Zeile 11 aktivierst, dann wird dein Aufruf ebenfalls ausgeführt, aber unsichtbar und CMD wird automatisch nach Programmausführung geschlossen.
Also schaue dir erstmal die Consolenausgabe an, ob deine Parameter so stimmen würden, wenn du Robocopy manuell über CMD ausführen würdest 😉 .
Viele Grüße
Sven
-
Hi Lashandan ,
Zitat
Zitat von Lashandan
Als nächstes sollen die Daten, sofern vorhanden, direkt nach der Auswahl des Rechners im DropDownMenü, im GUI ausgegeben werden.
Klingt logisch 😀 .
Ich melde mich wieder
Davon gehe ich mal aus 😅 , gerne.
Viele Grüße
Sven -
Hi casi4712 ,
Moombas hat dir bereits die richtige Antwort und ein gutes Beispiel in seinem letzten post (#55) gegeben.
Nur der Vollständigkeit halber hier die Code-Variante zu dem von mir angenommenen Code-Stand von dir:Spoiler anzeigen
AutoIt
Alles anzeigen; includes --------------------------------------------------------------------- #include-once #include "GUIBkImage.au3" #include "Services.au3" #include <GDIPlus.au3> #include <GUIConstantsEx.au3> #include <GuiCtrlSetOnHover_UDF.au3> #include <StaticConstants.au3> #include <String.au3> #include <WinApi.au3> #include <WindowsConstants.au3> #include <WindowsConstants.au3> ; opt -------------------------------------------------------------------------- Opt('MustDeclareVars', 1) ; declaration ------------------------------------------------------------------ Global $ARRAY_COLOR_TOP_MIN[3] = [36, 65, 142] Global $ARRAY_COLOR_TOP_MAX[3] = [11, 42, 122] Global $RBOX_EVENT_CLOSE = 1 Global $ROUNDES = 20 Global $LastHwnd = 0 Global $PCName = @ComputerName Global $BeepFile = 'C:\Windows\Temp\beep.wav' Global $sTaskName = '_07_DataCollect' Global $sScriptRootFolder = "C:\Users\Administrator\Downloads\" Global $GUIBKCOLOR = 0xEEC591 Global $AugVers = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{92000000-2021-0000-0000-415547494153}", "DisplayVersion") Global $sFilePath = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion", "ProgramFilesDir") Global $WinBuild = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion", "CurrentBuild") Global $WinDisplayVers = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion", "DisplayVersion") Global $WinName = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion", "ProductName") Global $gMsg, $iPID, $prog Global $idButton_1 Global $idButton_2 Global $idButton_3 Global $idButton_4 Global $idButton_5 Global $idButton_11 Global $idButton_12 Global $idButton_13 Global $idButton_14 Global $idButton_15 Global $idButton_16 Global $idButton_17 Global $idButton_18 Global $idButton_19 Global $idButton_20 Global $idButton_21 Global $idButton_22 Global $idButton_23 Global $idButton_24 Global $idButton_32 Global $idButton_33 Global $idButton_34 Global $idButton_35 Global $idButton_36 Global $idButton_37 Global $idButton_38 Global $idButton_39 Global $idButton_40 Global $idButton_41 Global $idButton_44 Global $idButton_45 Global $idButton_46 Global $idButton_47 Global $idButton_48 Global $idButton_51 Global $idButton_52 Global $idButton_53 Global $idButton_54 Global $idButton_55 Global $idButton_56 Global $sSqlServiceStatusLabel = "Local SQL-Server: " Global $sApacheServiceStatusLabel = "Local Apache-Server: " Global $iSqlServiceStatusLabel Global $iApacheServiceStatusLabel ; processing ------------------------------------------------------------------- FileInstall("C:\Users\Rickl\Pictures\DSC04006.jpg", "C:\Windows\Temp\hg.jpg", 1) Global $hGui = RBoxCreate("LAC WartungsTool Beta", 860, 600) _createLabels() _createButtons() AdlibRegister('_updateServiceStatus', 5000) ;~ GUICtrlCreatePic('C:\Windows\Temp\hg.jpg', 0, 25, 920, 660) While True CheckX($hGui, $RBOX_EVENT_CLOSE, "GuiCtrlSetColor(" & $RBOX_EVENT_CLOSE & ",0xA3A3A3)", "GuiCtrlSetColor(" & $RBOX_EVENT_CLOSE & ",0x555555)") $gMsg = GUIGetMsg() Switch $gMsg Case $GUI_EVENT_CLOSE, $RBOX_EVENT_CLOSE GUIDelete($hGui) AdlibUnRegister('_updateServiceStatus') Exit Case $idButton_1 $iPID = Run($sScriptRootFolder & "PC-Einrichtung\PCSETTING_listv2.cmd", "", 10) Case $idButton_2 $iPID = Run($sScriptRootFolder & "CustomCOPY.bat", "", 10) Case $idButton_3 MsgBox(0, "", 3) Case $idButton_4 Global $filename = "C:\Program Files\Notepad++\notepad++.exe" If FileExists($filename) Then $prog = ShellExecute($filename, "C:\Windows\start\RegWerte_setzen.reg", "", "open", @SW_SHOW) Else ;~ $prog = ShellExecute("C:\Windows\start\RegWerte_setzen.reg","","open",@SW_SHOW) $prog = ShellExecute('notepad.exe', 'C:\Windows\start\RegWerte_setzen.reg') EndIf Case $idButton_5 $iPID = SoundPlay($BeepFile) Case $idButton_11 RunWait(@ComSpec & " /c " & $sScriptRootFolder & "PC-Einrichtung\AddedApps.cmd") ;~ $iPID = Run($sScriptRootFolder & "PC-Einrichtung\AddedApps.cmd", "", 10) SoundPlay($BeepFile) Case $idButton_12 $iPID = RunWait(Run(@ComSpec & " /c " & $sScriptRootFolder & "CreateTasks.cmd")) ;~ RunWait(@ComSpec & " /c " & $sScriptRootFolder & "CreateTasks.cmd") ;~ $iPID = Run($sScriptRootFolder & "PC-Einrichtung\AddedApps.cmd", "", 10) SoundPlay($BeepFile) Case $idButton_13 $iPID = RunWait(Run(@ComSpec & " /c " & $sScriptRootFolder & "ETC\ProxyStandard.cmd")) ;~ RunWait(@ComSpec & " /c " & $sScriptRootFolder & "ETC\ProxyStandard.cmd") SoundPlay($BeepFile) Case $idButton_14 RunWait(@ComSpec & " /c " & $sScriptRootFolder & "TestTOOLS\WuReset.bat") ;~ $iPID = Run($sScriptRootFolder & "PC-Einrichtung\AddedApps.cmd", "", 10) SoundPlay($BeepFile) Case $idButton_15 RunWait(@ComSpec & " /c " & $sScriptRootFolder & "PC-Einrichtung\WinUpd.cmd") ;~ $iPID = Run($sScriptRootFolder & "PC-Einrichtung\AddedApps.cmd", "", 10) SoundPlay($BeepFile) Case $idButton_16 RunWait(@ComSpec & " /c " & $sScriptRootFolder & "ETC\OfficeRegister.cmd ") ;~ $iPID = Run($sScriptRootFolder & "PC-Einrichtung\AddedApps.cmd", "", 10) SoundPlay($BeepFile) Case $idButton_17 RunWait(@ComSpec & " /c " & $sScriptRootFolder & "PC-Einrichtung\Soft\officeKill.cmd", "", 10) SoundPlay($BeepFile) Case $idButton_19 RunWait(@ComSpec & " /c " & $sScriptRootFolder & "PC-Einrichtung\TOOLS\TOOLS\AppsRepair.bat", "", 10) SoundPlay($BeepFile) Case $idButton_39 $iPID = Run(@ComSpec & " /c " & $sScriptRootFolder & "Ordner_leeren.cmd") ;~ RunWait(@ComSpec & " /c " & $sScriptRootFolder & "Ordner_leeren.cmd") ;~ SoundPlay($BeepFile) Case $idButton_40 GUICtrlSetTip(-1, "Standard Image an Benutzer anpassen") RunWait(@ComSpec & " /c " & $sScriptRootFolder & "Datentraegerbereinigung\Dtclean.bat") $iPID = SoundPlay($BeepFile) Case $idButton_41 RunWait(@ComSpec & " /c " & $sScriptRootFolder & "PC-Einrichtung\TestGeraete.cmd") _SQL() ;~ MsgBox(0,"", "Es existiert eine Variable mit dem Namen: " & $st ) ;<= hier soll der name der variable stehen, nicht der wert $iPID = SoundPlay($BeepFile) Case $idButton_47 ;~ ShellExecute($sScriptRootFolder & "Windows10Upgrade9252.exe") RunWait($sScriptRootFolder & "Windows10Upgrade9252.exe") $iPID = SoundPlay($BeepFile) FileDelete("C:\Users\Riegert\Desktop\Windows 10-Update-Assistent.lnk") Case $idButton_53 GUICtrlSetTip(-1, "Standard Image an Benutzer anpassen") RunWait(@ComSpec & " /c " & "V:\Austausch-Daten\Riegert\inv2\CSV-Merge10.bat") $iPID = SoundPlay($BeepFile) Case $idButton_54 GUICtrlSetTip(-1, "Standard Image an Benutzer anpassen") RunWait(@ComSpec & " /c " & "V:\Austausch-Daten\Riegert\inv2\CSV-Merge_Short.bat") $iPID = SoundPlay($BeepFile) Case $idButton_55 GUICtrlSetTip(-1, "Inventar-Liste") ShellExecute("\\ds1\Freigaben\Referat_5_Informationstechnologie\51_Hardware_und_Software\511_Inventare\5112_Invertarliste_Hardware\Hardware\Inventarliste Hardware.xls") $iPID = SoundPlay($BeepFile) Case $idButton_56 GUICtrlSetTip(-1, "Inventarisierungs-Script ausführen") Local $sTaskName = '_07_DataCollect' ;~ RunWait("schtasks /Run /TN ' & "$sTaskName"') ;~ RunWait('schtasks.exe /Run /TN ' & $sTaskName, '', @SW_HIDE) $iPID = SoundPlay($BeepFile) EndSwitch WEnd ; functions -------------------------------------------------------------------- Func _createLabels() GUICtrlCreateLabel("CUSTOMIZING", 10, 35, 980, 20) GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) GUICtrlSetFont(-1, 9, 800) ; bold $iSqlServiceStatusLabel = GUICtrlCreateLabel($sSqlServiceStatusLabel, 600, 35, 980, 20) GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) GUICtrlSetFont(-1, 9, 800) ; bold $iApacheServiceStatusLabel = GUICtrlCreateLabel($sApacheServiceStatusLabel, 600, 50, 980, 20) GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) GUICtrlSetFont(-1, 9, 800) ; bold GUICtrlCreateLabel($PCName, 610, 290, 980, 30) GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) GUICtrlSetFont(-1, 19, 800) ; bold GUICtrlCreateLabel($WinBuild, 610, 330, 980, 20) GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) GUICtrlSetFont(-1, 9, 800) ; bold GUICtrlCreateLabel($WinDisplayVers, 610, 350, 980, 20) GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) GUICtrlSetFont(-1, 9, 800) ; bold GUICtrlCreateLabel($AugVers, 610, 370, 980, 20) GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) GUICtrlSetFont(-1, 9, 800) ; bold GUICtrlCreateLabel($WinName, 610, 390, 980, 30) GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) GUICtrlSetFont(-1, 9, 800) ; bold GUICtrlCreateLabel("Web-Server: " & _Webserver(), 600, 65, 980, 20) GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) GUICtrlSetFont(-1, 9, 800) ; bold GUICtrlCreateLabel("Einzelmodule", 10, 115, 780, 20) GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) GUICtrlSetFont(-1, 9, 900) ; bold GUICtrlCreateLabel("System-Wartung und Checks", 10, 220, 780, 20) GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) GUICtrlSetFont(-1, 9, 900) ; bold GUICtrlCreateLabel("Datenbank", 10, 420, 780, 20) GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) GUICtrlSetFont(-1, 9, 900) ; bold EndFunc Func _createButtons() $idButton_1 = GUICtrlCreateButton("Customize PC", 10, 55, 100, 20) GUICtrlSetTip(-1, "Standard Image an Benutzer anpassen") $idButton_2 = GUICtrlCreateButton("Image-Prepare", 130, 55, 100, 20) GUICtrlSetTip(-1, "Vorinstallaierte Windows Version anpassen -> Image") $idButton_3 = GUICtrlCreateButton("DL aktualisieren", 250, 55, 100, 20) $idButton_4 = GUICtrlCreateButton("RegSettings", 370, 55, 100, 20) $idButton_5 = GUICtrlCreateButton("TEST", 490, 55, 85, 20) $idButton_11 = GUICtrlCreateButton("Standard Software", 10, 135, 100, 20) $idButton_12 = GUICtrlCreateButton("Aufgaben", 130, 135, 100, 20) $idButton_13 = GUICtrlCreateButton("Standard Proxies", 250, 135, 100, 20) $idButton_14 = GUICtrlCreateButton("WinUpd Reset", 370, 135, 100, 20) $idButton_15 = GUICtrlCreateButton("UPDATES", 490, 135, 100, 20) $idButton_16 = GUICtrlCreateButton("Office registrieren", 610, 135, 100, 20) $idButton_17 = GUICtrlCreateButton("Office Kill", 730, 135, 100, 20) $idButton_18 = GUICtrlCreateButton("Domäne out/in", 10, 160, 100, 20) $idButton_19 = GUICtrlCreateButton("APPS reparieren", 130, 160, 100, 20) $idButton_20 = GUICtrlCreateButton("", 250, 160, 100, 20) $idButton_21 = GUICtrlCreateButton("", 370, 160, 100, 20) $idButton_22 = GUICtrlCreateButton("", 490, 160, 100, 20) $idButton_23 = GUICtrlCreateButton("", 610, 160, 100, 20) $idButton_24 = GUICtrlCreateButton("", 730, 160, 100, 20) $idButton_32 = GUICtrlCreateButton("ggg", 10, 185, 100, 20) $idButton_33 = GUICtrlCreateButton("", 130, 185, 100, 20) $idButton_34 = GUICtrlCreateButton("", 250, 185, 100, 20) $idButton_35 = GUICtrlCreateButton("", 370, 185, 100, 20) $idButton_36 = GUICtrlCreateButton("gfgf", 490, 185, 100, 20) $idButton_37 = GUICtrlCreateButton("VB ON temp", 610, 185, 100, 20) $idButton_38 = GUICtrlCreateButton("VB OFF", 730, 185, 100, 20) $idButton_39 = GUICtrlCreateButton("PC-CLEAN", 10, 240, 100, 20) $idButton_40 = GUICtrlCreateButton("Win bereinigen", 130, 240, 100, 20) $idButton_41 = GUICtrlCreateButton("Geräte Check", 250, 240, 100, 20) $idButton_44 = GUICtrlCreateButton("", 610, 240, 100, 20) $idButton_45 = GUICtrlCreateButton("", 730, 240, 100, 20) $idButton_46 = GUICtrlCreateButton("Win RESET!", 10, 265, 100, 20) $idButton_47 = GUICtrlCreateButton("Win Update Ass.", 130, 265, 100, 20) $idButton_48 = GUICtrlCreateButton("", 250, 265, 100, 20) $idButton_51 = GUICtrlCreateButton("MKLINK EPIC", 610, 265, 100, 20) $idButton_52 = GUICtrlCreateButton("", 730, 265, 100, 20) $idButton_53 = GUICtrlCreateButton("PC-List long", 490, 340, 100, 20) $idButton_54 = GUICtrlCreateButton("PC-List short", 490, 365, 100, 20) $idButton_55 = GUICtrlCreateButton("Inventar Liste", 490, 390, 100, 20) $idButton_56 = GUICtrlCreateButton("Inventarisieren", 490, 315, 100, 20) EndFunc Func RBoxCreate($Title, $width, $height, $left = -1, $top = -1, $show = 1) Local $GUI = GUICreate($Title, $width, $height, $left, $top, $WS_POPUP) GUISetBkColor($GUIBKCOLOR, $GUI) ;~ _GuiRoundCorners($GUI,0,0,$ROUNDES,$ROUNDES) $RBOX_EVENT_CLOSE = GUICtrlCreateLabel('X', $width - 20, 3, 25, 25) GUICtrlSetCursor($RBOX_EVENT_CLOSE, 0) GUICtrlSetBkColor($RBOX_EVENT_CLOSE, -2) GUICtrlSetFont($RBOX_EVENT_CLOSE, 15, 800) GUICtrlSetColor($RBOX_EVENT_CLOSE, 0x555555) $Title &= " " Local $hTitle = GUICtrlCreateLabel($Title, 0, 0, $width - 20, 26, $SS_CENTER, $GUI_WS_EX_PARENTDRAG) GUICtrlSetFont($hTitle, 17, 400, 0, "Consolas") GUICtrlSetBkColor($hTitle, -2) Local $Graphic = GUICtrlCreateGraphic(0, 0, $width, 25) GUICtrlSetState($Graphic, $Gui_DISABLE) ;~ GradientFill($Graphic, 0, 0, $width, 25, $ARRAY_COLOR_TOP_MIN, $ARRAY_COLOR_TOP_MAX) If $show = 1 Then GUISetState(@SW_SHOW, $GUI) Return $GUI EndFunc Func CheckX($hGui, $CtrlID, $sCMD, $eCMD) Local $cGui = GUIGetCursorInfo($hGui) If Not IsArray($cGui) Then Return 0 EndIf If $LastHwnd <> $cGui[4] And $cGui[4] = $CtrlID Then Return Execute($sCMD) + Assign("LastHwnd", $cGui[4]) If $LastHwnd <> $cGui[4] Then Return Execute($eCMD) + Assign("LastHwnd", $cGui[4]) EndFunc Func _SQL() Local $st = False Local $FileText ; fehlt! Local Const $SeviceName = "SQL Server (AUGIAS)" ; name of the service to test ; Local Const fehlte RunWait(@ComSpec & " /c net start > c:\temp\services.txt", "", @SW_HIDE) ; send a list of the services that are running to a file ; hier würde eine Prüfung Sinn machen $FileText = FileRead("c:\temp\services.txt", FileGetSize("c:\temp\services.txt")) ; read that file If StringInStr($FileText, $SeviceName) Then ; check for the service name $st = "RUNNING" ; ich würde True wählen Else $st = "OFF" ; ich würde False wählen EndIf Return $st EndFunc Func _Webserver() Local $ws ; fehlt! und ich würde es hier direkt als = False setzen! Local $FileText ;fehlt! Local Const $SeviceName = "Apache2.4" RunWait(@ComSpec & " /c net start > c:\temp\services.txt", "", @SW_HIDE) ; hier würde eine Prüfung Sinn machen $FileText = FileRead("c:\temp\services.txt", FileGetSize("c:\temp\services.txt")) ; read that file Local $st If StringInStr($FileText, $SeviceName) Then ; check for the service name $st = "RUNNING" ; ich würde True wählen Else $st = "OFF" ; ich würde False wählen EndIf Return $st EndFunc Func Request_Service($Servicename) If _Service_Exists($Servicename) Then Return Status(_Service_QueryStatus($Servicename)[1]) Else Return 'Service does not exist' EndIf EndFunc Func Status($Status) Switch $Status Case 1 $Status = 'SERVICE_STOPPED' Case 2 $Status = 'SERVICE_START_PENDING' Case 3 $Status = 'SERVICE_STOP_PENDING' Case 4 $Status = 'SERVICE_RUNNING' Case 5 $Status = 'SERVICE_CONTINUE_PENDING' Case 6 $Status = 'SERVICE_PAUSE_PENDING' Case 7 $Status = 'SERVICE_PAUSED' Case Else $Status = 'SERVICE_UNKNOWN_STATE' EndSwitch Return ($Status) EndFunc Func _updateServiceStatus() GUICtrlSetData($iSqlServiceStatusLabel, $sSqlServiceStatusLabel & Request_Service("MSSQL")) GUICtrlSetData($iApacheServiceStatusLabel, $sApacheServiceStatusLabel & Request_Service("Apache2.4")) EndFunc
Und hier siehst du den "Diff" - was tatsächlich geändert wurde zur Variante vorher.Viele Grüße
Sven
-
Hi Lashandan ,
Den gesamte Code möchte ich aktuell noch nicht präsentieren da er ein paar sensible Daten erhält.
Okay, sowas dachte ich mir schon. Dann hier mal ein Beispiel um zu klären, ob du dies meinst/brauchst:AutoIt
Alles anzeigen; includes --------------------------------------------------------------------- #include-once ; opt -------------------------------------------------------------------------- Opt('MustDeclareVars', 1) ; declaration ------------------------------------------------------------------ Global Const $GUI_EVENT_CLOSE = -3 Global $hGui Global $cDropdown Global $cLoadButton Global $sListOfComputer = 'Et;repellendus;eos;quasi;adipisci;rerum;aperiam;Voluptatem;ea;nisi;Soluta;expedita' ; processing ------------------------------------------------------------------- _createGui() _createGuiElements() While True Switch GUIGetMsg() Case $GUI_EVENT_CLOSE ExitLoop Case $cLoadButton _fillCombobox($sListOfComputer) EndSwitch WEnd _guiDispose() ; functions -------------------------------------------------------------------- Func _createGui() $hGui = GUICreate('Demo', 350, 250) EndFunc Func _createGuiElements() $cDropdown = GUICtrlCreateCombo('Bitte wählen ...', 15, 15, 320) $cLoadButton = GUICtrlCreateButton('Laden', 15, 50, 320) GUISetState(@SW_SHOW) EndFunc Func _guiDispose() GUIDelete($hGUI) Exit EndFunc Func _fillCombobox($sData) Local $sListOfComputer = StringReplace($sData, ';', '|') GUICtrlSetData($cDropdown, $sListOfComputer) EndFunc
Viele Grüße
Sven -
Hi Lashandan ,
kannst du ggf. deinen Code (bestenfalls gesamt als *.zip) zu Verfügung stellen oder geht das auf Grund des Datenschutz nicht? Mir fällt es schwer eine hoffentlich passende Antwort zu geben, wenn ich keine Testdaten dazu erzeugen kann/habe.Hab dann versucht das Array aufzulösen und wiederum in eine Listenvariable zu schmeißen um sie anschließend in die Dropdownliste zu übergeben.
Verstehe den Sinn bzw. das Ziel dazu nicht. Du willst Informationen eines Arrays der Combobox übergeben, nehme ich an? Dann sollte die Funktion doch helfen oder nicht?
Viele Grüße
Sven -
Hi casi4712 ,
ausgehend von diesem Code-Stand:Spoiler anzeigen
AutoIt
Alles anzeigen; includes --------------------------------------------------------------------- #include-once #include "GUIBkImage.au3" #include "Services.au3" #include <GDIPlus.au3> #include <GUIConstantsEx.au3> #include <GuiCtrlSetOnHover_UDF.au3> #include <StaticConstants.au3> #include <String.au3> #include <WinApi.au3> #include <WindowsConstants.au3> #include <WindowsConstants.au3> ; opt -------------------------------------------------------------------------- Opt('MustDeclareVars', 1) ; declaration ------------------------------------------------------------------ Global $ARRAY_COLOR_TOP_MIN[3] = [36, 65, 142] Global $ARRAY_COLOR_TOP_MAX[3] = [11, 42, 122] Global $RBOX_EVENT_CLOSE = 1 Global $ROUNDES = 20 Global $LastHwnd = 0 Global $PCName = @ComputerName Global $BeepFile = 'C:\Windows\Temp\beep.wav' Global $sTaskName = '_07_DataCollect' Global $sScriptRootFolder = "C:\Users\Administrator\Downloads\" Global $GUIBKCOLOR = 0xEEC591 Global $AugVers = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{92000000-2021-0000-0000-415547494153}", "DisplayVersion") Global $sFilePath = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion", "ProgramFilesDir") Global $WinBuild = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion", "CurrentBuild") Global $WinDisplayVers = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion", "DisplayVersion") Global $WinName = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion", "ProductName") Global $gMsg, $iPID, $prog Global $idButton_1 Global $idButton_2 Global $idButton_3 Global $idButton_4 Global $idButton_5 Global $idButton_11 Global $idButton_12 Global $idButton_13 Global $idButton_14 Global $idButton_15 Global $idButton_16 Global $idButton_17 Global $idButton_18 Global $idButton_19 Global $idButton_20 Global $idButton_21 Global $idButton_22 Global $idButton_23 Global $idButton_24 Global $idButton_32 Global $idButton_33 Global $idButton_34 Global $idButton_35 Global $idButton_36 Global $idButton_37 Global $idButton_38 Global $idButton_39 Global $idButton_40 Global $idButton_41 Global $idButton_44 Global $idButton_45 Global $idButton_46 Global $idButton_47 Global $idButton_48 Global $idButton_51 Global $idButton_52 Global $idButton_53 Global $idButton_54 Global $idButton_55 Global $idButton_56 Global $iServiceStatusLabel = "" ; processing ------------------------------------------------------------------- FileInstall("C:\Users\Rickl\Pictures\DSC04006.jpg", "C:\Windows\Temp\hg.jpg", 1) Global $hGui = RBoxCreate("LAC WartungsTool Beta", 840, 600) _createLabels() _createButtons() ;~ GUICtrlCreatePic('C:\Windows\Temp\hg.jpg', 0, 25, 920, 660) While True CheckX($hGui, $RBOX_EVENT_CLOSE, "GuiCtrlSetColor(" & $RBOX_EVENT_CLOSE & ",0xA3A3A3)", "GuiCtrlSetColor(" & $RBOX_EVENT_CLOSE & ",0x555555)") $gMsg = GUIGetMsg() Switch $gMsg Case $GUI_EVENT_CLOSE, $RBOX_EVENT_CLOSE GUIDelete($hGui) Exit Case $idButton_1 $iPID = Run($sScriptRootFolder & "PC-Einrichtung\PCSETTING_listv2.cmd", "", 10) Case $idButton_2 $iPID = Run($sScriptRootFolder & "CustomCOPY.bat", "", 10) Case $idButton_3 MsgBox(0, "", 3) Case $idButton_4 Global $filename = "C:\Program Files\Notepad++\notepad++.exe" If FileExists($filename) Then $prog = ShellExecute($filename, "C:\Windows\start\RegWerte_setzen.reg", "", "open", @SW_SHOW) Else ;~ $prog = ShellExecute("C:\Windows\start\RegWerte_setzen.reg","","open",@SW_SHOW) $prog = ShellExecute('notepad.exe', 'C:\Windows\start\RegWerte_setzen.reg') EndIf Case $idButton_5 $iPID = SoundPlay($BeepFile) Case $idButton_11 RunWait(@ComSpec & " /c " & $sScriptRootFolder & "PC-Einrichtung\AddedApps.cmd") ;~ $iPID = Run($sScriptRootFolder & "PC-Einrichtung\AddedApps.cmd", "", 10) SoundPlay($BeepFile) Case $idButton_12 $iPID = RunWait(Run(@ComSpec & " /c " & $sScriptRootFolder & "CreateTasks.cmd")) ;~ RunWait(@ComSpec & " /c " & $sScriptRootFolder & "CreateTasks.cmd") ;~ $iPID = Run($sScriptRootFolder & "PC-Einrichtung\AddedApps.cmd", "", 10) SoundPlay($BeepFile) Case $idButton_13 $iPID = RunWait(Run(@ComSpec & " /c " & $sScriptRootFolder & "ETC\ProxyStandard.cmd")) ;~ RunWait(@ComSpec & " /c " & $sScriptRootFolder & "ETC\ProxyStandard.cmd") SoundPlay($BeepFile) Case $idButton_14 RunWait(@ComSpec & " /c " & $sScriptRootFolder & "TestTOOLS\WuReset.bat") ;~ $iPID = Run($sScriptRootFolder & "PC-Einrichtung\AddedApps.cmd", "", 10) SoundPlay($BeepFile) Case $idButton_15 RunWait(@ComSpec & " /c " & $sScriptRootFolder & "PC-Einrichtung\WinUpd.cmd") ;~ $iPID = Run($sScriptRootFolder & "PC-Einrichtung\AddedApps.cmd", "", 10) SoundPlay($BeepFile) Case $idButton_16 RunWait(@ComSpec & " /c " & $sScriptRootFolder & "ETC\OfficeRegister.cmd ") ;~ $iPID = Run($sScriptRootFolder & "PC-Einrichtung\AddedApps.cmd", "", 10) SoundPlay($BeepFile) Case $idButton_17 RunWait(@ComSpec & " /c " & $sScriptRootFolder & "PC-Einrichtung\Soft\officeKill.cmd", "", 10) SoundPlay($BeepFile) Case $idButton_19 RunWait(@ComSpec & " /c " & $sScriptRootFolder & "PC-Einrichtung\TOOLS\TOOLS\AppsRepair.bat", "", 10) SoundPlay($BeepFile) Case $idButton_36 Local $sServiceName = "TermService" GUICtrlSetData($iServiceStatusLabel, $sServiceName & ": " & Request_Service($sServiceName)) Case $idButton_39 $iPID = Run(@ComSpec & " /c " & $sScriptRootFolder & "Ordner_leeren.cmd") ;~ RunWait(@ComSpec & " /c " & $sScriptRootFolder & "Ordner_leeren.cmd") ;~ SoundPlay($BeepFile) Case $idButton_40 GUICtrlSetTip(-1, "Standard Image an Benutzer anpassen") RunWait(@ComSpec & " /c " & $sScriptRootFolder & "Datentraegerbereinigung\Dtclean.bat") $iPID = SoundPlay($BeepFile) Case $idButton_41 RunWait(@ComSpec & " /c " & $sScriptRootFolder & "PC-Einrichtung\TestGeraete.cmd") _SQL() ;~ MsgBox(0,"", "Es existiert eine Variable mit dem Namen: " & $st ) ;<= hier soll der name der variable stehen, nicht der wert $iPID = SoundPlay($BeepFile) Case $idButton_47 ;~ ShellExecute($sScriptRootFolder & "Windows10Upgrade9252.exe") RunWait($sScriptRootFolder & "Windows10Upgrade9252.exe") $iPID = SoundPlay($BeepFile) FileDelete("C:\Users\Riegert\Desktop\Windows 10-Update-Assistent.lnk") Case $idButton_53 GUICtrlSetTip(-1, "Standard Image an Benutzer anpassen") RunWait(@ComSpec & " /c " & "V:\Austausch-Daten\Riegert\inv2\CSV-Merge10.bat") $iPID = SoundPlay($BeepFile) Case $idButton_54 GUICtrlSetTip(-1, "Standard Image an Benutzer anpassen") RunWait(@ComSpec & " /c " & "V:\Austausch-Daten\Riegert\inv2\CSV-Merge_Short.bat") $iPID = SoundPlay($BeepFile) Case $idButton_55 GUICtrlSetTip(-1, "Inventar-Liste") ShellExecute("\\ds1\Freigaben\Referat_5_Informationstechnologie\51_Hardware_und_Software\511_Inventare\5112_Invertarliste_Hardware\Hardware\Inventarliste Hardware.xls") $iPID = SoundPlay($BeepFile) Case $idButton_56 GUICtrlSetTip(-1, "Inventarisierungs-Script ausführen") Local $sTaskName = '_07_DataCollect' ;~ RunWait("schtasks /Run /TN ' & "$sTaskName"') ;~ RunWait('schtasks.exe /Run /TN ' & $sTaskName, '', @SW_HIDE) $iPID = SoundPlay($BeepFile) EndSwitch WEnd ; functions -------------------------------------------------------------------- Func _createLabels() GUICtrlCreateLabel("CUSTOMIZING" & _StringRepeat(" ", 185) & "Local SQL-Server: " & _SQL(), 10, 35, 980, 20) GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) GUICtrlSetFont(-1, 9, 800) ; bold GUICtrlCreateLabel($PCName, 610, 290, 980, 30) GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) GUICtrlSetFont(-1, 19, 800) ; bold GUICtrlCreateLabel($WinBuild, 610, 330, 980, 20) GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) GUICtrlSetFont(-1, 9, 800) ; bold GUICtrlCreateLabel($WinDisplayVers, 610, 350, 980, 20) GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) GUICtrlSetFont(-1, 9, 800) ; bold GUICtrlCreateLabel($AugVers, 610, 370, 980, 20) GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) GUICtrlSetFont(-1, 9, 800) ; bold GUICtrlCreateLabel($WinName, 610, 390, 980, 30) GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) GUICtrlSetFont(-1, 9, 800) ; bold GUICtrlCreateLabel(" Web-Server : " & _Webserver(), 643, 50, 980, 20) GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) GUICtrlSetFont(-1, 9, 800) ; bold GUICtrlCreateLabel("Einzelmodule", 10, 115, 780, 20) GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) GUICtrlSetFont(-1, 9, 900) ; bold GUICtrlCreateLabel("System-Wartung und Checks", 10, 220, 780, 20) GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) GUICtrlSetFont(-1, 9, 900) ; bold GUICtrlCreateLabel("Datenbank", 10, 420, 780, 20) GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) GUICtrlSetFont(-1, 9, 900) ; bold $iServiceStatusLabel = GUICtrlCreateLabel("Service", 10, 440, 780, 20) EndFunc Func _createButtons() $idButton_1 = GUICtrlCreateButton("Customize PC", 10, 55, 100, 20) GUICtrlSetTip(-1, "Standard Image an Benutzer anpassen") $idButton_2 = GUICtrlCreateButton("Image-Prepare", 130, 55, 100, 20) GUICtrlSetTip(-1, "Vorinstallaierte Windows Version anpassen -> Image") $idButton_3 = GUICtrlCreateButton("DL aktualisieren", 250, 55, 100, 20) $idButton_4 = GUICtrlCreateButton("RegSettings", 370, 55, 100, 20) $idButton_5 = GUICtrlCreateButton("TEST", 490, 55, 85, 20) $idButton_11 = GUICtrlCreateButton("Standard Software", 10, 135, 100, 20) $idButton_12 = GUICtrlCreateButton("Aufgaben", 130, 135, 100, 20) $idButton_13 = GUICtrlCreateButton("Standard Proxies", 250, 135, 100, 20) $idButton_14 = GUICtrlCreateButton("WinUpd Reset", 370, 135, 100, 20) $idButton_15 = GUICtrlCreateButton("UPDATES", 490, 135, 100, 20) $idButton_16 = GUICtrlCreateButton("Office registrieren", 610, 135, 100, 20) $idButton_17 = GUICtrlCreateButton("Office Kill", 730, 135, 100, 20) $idButton_18 = GUICtrlCreateButton("Domäne out/in", 10, 160, 100, 20) $idButton_19 = GUICtrlCreateButton("APPS reparieren", 130, 160, 100, 20) $idButton_20 = GUICtrlCreateButton("", 250, 160, 100, 20) $idButton_21 = GUICtrlCreateButton("", 370, 160, 100, 20) $idButton_22 = GUICtrlCreateButton("", 490, 160, 100, 20) $idButton_23 = GUICtrlCreateButton("", 610, 160, 100, 20) $idButton_24 = GUICtrlCreateButton("", 730, 160, 100, 20) $idButton_32 = GUICtrlCreateButton("ggg", 10, 185, 100, 20) $idButton_33 = GUICtrlCreateButton("", 130, 185, 100, 20) $idButton_34 = GUICtrlCreateButton("", 250, 185, 100, 20) $idButton_35 = GUICtrlCreateButton("", 370, 185, 100, 20) $idButton_36 = GUICtrlCreateButton("gfgf", 490, 185, 100, 20) $idButton_37 = GUICtrlCreateButton("VB ON temp", 610, 185, 100, 20) $idButton_38 = GUICtrlCreateButton("VB OFF", 730, 185, 100, 20) $idButton_39 = GUICtrlCreateButton("PC-CLEAN", 10, 240, 100, 20) $idButton_40 = GUICtrlCreateButton("Win bereinigen", 130, 240, 100, 20) $idButton_41 = GUICtrlCreateButton("Geräte Check", 250, 240, 100, 20) $idButton_44 = GUICtrlCreateButton("", 610, 240, 100, 20) $idButton_45 = GUICtrlCreateButton("", 730, 240, 100, 20) $idButton_46 = GUICtrlCreateButton("Win RESET!", 10, 265, 100, 20) $idButton_47 = GUICtrlCreateButton("Win Update Ass.", 130, 265, 100, 20) $idButton_48 = GUICtrlCreateButton("", 250, 265, 100, 20) $idButton_51 = GUICtrlCreateButton("MKLINK EPIC", 610, 265, 100, 20) $idButton_52 = GUICtrlCreateButton("", 730, 265, 100, 20) $idButton_53 = GUICtrlCreateButton("PC-List long", 490, 340, 100, 20) $idButton_54 = GUICtrlCreateButton("PC-List short", 490, 365, 100, 20) $idButton_55 = GUICtrlCreateButton("Inventar Liste", 490, 390, 100, 20) $idButton_56 = GUICtrlCreateButton("Inventarisieren", 490, 315, 100, 20) EndFunc Func RBoxCreate($Title, $width, $height, $left = -1, $top = -1, $show = 1) Local $GUI = GUICreate($Title, $width, $height, $left, $top, $WS_POPUP) GUISetBkColor($GUIBKCOLOR, $GUI) ;~ _GuiRoundCorners($GUI,0,0,$ROUNDES,$ROUNDES) $RBOX_EVENT_CLOSE = GUICtrlCreateLabel('X', $width - 20, 3, 25, 25) GUICtrlSetCursor($RBOX_EVENT_CLOSE, 0) GUICtrlSetBkColor($RBOX_EVENT_CLOSE, -2) GUICtrlSetFont($RBOX_EVENT_CLOSE, 15, 800) GUICtrlSetColor($RBOX_EVENT_CLOSE, 0x555555) $Title &= " " Local $hTitle = GUICtrlCreateLabel($Title, 0, 0, $width - 20, 26, $SS_CENTER, $GUI_WS_EX_PARENTDRAG) GUICtrlSetFont($hTitle, 17, 400, 0, "Consolas") GUICtrlSetBkColor($hTitle, -2) Local $Graphic = GUICtrlCreateGraphic(0, 0, $width, 25) GUICtrlSetState($Graphic, $Gui_DISABLE) ;~ GradientFill($Graphic, 0, 0, $width, 25, $ARRAY_COLOR_TOP_MIN, $ARRAY_COLOR_TOP_MAX) If $show = 1 Then GUISetState(@SW_SHOW, $GUI) Return $GUI EndFunc Func CheckX($hGui, $CtrlID, $sCMD, $eCMD) Local $cGui = GUIGetCursorInfo($hGui) If Not IsArray($cGui) Then Return 0 EndIf If $LastHwnd <> $cGui[4] And $cGui[4] = $CtrlID Then Return Execute($sCMD) + Assign("LastHwnd", $cGui[4]) If $LastHwnd <> $cGui[4] Then Return Execute($eCMD) + Assign("LastHwnd", $cGui[4]) EndFunc Func _SQL() Local $st = False Local $FileText ; fehlt! Local Const $SeviceName = "SQL Server (AUGIAS)" ; name of the service to test ; Local Const fehlte RunWait(@ComSpec & " /c net start > c:\temp\services.txt", "", @SW_HIDE) ; send a list of the services that are running to a file ; hier würde eine Prüfung Sinn machen $FileText = FileRead("c:\temp\services.txt", FileGetSize("c:\temp\services.txt")) ; read that file If StringInStr($FileText, $SeviceName) Then ; check for the service name $st = "RUNNING" ; ich würde True wählen Else $st = "OFF" ; ich würde False wählen EndIf Return $st EndFunc Func _Webserver() Local $ws ; fehlt! und ich würde es hier direkt als = False setzen! Local $FileText ;fehlt! Local Const $SeviceName = "Apache2.4" RunWait(@ComSpec & " /c net start > c:\temp\services.txt", "", @SW_HIDE) ; hier würde eine Prüfung Sinn machen $FileText = FileRead("c:\temp\services.txt", FileGetSize("c:\temp\services.txt")) ; read that file Local $st If StringInStr($FileText, $SeviceName) Then ; check for the service name $st = "RUNNING" ; ich würde True wählen Else $st = "OFF" ; ich würde False wählen EndIf Return $st EndFunc ;;;;;;;;; wie am besten per parameter servicename in ein Label einbinden ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Func Request_Service($Servicename) If _Service_Exists($Servicename) Then Return Status(_Service_QueryStatus($Servicename)[1]) Else Return 'Service does not exist' EndIf EndFunc Func Status($Status) Switch $Status Case 1 $Status = 'SERVICE_STOPPED' Case 2 $Status = 'SERVICE_START_PENDING' Case 3 $Status = 'SERVICE_STOP_PENDING' Case 4 $Status = 'SERVICE_RUNNING' Case 5 $Status = 'SERVICE_CONTINUE_PENDING' Case 6 $Status = 'SERVICE_PAUSE_PENDING' Case 7 $Status = 'SERVICE_PAUSED' Case Else $Status = 'SERVICE_UNKNOWN_STATE' EndSwitch Return ($Status) EndFuncUnd diesen Abhängigkeiten/UDFs hier, funktioniert die Aktualisierung nach Statusänderung wunderbar.
- Also mit dem Klick auf Button mit Label "gfgf" wird der Status angezeigt.
- Wenn du einen Dienst stoppst, im Beispiel von TermService (Remote Desktop Services) wie im Code, wird von SERVICE_RUNNING zu SERVICE_STOPPED aktualisiert.
- Namen der Dienste können abweichen, ich arbeite mit einem englischen Windows.
Bitte stelle sicher, dass du den selben Code und die selben UDFs verwendest! Wenn das bei dir passt, zeige ich dir wie das mit den Intervall funktioniert 😉 .
Viele GrüßeSven
-
Hi und bitteschön Oscar ,
freut mich das es nun klappt - besser aussieht 😁 🎉 .
hi MojoeB ,
wenn der VSCode-Einstieg tatsächlich problematisch sein sollte, schreibe ich mal was zusammen. Wartet aber bitte nicht darauf, das mache ich sobald ich die Kapazität dazu habe 😉 .
Das TODO habe ich schon mal auf mein "Planning-Board" aufgenommen 🤭 .
Noch mal zu dir BugFix :Farbdesign "Tomorrow Night Blue"
Ich nutze übrigens One Dark Pro was mir neben AutoIt insbesondere bei anderen Sprachen super gefällt.
Viele GrüßeSven
-
Hi nochmal,
Ja, das sind so Paradigmen, die oft als unverrückbar dargestellt werden (wie z. B. auch die 80-Zeichen Zeilenlänge in Python) [...]
Ja da gebe ich dir Recht, manchmal sollte man diese Dinge hinterfragen, klar.
Zum Punkt "Gewohnheitssache" => absolut, stimme ich zu.[...] aber trotzdem kein vollständiges Syntax highlighting [...]
Hmm, vielleicht komme ich mal dazu 'nen kleines Tutorial dazu zu schreiben. Wirklich klein, damit die erste Hürde gering ist.
Meine Frage wäre jetzt eher, ob man eigene Snippets einbauen kann?
Ja klar 😀 , einfach [F1] > ">snippets" > "Preferences: Configure User Snippets" > "AutoIt" auswählen und Snippet in JSON Syntax einfügen.
Code: Beispiel
Alles anzeigen{ "AddBackslashToPathEnd": { "body": [ "Func _addBackslashToPathEnd($$sPath)", " If StringRight($$sPath, 1) <> '\\' Then $$sPath &= '\\'", "", " Return $$sPath", "EndFunc" ], "description": "Ensure trailing backslash for a path.", "prefix": "!au3_addBackslashToPathEnd" } }Wichtig dabei ist nur, dass ein "$" Zeichen durch "$$" ersetzt wird. Speichern und du kannst dein Snippet zu deiner Sprache (in unserem Fall AutoIt) aufrufen und verwenden.
Zitat von OscarAber ich werde für AutoIt wohl doch bei SciTE4AutoIt bleiben.
Dein gutes Recht, wenn auch schade 😁 .
Viele GrüßeSven
-
Hi AspirinJunkie ,
Danke auch dir 😀 . Zugegebenermaßen hat mir Melba23 (aus dem englischen Forum) ebenfalls solch einen Hinweis gegeben bzgl. "Au3Stripper". Werde mich damit mal etwas näher beschäftigen.Diese Ansätze sollten deutlich besser sein, als sich bestimmte Funktionen daraus als Snippets reinzubauen.
Zum einen bläht man sich eine Datei auf anstatt bestimmte Funktionalitäten in Module ausgelagert zu haben [...]Persönlich gefällt mir der Snippet-Ansatz besser doch darüber kann man sicher streiten. Allerdings muss das einfügen eines Snippets nicht bedeuten, dass man nicht trotzdem in "Modulen" arbeiten kann. Es sollte sich sogar ergänzen bestenfalls. Ich versuche diesen Ansatz der Projektstruktur (auslagern in Modulen) in (fast) all' meinen Projekten zu berücksichtigen wie bspw. hier oder hier (jeweils im src Ordner).
[...] zum anderen gibt es in UDFs auch oft zig Seitenabhängigkeiten wie z.B. zu bestimmten Konstante
Das stimmt, jedoch sollen die Snippets solche UDF Klassen nicht komplett ersetzen, dass können sie auch gar nicht, genau aus den von dir genannten Gründen. Ein Snippet ist aus meiner Sicht eher eine abgeschlossen Funktion mit bestenfalls nur einer Aufgabe. Auch wenn einige meiner bisherigen Snippets nicht ganz dahingehen passen 🧐 .
Danke für die Anregungen und Einschätzungen. Da habe ich was zum grübeln 😁 .
Viele Grüße
Sven
-
Hi BugFix ,
Danke für dein Feedback 😀 . Kann ich nachvollziehen das du dir gern mit Lua SciTE nach deinen Bedürfnissen anpasst und dir entsprechend alles so konfigurierst wie du es magst.
Für mich war die Umstellung anfangs auch nicht über Nacht die richtige Entscheidung, doch mittlerweile ist VSCode so anpassbar, ähnlich oder sogar mehr noch als SciTE (je nach Bedarf natürlich), dass ich die Arbeit damit nicht missen wöllte. Insbesondere für den Fakt: "Ein Editor für (nahezu) alles" 😉 .
hi Oscar ,
auch dir Danke für dein Feedback 👍 . Also ich nutze die Extension von Damien "Autoit", welche seit über einem Jahr von @loganch (englisches Forum) weitergeführt und maintained wird.
damien-autoit-loganch.png
Diese hat vollständiges Syntax highlighting, IntelliSense und andere Spielereien (ansonsten wäre ich bei SciTE geblieben). Kann sein das du da noch etwas konfigurieren musst, doch soweit ich mich erinnere war das fast nix 😳 . AutoIt by 4ern ist nicht so gut bzw. wird nicht mehr gepflegt soweit ich weiß. Bitte nicht beide Extensions gleichzeitig aktiv haben, dass kann ggf. schon dein fehlendes Syntax highlighting erklären.Deine Snippetsammlung ist recht umfangreich, wenn auch manche Einzeiler überflüssig erscheinen (IMHO).
Da geb' ich dir absolut Recht 😁 , manches ist ziemlich alt und vielleicht sogar überflüssig. Manches davon nutze ich (und hoffentlich auch viele andere Leute) regelmäßig.
Die vielen Leerzeilen in den Funktionen finde ich persönlich eher zu viel, aber das ist auch Geschmackssache.
Ja Geschmackssache schon, aber nur bedingt. Ich bin durch .NET ziemlich auf Übersichtlichkeit, Lesbarkeit und andere Clean Code Askpekte getrimmt, daher sehen die Funktionen so aus.
Kann man die Snippets anpassen?
Wenn ich sie anpasse bzw. ein Contributer, wirkt sich dies auf alle die die Extension in VSCode eingebunden haben aus. Falls deine Frage darauf abzielt?
Ansonsten steht es dir natürlich frei, nachdem du die jeweilige Funktion bei dir verwendest/eingefügt hast, diese von Leerzeilen zu befreien 😂 .Viele Grüße
Sven
-
Hi Leute,
kleiner push zu diesem Thema 😅 .
Gibt es Meinungen, Pros und Contras, Wünsche, Ideen etc.? Freue mich wirklich über Feedback dazu (auch wenn dies evtl. negativ ausfällt).
Danke euch 🤞 .Viele Grüße
Sven
-
Hi Bitnugger ,
es bleibt jedem selbst überlassen wie viel Geduld und Hilfsbereitschaft er aufbringen möchte, auch wenn du von der Geduld deiner angesprochenen Leuten profitiert hast 😀 .
Schließlich funktioniert das Forum auf rein freiwilliger Basis.
Lasst uns bitte nicht zu sehr in philosophische bzw. auch erwartungsgetriebene Überlegungen abtrifften (ich ertappe mich gelegentlich selbst dabei 😊).
Fakt ist doch das man entweder casi4712 weiter hilft und unterstützt oder nicht. Ich für meinen Teil biete mit post #43 dazu nochmal meine Hilfestellung an, wenn auch evtl. die Letzte dazu.Viele Grüße
Sven
-
Hi casi4712,
also Chris, ich habe mir jetzt mal richtig viel Arbeit gemacht und hoffe das hilft dir auch für die Zukunft 🤞 .
Am Ende meiner gleich folgenden Ausführungen (Punkt 4) habe ich dir ein Beispiel bzgl. deiner Frage zur Aktualisierung eines Labels mit in den Code gepackt 😀 .
Okay, legen wir los:- Ich habe ein GitHub repository AutoIt-Forums-Help angelegt um an Hand deines Beispiels/Problems hier (immerhin sind wir bereits bei post #42) den Fortschritt deutlich zu machen.
01.png - Für dein Thema 87580-buttons-klickbar-machen gibt es dort einen Ordner in denen dein Skript liegt (benannt mit Main.au3) sowie die Abhängigkeiten (die Skripte die ich mir hier zusammengesucht habe bzw. die von den anderen teilweise zu Verfügung gestellt wurden).
02.png - In der Historie der Codeänderungen (der Commits) siehst du welche Schritte ich getan habe um dein Skript zu verbessern, etwas Struktur aufzubauen und vorhandene Fehler zu beseitigen.
03.png - Wenn du nun auf den Button gfgf klickst (Zeile 169, "$idButton_36") wird der Label-Text Service (Zeile 263, "$iServiceStatusLabel") durch den gefundenen Status der Funktion Request_Service() ersetzt.
04.png - Wichtig ist, dass du das Label welches du später noch bearbeiten willst mit einer globalen Variable außerhalb der Funktion _createLabels() vorher deklarierst (Zeile 85).
- Was ich alles nicht gemacht habe: Variablenbenennung angepasst, Abstraktion verbessert etc.
Nun liegt es an dir 😉 .
- Mein Vorschlag ist es, dass du ab jetzt diesen Code als Ansatzpunkt nimmst und deine folgenden Änderungen/Erweiterungen dort einarbeitest.- Dann kann jeder andere der dir hier helfen will die von mir aktualisierten Änderungen nutzen und hat hoffentlich 🤞 den gleichen Stand wie du zu Verfügung.
Was meinst du Chris? Okay?
📂 Download => Für die die sich das Repository nicht per "git clone" auschecken, hier der stehts aktuelle Download dazu 😎 .
Viele GrüßeSven
- Ich habe ein GitHub repository AutoIt-Forums-Help angelegt um an Hand deines Beispiels/Problems hier (immerhin sind wir bereits bei post #42) den Fortschritt deutlich zu machen.
-
Hi casi4712,
abgesehen davon, dass ich absolut hinter den Ausführungen und Empfehlungen von BugFix stehe, möchte ich dich nochmal bitten deinen aktuellen und vollständigen Code-Stand zu posten. Auch deine Abhängigkeiten, bspw. "Services.au3" oder "Service.au3", je nach dem was du nun verwendest.
Warum:
Damit wir besser helfen können. Ich möchte mir nicht immer erst deinen vermeintlichen Code-Stand zusammensuchen müssen 😉 . Respekt an Moombas an dieser Stelle, der dies offensichtlich tut 😁 .
Stelle bitte einfach alles bereit (die Abhängigkeiten einfach als Anhang) und dann bekommst du sicherlich noch mehr und zügige Hilfestellung. Danke.
Viele GrüßeSven
-
Hi casi4712, hi BugFix,
Direkter Austausch ist nicht ohne Weiteres machbar. Aber warum überhaupt Batch? Erledige doch alles in AutoIt.
Genau das hatte ich dich bereits im post #10 gefragt Chris.
pasted-from-clipboard.png
Desweiteren schreibst du:Aber ich findes es schon angsteinflößend, dass man zig Zeilen Code benötigt um einen Dienststatus abzufragen und in eine Variable zu stecken, ich fand am Anfang ja PS schon kompliziert. Gibt es da wirklich keine kürzeren Ansätze?
Die gibt es sehr wahrscheinlich, doch dazu solltest du dein Ziel erläutern.
Denn ansonsten sehe ich die Konversation hier als ping-pong in gefühlter Endlosschleife 🙁 .
Viele Grüße
Sven -
Hallo casi4712 (Chris),
ich darf mich Oscar anschließen und darauf hinweisen das dein ganzes Skript benötigt wird, um zügig zu helfen bzw. ggf. auch andere Fehler gleich mit aufzudecken.
Auch wenn du schreibst das du Foren durchsuchst (u.a. dieses hier) um nicht gleich fragen zu müssen und dir viel Mühe insgesamt machst, ist es wünschenswert wenn du mehr auf die Vorschläge der Helfenden hier eingehst.Zwei Beispiele:
1. Dein Syntaxfehler bzw. das Nachfragen danach (Post #19) bei Velted siehst du wenn du die beiden Versionen vergleichst (bestenfalls über ein "Diff") wie bspw.:
Oder du versuchst mehr auf die Consolenausgabe/den Output zu achten, dort wirst du auch darauf hingewiesen 🧐 .2. Bzgl. deines aktuellen Fehlers
ZitatError:Variable used without beeing declared
Ohne das gesamte Skript, kann man dazu nicht viel sagen. Es ist also notwendig das du das Skript postest und bestenfalls den Output (Consolenausgabe), denn dort wird ebenfalls per Zeilennummer darauf hingewiesen, um welche Variable es sich handelt.
Es liegt nahe, genau wie Moombas beschreibt, dass falls du den Code nicht diesbzgl. verändert hast, du auf den Variablenscope achten musst (siehe post #12, da dort folgendes hinzu kam und dort auch die fehlenden Scopes von mir definiert wurden):
pasted-from-clipboard.png
Dies bekommst du ebenfalls im Output gesagt - welche Stelle es betrifft.
Fazit:
Es soll dich nicht abschrecken weiter Fragen zu stellen, doch beschäftige dich bitte zunächst mit den Hilfestellungen die dir sowieso gegeben sind und wenn du dann nicht weiter kommst, poste die vollständigen Informationen, Danke.
Viele GrüßeSven
-
Hi Leute,
ich persönlich empfand es immer unsauber oder einfach unschön ganze UDFs in sein Skript oder Projekt einzubinden, in Fällen in denen man nur einzelne Funktionen daraus benötigt. Das beim kompilieren die *.exe entsprechend größer wird, ist heutzutage oft kein Problem mehr oder man stört sich daran einfach nicht mehr - ich hingegen schon irgendwie 😅 .
Daher habe ich mir früher aus den UDFs die einzelnen Funktionen in mein Skript übernommen, damit ich nicht die ganze UDF einbinden (#include) musste.
Je nach Lizenz, habe ich die Namensnennung der UDF Ersteller oder der Mitwirkenden in den Credits oder Ähnlichem festgehalten, damit es fair bleibt.
Dann kam die Veränderung:
Ich lernte Visual Studio Code (VSCode) beruflich kennen, erst für andere Sprachen, dann auch für AutoIt. Mit der schnell besser werdenden und heutzutage sehr mächtigen IntelliSense (code completion) von VSCode kam mir eine Idee.
Einfach und schnell:
Funktionen, welche ich oft brauche oder in irgendwelchen (eigenen) UDFs liegen habe, hinterlege ich in Snippet Dateien und kann diese schnell bei Bedarf in das jeweilige Skript oder Projekt einfügen. Wichtig ist mir aber, dass ich auf die Funktionen die in den Snippets liegen von überall zugreifen kann - an meinen privaten Rechner, auf Arbeit oder bei einem Kollegen/Freund. Daher erstellte ich eine VSCode Extension 😀 .
VSCode-AutoItSnippets:
Falls du deine AutoIt Projekte ebenfalls mit VSCode umsetzt, dann könnte dich meine AutoIt Snippets Extension dazu interessieren oder dir sogar helfen deine Projekte schneller umzusetzen.- Mich würde es sehr freuen wenn ihr einen Blick über das Projekt werfen könntet.
- Natürlich interessiert mich eure Meinung dazu sowie auch ob der Eine oder Andere seine Funktion(en) teilen möchte und ebenfalls in der Extension verewigt haben möchte 🧐 .
- Falls dies interessant für euch sein sollte, dann könnt ihr gerne
- per Pull Request eure Funktionen hinzufügen,
- oder sie einfach hier schreiben, damit ich sie in die Snippet Dateien aufnehmen kann,
- oder ihr schreibt mit eine private Nachricht oder Email.
- Ich bin gespannt ob das hilfreich für euch sein kann, denn immerhin gibt es bereits über 500 Installationen der Extension, was mich freut 😁 .
So sieht das in der Praxis/Verwendung dann aus:
https://github.com/Sven-Seyfert/V…ippets#featuresViele Grüße
Sven