1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. Oscar

Beiträge von Oscar

  • Folder mit Leerzeichen löschen

    • Oscar
    • 1. Februar 2022 um 13:57

    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!

  • ShelExecution und @HIDE

    • Oscar
    • 29. Januar 2022 um 18:56
    Zitat von casi4712

    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
    Syncro()
    
    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
    Alles anzeigen

    Übergabeparameter sollte man mit Stringformat zusammensetzen. So kann man Fehler leichter erkennen.

  • Include UDFs versus Snippets einfügen (VSCode-AutoItSnippets)

    • Oscar
    • 26. Januar 2022 um 18:47
    Zitat von BugFix

    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. :klatschen:

    So nebenbei sieht das jetzt auch bei Nim viel besser aus. 8):thumbup:

    Zitat von SOLVE-SMART

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

    Danke! :):thumbup:

  • Include UDFs versus Snippets einfügen (VSCode-AutoItSnippets)

    • Oscar
    • 26. Januar 2022 um 16:34
    Zitat von SOLVE-SMART

    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. :/

    Zitat von SOLVE-SMART

    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.

  • Include UDFs versus Snippets einfügen (VSCode-AutoItSnippets)

    • Oscar
    • 26. Januar 2022 um 15:30
    Zitat von SOLVE-SMART

    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?

  • GUISetAccelerators ohne Wirkung

    • Oscar
    • 26. Januar 2022 um 11:11

    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:

    AutoIt
    Global $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.

  • GUISetAccelerators ohne Wirkung

    • Oscar
    • 26. Januar 2022 um 11:01
    Zitat von JBO

    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:

    AutoIt
    Global $aAccelTable[6][2] = [ _
            ["{F1}", $Help], _
            ["^o", $FileOpenExcelFile], _
            ["^c", $FileCreateExport], _
            ["^x", $FileExit], _
            ["^r", $ExportRawExport], _
            ["^m", $ExportXMLExport] _
            ]
  • GUISetAccelerators ohne Wirkung

    • Oscar
    • 25. Januar 2022 um 17:13
    Zitat von JBO

    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
    #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)
    Alles anzeigen
  • Buttons klickbar machen

    • Oscar
    • 24. Januar 2022 um 05:13
    Zitat von casi4712

    Error:Variable used without beeing declared

    Poste bitte Dein ganzes Script!

    Mit diesen Ausschnitten kann man nicht helfen.

  • Buttons klickbar machen

    • Oscar
    • 22. Januar 2022 um 16:00
    Zitat von casi4712

    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).

  • Windows 10 - FileSelectFolder - Flag Create ohne Wirkung

    • Oscar
    • 19. Januar 2022 um 17:00
    Zitat von BugFix

    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).

    Zitat von BugFix

    Könnt ihr das verifizieren?

    Nö! Bei mir erscheint immer [Neuer Ordner] im Dialog.

  • RUN startet Datei mit Teilnamen des gewünschten Dateinamens

    • Oscar
    • 17. Januar 2022 um 05:06
    Zitat von Andy

    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...

  • RUN startet Datei mit Teilnamen des gewünschten Dateinamens

    • Oscar
    • 16. Januar 2022 um 17:52
    Zitat von Andy

    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. :/

  • Ordnernamen in Variable schicken

    • Oscar
    • 15. Januar 2022 um 14:33
    Zitat von BugFix

    Gibt viele Wege.

    Genau!

    Hier noch einer:

    AutoIt
    #include <WinAPIShPath.au3>
    
    $sPath = 'c:\Program Files (x86)\AutoIt3\Include\'
    ConsoleWrite(_WinAPI_PathStripPath($sPath) & @CRLF)
  • Funktion Assign

    • Oscar
    • 11. Januar 2022 um 14:36
    Zitat von AspirinJunkie

    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. :rofl:

  • Funktion Assign

    • Oscar
    • 10. Januar 2022 um 17:22
    Zitat von Velted

    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!

  • Funktion Assign

    • Oscar
    • 10. Januar 2022 um 16:59
    Zitat von DOheim

    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?!

  • Seltsames Verhalten mit Return

    • Oscar
    • 10. Januar 2022 um 15:55
    Zitat von Tuxedo

    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.

  • Seltsames Verhalten mit Return

    • Oscar
    • 10. Januar 2022 um 05:12

    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)
    EndFunc

    Nach 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.

  • Seltsames Verhalten mit Return

    • Oscar
    • 9. Januar 2022 um 19:00
    Zitat von Purzel Hägar

    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.

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™