Visual Studio Code & AutoIt

  • Hallo,

    ich habe gestern meine Entwicklungsumgebung von ISN AutoIt Studio auf Visual Studio Code umgestellt weil seit Version 1.09 des ISN AutoIt Studios bei mir das FormStudio nicht mehr funktioniert.
    Dazu muss ich sagen das ich die ISN Entwicklungsumgebung seit ca. 4 jahren bei uns in der Firma genutzt habe, aber seit Version 1.09 löscht unser Virentool (McAfee) Dateien aus dem ISN bzw. steckt sie in Quarantäne so das ich FormStudio nicht mehr nutzen kann.
    Deswegen habe ich gestern mal auf Visual Studio Code umgestellt und muss sagen das es wirklich gut funktioniert. Mann muss zwar wieder Koda als GUI Design Tool benutzen, aber das geht auch sehr gut.
    Hat schon jemand anderes mit Visual Studio Code & AutoIt Erfahrung sammeln können? Würde mich interessieren wie es euch gefällt.

    • Offizieller Beitrag

    VSCode hat einen enormen Nachteil: Man kann nicht sauber in die Konsole debuggen!

    Bsp.-Code:

    C++
    ConsoleWrite('Let''s go!' & @LF)
    For $i = 1 To 10 Step +1
      ConsoleWrite($i & @LF)
      Sleep(500)
    Next
    ConsoleWrite('Done!' & @LF)

    Output VSCode (falsch) - Ausgabe auch nicht während des Programmablaufs, sondern erst nach Beendigung:

    Let's go!
    1

    Output SciTE (richtig) - Ausgabe kontinuierlich bei jedem ConsoleWrite-Befehl:

    Let's go!

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    Done!


    Um VSCode sinnvoll nutzen zu können, muss noch viel dran geschraubt werden (die Konsolenausgabe kann sicher auch realisiert werden). Ich hatte mal angefangen mein eigenes Package für AutoIt zu erstellen. Aber es war dann einfach zu viel, was mir fehlt (umfangreiche Events, wie in SciTE, auf die ich reagieren kann) - da habe ich es gelassen (und auch, weil ich mich mit JS nicht wirklich anfreunden kann :whistling:).

  • Hallo BugFix,

    Zitat: Output VSCode (falsch) - Ausgabe auch nicht während des Programmablaufs, sondern erst nach Beendigung

    dem muss ich leider widersprechen. Die Ausgabe deines kleinen Bespielprogramms funktioniert bei mir einwandfrei zur Laufzeit.

  • Ansich finde ich VSCode ne ziemlich feine Sache, aber was mich extrem ankotzt ist dieses zwanghafte Reinpressen von Webentwicklung in Desktopumgebungen.

    Wieso muss es denn unbedingt Electron sein? Gibt es denn im Desktopbereich kein vernünftiges Framework (WPF/.NET Core) um sowas zu realisieren? Wäre sogar um einiges sparsamer mit den Ressourcen.

    Die Settings in json-Form sind auch ziemlich gewöhnungsbedürftig und das Teil hat eine sehr steile Lernkurve.

    Für mich nichts ganzes, und nichts halbes, deshalb nutze ich es persönlich nicht.

    Für meine C# Projekte nutz ich Visual Studio 2019, und für AutoIt nach wie vor SciTE.

    Ich hab mich versucht da irgendwie reinzufuchsen, aber es wollte irgendwie nicht.

  • Habe auch VSC installiert und das Beispiel tut bei mir auch was es soll.

    Üblicherweise habe ich VSC aber für Go und C++ in Verwendung, Für AutoIt gibts ja ISN (was für die Sprache zugeschnitten wurde), oder Scite, wenn man etwas mehr als Notepad, aber nicht "viel" mehr will :D

    M

    • Offizieller Beitrag

    Ich habe mal nachgeschaut, inzwischen gibt es eine AutoIt-Erweiterung von Damien, die soweit gut funktioniert.

    Was mir nach wie vor nicht gefällt: Die Debug-Ausgabe funktioniert nicht mit Array-Variablen und die Variablen müssen mindestens 2 Zeichen lang sein (nach dem $) um erkannt zu werden.
    Vermutlich kann man zur Erkennung eine eigene Funktion schreiben (wie ich es für SciTE gemacht habe) - aber wie gesagt: JS ist echt nicht mein Ding.

  • Hallo BugFix,

    ich weiss nicht ob ich deinen Post richtig verstanden habe, aber bei mir funktioniert die Ausgabe von Array Variablen auch. Anbei mal der Beispielcode.

    Falls du etwas anderes meintest, würde ich mich über eine Erkärung freuen.

    Code
    Local $v = [1, 2, 3] ; An Array
    For $x= 0 to UBound($v)-1
      ConsoleWrite("$vVar = " & $v[$x] & @CRLF)
    Next
    ConsoleWrite('Let''s go!' & @LF)
    For $i = 1 To 10 Step +1
      ConsoleWrite($i & @LF)
      Sleep(500)
    Next
    ConsoleWrite('Done!' & @LF)

    Die Konsolenausgabe in VSCode sieht folgendermassen aus:

    +>08:40:29 Starting AutoIt3Wrapper (19.1127.1402.0} from:Code.exe (0.0.0.0) Keyboard:00000407 OS:WIN_7/Service Pack 1 CPU:X64 OS:X64 Environment(Language:0407)
    >Running AU3Check (3.3.14.5) from:c:\Program Files (x86)\AutoIt3 input:c:\Program Files (x86)\AutoIt3\Projects\Visteon\MFA2 Version Compare\ConsoleTest.au3
    +>08:40:29 AU3Check ended.rc:0
    >Running:(3.3.14.5):c:\Program Files (x86)\AutoIt3\autoit3.exe "c:\Program Files (x86)\AutoIt3\Projects\Visteon\MFA2 Version Compare\ConsoleTest.au3" /errorstdout
    +>Setting Hotkeys...--> Press Ctrl+Alt+Break to Restart or Ctrl+BREAK to Stop.
    $v = 1
    $v = 2
    $v = 3
    Let's go!
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Done!
    +>08:40:34 AutoIt3.exe ended.rc:0
    +>08:40:34 AutoIt3Wrapper Finished.
    Process exited with code 0



    • Offizieller Beitrag

    ich weiss nicht ob ich deinen Post richtig verstanden habe, aber bei mir funktioniert die Ausgabe von Array Variablen auch.

    Hast du leider missverstanden.

    Es geht um das Setzen des Cursors in die Variable und das Einfügen einer Debugzeile für diese Variable.

    Bsp.

    C++
    ; Pipe ist die Cursorposition
    For $i = 0 To UBound($aTest) -1
        $a|Test[$i] = $aTest[$i] *2
    Next

    Wenn ich jetzt den Shortcut für DebugToConsole ausführe sieht das bei VSCode so aus:

    C++
    For $i = 0 To UBound($aTest) -1
        $aTest[$i] = $aTest[$i] *2
        ;### Debug CONSOLE ↓↓↓
        ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $aTest = ' & $aTest & @CRLF & '>Error code: ' & @error & @CRLF)
    Next

    Das ist natürlich falsch. Ich will ja den Wert des Arrays am Index $i ausgeben.

    Für SciTE habe ich diese Funktion umgeschrieben und bekomme für DebugToConsole folgenden Output:

    C++
    For $i = 0 To UBound($aTest) -1
        $aTest[$i] = $aTest[$i] *2
    ConsoleWrite("@@_Debug_line" & @TAB & @TAB & @ScriptLineNumber & "   var: $aTest[" & $i & "] --> " & $aTest[$i] & @LF)
    Next
    
    ; ich habe 3 Debugvarianten:
    ; - nur Wert (wie oben)
    ; - Wert & @error (ConsoleWrite("@@_Debug_line" & @TAB & @TAB & @ScriptLineNumber & "   var: $aTest[" & $i & "] --> " & $aTest[$i] & @LF & "!@ " & @TAB & "#Error: " & @error & @LF))
    ; - Wert & @error & @extended (ConsoleWrite("@@_Debug_line" & @TAB & @TAB & @ScriptLineNumber & "   var: $aTest[" & $i & "] --> " & $aTest[$i] & @LF & "!@ " & @TAB & "#Error: " & @error & @TAB & "#Extended: " & @extended & @LF)) 

    Meine Debugversion erfasst auch den Schleifenzähler allein ( also Cursor in $|i und dann Debugaufruf). Da wirft VSC einen Fehler.