Um eine Datei/ein Verzeichnis in "c:\Program Files" löschen zu können, benötigt das Script Admin-Rechte. Also #RequireAdmin an den Anfang des Scripts setzen!
Beiträge von Oscar
-
-
mir gelingt es einfach nicht das CMD Fenster mit ,@Hide zu unterdrücken, weiss jemand an welche Stelle es hier eingebaut werden muss?
Das @Hide gibt es gar nicht!
Du solltest mehr in die Hilfe sehen. ShellExecute(Wait) kennt @SW_HIDE als fünften Parameter.
Dementsprechend müsste das so aussehen:
AutoIt
Alles anzeigenSyncro() Func Syncro() $usbdb_dir = 'C:\windows\system32\robocopy.exe' $source = 'c:\plc' $destination = 'f:\plc1' $params = StringFormat('%s "%s" /E /Z /MIR /R:3 /W:5 /XD >nul 2>&1"%sRecycled\" "%sRecycler\" "%sSystem Volume Information\"', $source, $destination, $source, $source, $source) ConsoleWrite('$params = ' & $params & @CRLF) ConsoleWrite('ShellExecuteWait($usbdb_dir, $params, "", "", @SW_HIDE)' & @CRLF) ;~ ShellExecuteWait($usbdb_dir, $params, "", "", @SW_HIDE) EndFunc ;==>SyncroÜbergabeparameter sollte man mit Stringformat zusammensetzen. So kann man Fehler leichter erkennen.
-
Ich verwende auch die Erweiterung von Damien, zusammen mit Farbdesign "Tomorrow Night Blue".
Oh shit!
Das lag am Farbschema. Ich hatte "Dunkel (Visual Studio)" eingstellt gehabt.
Ich habe jetzt auf "Dunkel+ (dunkles Standarddesign)" umgestellt und da sieht das schon viel besser aus.

So nebenbei sieht das jetzt auch bei Nim viel besser aus.


Ja klar 😀 , einfach [F1] > ">snippets" > "Preferences: Configure User Snippets" > "AutoIt" auswählen und Snippet in JSON Syntax einfügen.
Danke!


-
Bitte nicht beide Extensions gleichzeitig aktiv haben, dass kann ggf. schon dein fehlendes Syntax highlighting erklären.
Ich habe jetzt schon die anderen komplett deinstalliert, aber trotzdem kein vollständiges Syntax highlighting.

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?
Meine Frage wäre jetzt eher, ob man eigene Snippets einbauen kann?
Aber ich werde für AutoIt wohl doch bei SciTE4AutoIt bleiben.
-
Gibt es Meinungen, Pros und Contras, Wünsche, Ideen etc.?
Ich benutze VSCodium bisher nur für Nim und habe mir jetzt mal die AutoIt-Erweiterung von "Damien" und von "4ern" installiert, aber keine von denen hat ein richtiges Syntaxhighlighting für AutoIt.
In Deinem Beispiel hast Du ein besseres. Welche Erweiterung ist das?
Deine Snippetsammlung ist recht umfangreich, wenn auch manche Einzeiler überflüssig erscheinen (IMHO). Da ist der Funktionsaufruf nur ein zusätzlicher Geschwindigkeitsnachteil.
Die vielen Leerzeilen in den Funktionen finde ich persönlich eher zu viel, aber das ist auch Geschmackssache.
Kann man die Snippets anpassen?
-
Noch ein Hinweis zum deklarieren plus initialisieren eines Arrays:
Wenn Du wie hier mehrere Keys zuweisen willst und noch nicht genau weißt, wie viele es werden, so darfst Du die Anzahl auch weglassen. Vorausgesetzt, dass Du das Array beim deklarieren auch gleich initialisierst:
AutoItGlobal $aAccelTable[][] = [ _ ["{F1}", $Help], _ ["^o", $FileOpenExcelFile], _ ["^c", $FileCreateExport], _ ["^x", $FileExit], _ ["^r", $ExportRawExport], _ ["^m", $ExportXMLExport] _ ]Der Interpreter weiß in dem Fall, wie groß das Array sein soll.
-
Oder gibt es eine Möglichkeit, die Zeile in ein übersichtliches Format zu bekommen? Wenn ich bis jetzt immer einen Zeilenumbruch, nach dem Komma hinter einer ] hat das AutoIt angemeckert.
Ja, die gibt es! Mit dem Unterstrich am Ende der Zeile kann man mehrere Zeilen zusammenfassen:
-
In diesem Beispiel geht es leider nicht, weder die Standart-GUI-Befehle (Alt+F für das File-Menü, usw.), noch die Punkte, die ich selbst definiert habe:
In so einem Fall sollte man erstmal prüfen, ob GUISetAccelerators auch korrekt ausgeführt wird. Laut Hilfe wird dann eine "1" zurückgegeben.
Bei Deinem Script ist das nicht der Fall. Warum ist das so?
Du hast ein Array mit 7 Elementen angelegt, aber nur 6 Elemente initialisiert. Also Fehler "0".
Wenn Du es so machst, dann funktioniert es:
AutoIt
Alles anzeigen#include <WindowsConstants.au3> #include <GUIConstantsEx.au3> #include <GuiRichEdit.au3> Global $iMsg Global $sTitle = "Hallo Welt" ; Programmfenster erstellen ; FrameGUI mit Menüzeile: Global Const $hGUI = GUICreate($sTitle & '-Exporter', 600, 420, Default, Default, Default, BitOR($WS_EX_COMPOSITED, $GUI_WS_EX_PARENTDRAG)) Global Const $FileMenu = GUICtrlCreateMenu("File") Global Const $FileOpenExcelFile = GUICtrlCreateMenuItem("Open Excel-File" & @TAB & "Ctrl+O", $FileMenu) Global Const $FileCreateExport = GUICtrlCreateMenuItem("Create Export" & @TAB & "Ctrl+C", $FileMenu) Global Const $FileExit = GUICtrlCreateMenuItem("Exit" & @TAB & "Ctrl+X", $FileMenu) Global Const $ExportMenu = GUICtrlCreateMenu("Export") Global Const $ExportRawExport = GUICtrlCreateMenuItem("Raw Export" & @TAB & "Ctrl+R", $ExportMenu) Global Const $ExportXMLExport = GUICtrlCreateMenuItem("XML Export" & @TAB & "Ctrl+M", $ExportMenu) Global Const $ShowMenu = GUICtrlCreateMenu("Show") Global Const $ShowHEEEINI = GUICtrlCreateMenuItem("HEEE.INI", $ShowMenu) Global $ShowHRAViewerINI = GUICtrlCreateMenuItem("hraviewer.ini", $ShowMenu) If Not IsAdmin() Then GUICtrlSetState($ShowHRAViewerINI, $GUI_DISABLE) Global Const $PropertiesMenu = GUICtrlCreateMenu("Properties") Global Const $HEEEProperties = GUICtrlCreateMenuItem("HEEE Properties", $PropertiesMenu) Global Const $HelpMenu = GUICtrlCreateMenu("Help") Global Const $Help = GUICtrlCreateMenuItem("Help", $HelpMenu) Global Const $About = GUICtrlCreateMenuItem("About", $HelpMenu) Global $aAccelTable[6][2] = [["{F1}", $Help], ["^o", $FileOpenExcelFile], ["^c", $FileCreateExport], ["^x", $FileExit], ["^r", $ExportRawExport], ["^m", $ExportXMLExport]] Global $ret = GUISetAccelerators($aAccelTable, $hGUI) ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $ret = ' & $ret & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console GUISetState(@SW_SHOW) ; Hauptfenster Global Const $hMainGUI = GUICreate("", 600, 400, 0, 0, BitOR($WS_POPUP, $WS_CHILD), $WS_EX_MDICHILD, $hGUI) Global $Label = GUICtrlCreateLabel("Hier könnte ihre Werbung stehen!", 10, 10, 250, 23) GUICtrlSetFont(-1, 12, 400, 0, "Calibri") Global $idStudieList = GUICtrlCreateList("", 10, 43, 250, 344) Global Const $idExcelFileBtn = GUICtrlCreateButton("Select Excel File", 265, 10) Global Const $idMainExportAllBtn = GUICtrlCreateButton("Export all", 515, 2, 75, 25) Global Const $idMainRAWExportBtn = GUICtrlCreateButton("Raw-Export", 270, 215, 75, 25) Global Const $idMainXMLExportBtn = GUICtrlCreateButton("XML-Export", 270, 250, 75, 25) Global Const $idCreateExport = GUICtrlCreateButton("Create Export", 270, 295, 75, 25) Global Const $idLoadStudy = GUICtrlCreateButton("Load Study", 270, 330, 75, 25) Global Const $idExitBtn = GUICtrlCreateButton("Exit", 270, 365, 75, 25) Global $idMsgBox = _GUICtrlRichEdit_Create($hMainGUI, "Messages and Errors", 355, 30, 235, 360, BitOR($ES_READONLY, $ES_MULTILINE)) GUISetState(@SW_SHOW) WinActivate($hGUI) While 1 $iMsg = GUIGetMsg() Switch $iMsg Case $GUI_EVENT_CLOSE, $idExitBtn, $FileExit ExitLoop Case $FileOpenExcelFile ConsoleWrite("File open Excel-File" & @CRLF) Case $FileCreateExport ConsoleWrite("File create Export" & @CRLF) Case $ExportRawExport ConsoleWrite("Export RAW-Export" & @CRLF) Case $ExportXMLExport ConsoleWrite("Export XML-Export" & @CRLF) Case $ShowHEEEINI ConsoleWrite("Show HEEE.INI" & @CRLF) Case $ShowHRAViewerINI ConsoleWrite("Show HRAViewer.INI" & @CRLF) Case $Help ConsoleWrite("Help Help" & @CRLF) Case $About ConsoleWrite("Help About" & @CRLF) EndSwitch WEnd ;~ GUIDelete($hMainGUI) -
Error:Variable used without beeing declared
Poste bitte Dein ganzes Script!
Mit diesen Ausschnitten kann man nicht helfen.
-
hat schon mal jemand das Problem gehhabt, dass Button nicht funktionieren, wenn ein Hintergrundbild eingebunden ist?
Ich zitiere mal aus der Hilfe:
Zitat
If a picture is set as a background picture the other controls will overlap, so it is important to disable the pic control: GUICtrlSetState(-1, $GUI_DISABLE). -
Unter Windows 10 wird das Flag $FSF_CREATEBUTTON mal locker ignoriert.
IMHO war das auch schon unter Windows 7 so. Steht doch auch in der Hilfe (XP only).
Könnt ihr das verifizieren?
Nö! Bei mir erscheint immer [Neuer Ordner] im Dialog.
-
Sollte man dafür ein Ticket erstellen?
Das scheint kein Bug in AutoIt zu sein!
Wenn ich das Programm "test neu.exe" von der Kommandozeile aus starte, wird ebenfalls die "test.exe" gestartet.
Hier wird also wohl "test" mit "neu.exe" als Parameter gestartet. Das scheint mir also ein Bug (Feature, haha) von Windows zu sein...
-
Ist das ein bekannter Fehler oder mache ich etwas falsch?
Das passiert bei mir auch!
Wenn man allerdings das Leerzeichen weglässt, passiert das nicht.

-
Gibt viele Wege.
Genau!
Hier noch einer:
-
Jedoch es stellt sich die Frage für einen konkreten Anwendungsfall für Assign.
Dem kann ich nur zustimmen!
Ich programmiere seit 15 Jahren mit AutoIt, aber in all den Jahren habe ich nie einen konkreten Anwendungsfall für Assign/Eval gefunden.
Ich hatte für mich mal einen Fall konstruiert, wo man dem Anwender eines Taschenrechners die Möglichkeit gibt, Variablen zu erstellen mit denen er dann rechnen kann.
Aber letztendlich kann man auch das anders lösen. Wenn also irgendwann Assign/Eval wegfallen würden, würde ich das vermutlich gar nicht bemerken.

-
Das hätte ich nach Lesen der Doku auch erwartet. Ich habe aber vorher schon Folgendes probiert:
Dein Beispiel ergibt bei mir:
warning: $yyy: possibly used before declaration und error: $yyy: undeclared global variable
Das funktioniert so also nicht!
-
Habe ich etwas falsch gemacht oder wie könnte es man anders erreichen?
Wenn Du Assign zum zuweisen benutzt, dann musst Du Eval zum auslesen benutzen.
Alles andere würde gar keinen Sinn ergeben.
Aber vermutlich liegt hier eher ein XY-Problem vor?!
-
Mit 2 kleinen Änderungen könnte man aber die RekursiveFunktion trozdem ohne Probleme benutzen,
indem man daraus eine bedingte Rekursion macht oder liege ich damit falsch?
Oh, natürlich!
Ich wollte damit nicht sagen, dass man rekursive Funktionen gar nicht benutzen soll/darf.
Ganz im Gegenteil, habe ich schon oft rekursive Funktionen eingesetzt, um z.B. Verzeichnisse (inkl. Unterverzeichnisse) in einem Dateisystem zu scannen.
Mir ging es nur darum, dass man die max. Rekursionstiefe im Auge behalten muss, z.B. indem man entsprechende Abbruchbedingungen festlegt.
BTW: Beim scannen in Dateisystemen ist die Abbruchbedingung schon durch die maximale Verzeichnistiefe gegeben.
Bei der hier gestellten Frage wurde aber der Funktionsaufruf als GoTo missbraucht, was zu einer (unwissentlichen/ungewollten) Rekursion geführt hat.
-
Um Dir mal zu demonstrieren, dass man mit rekursiven Funktionsaufrufen vorsichtig sein sollte, hier ein Testprogramm:
AutoIt_RekursiveFunktion(0) Func _RekursiveFunktion($test) $test += 1 ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $test = ' & $test & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console _RekursiveFunktion($test) EndFuncNach 3799 Funktionsaufrufen ist die max. Rekursionstiefe erreicht und AutoIt beendet das Script mit:
Recursion level has been exceeded - AutoIt will quit to prevent stack overflow.
-
Könntest du mir bitte hierzu noch etwas mehr Info geben "... Funktionsaufruf als GoTo missbraucht, was zu einem rekursiven Funktionsaufruf führt (mit den entsprechenden Problemen)." - damit ich das Problem verstehen kann? Und wieso sich bei meinem Ansatz in dem Szenario Fall 2 immer die 0 "reingemogelt" hatte.
Wenn Du innerhalb einer Funktion die gleiche Funktion nochmal aufrufst, dann handelt es sich um einen rekursiven Aufruf. Die Rückgabe der Funktion wird nicht an das "Hauptprogramm" zurückgegeben, sondern an die Funktion.
So etwas brauchst Du hier gar nicht. Du willst einfach nur eine Schleife.