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

Beiträge von seventh_son

  • Augabe auf SciTE-Konsole im Skript verarbeiten?

    • seventh_son
    • 28. Oktober 2015 um 17:45

    Das entsprechende Snippet des Skripts:


    AutoIt
    Global $iPID = Run(@ComSpec & " /c StartDirectUpdater.bat", "U:\Eigene Dateien\Tools\swUpdater", @SW_HIDE, $STDIN_CHILD)
    ;Wait for CMD to be opened
    WinWait("C:\Windows\system32\cmd.exe", "", 15)
    [....]


    StartDirectUpdater.bat enthält einen Haufen auskommentierte Zeilen in der Form

    rem java -jar DirectUpdaterViaContact.jar [...]

    sowie eine einkommentierte Zeile

    java -jar DirectUpdaterViaContact.jar [...}

    Die Ausgabe im SciTE sieht dann wie folgt aus:


    >"C:\Program Files (x86)\AutoIt3\SciTE\..\autoit3.exe" /ErrorStdOut "C:\Users\xxx\Documents\ReflashTest.au3"

    [...]
    U:\Eigene Dateien\Tools\swUpdater>rem java -jar DirectUpdaterViaContact.jar [...]

    U:\Eigene Dateien\Tools\swUpdater>rem java -jar DirectUpdaterViaContact.jar [...]

    U:\Eigene Dateien\Tools\swUpdater>rem java -jar DirectUpdaterViaContact.jar [...]

    U:\Eigene Dateien\Tools\swUpdater>java -jar DirectUpdaterViaContact.jar [...]


    Könnte es sein, dass SciTE hier nicht die Konsole, sondern den ErrorStream bekommt?

    Das Flag kannte ich nicht und habe es natürlich nicht gesetzt.

  • Augabe auf SciTE-Konsole im Skript verarbeiten?

    • seventh_son
    • 28. Oktober 2015 um 17:17
    Zitat von BugFix

    Viel zu kompliziert gedacht, geht ganz simpel:

    AutoIt
    $sOutput = ControlGetText('[CLASS:SciTEWindow]', '', '[CLASS:Scintilla; INSTANCE:2]')

    Das ist ja super schlank. Danke!

    Dennoch frage ich mich, wo jetzt der Unterschied zwischen ConsoleRead() und der Ausgabe in das Fenster ist. Liest ConsoleRead() vielleicht nur tatsächliche Tastendrücke ein, nicht aber Eingaben, die von einem anderen Cmd-Fenster-Prozess kommen?

  • Augabe auf SciTE-Konsole im Skript verarbeiten?

    • seventh_son
    • 28. Oktober 2015 um 16:58

    Hier noch der Code:

    Global $iPID = Run(@ComSpec & " /c StartDirectUpdater.bat", "U:\Eigene Dateien\Tools\swUpdater", @SW_HIDE, $STDIN_CHILD)
    ;Wait for CMD to be opened
    WinWait("C:\Windows\system32\cmd.exe", "", 15)
    Local $data
    While 1
    $data &= ConsoleRead()

    MsgBox(0, "Gefunden:", $data)
    WEnd


    Das gestartete batch-File schreibt automatisch einen Haufen Daten in die Ausgabe. Wie gesagt, Wenn ich das Skript im SciTE ausführe, sehe ich diese Daten im Konsolenfenster. Die MsgBoxen sind aber leer. Auch wenn das Skript als .exe gestartet wird.

  • Augabe auf SciTE-Konsole im Skript verarbeiten?

    • seventh_son
    • 28. Oktober 2015 um 16:27
    Zitat von BugFix

    Die SciTE-Konsole kann man mit Lua elegant auslesen. Ich teste nachher mal, ob sich das mit meinem LuaInline aus einem AutoItskript umsetzen läßt.

    Prima, danke.
    Kannst Du auch die Frage beantworten, warum das ReadConsole() in diesem Fall in's Leere läuft? Wenn ich das Skript kompiliere und außerhalb von SciTE laufen lasse, bekomme ich die sonst in die SciTE-Konsole ausgegebenen Daten ebenfalls nicht. Ich nehme an, dass die Ausgabe meines Child-Prozesses (batch file in Konsole) nicht mit ReadConsole() erreichbar ist und die Ausgabe im SciTE anders bezogen wird.

  • Augabe auf SciTE-Konsole im Skript verarbeiten?

    • seventh_son
    • 28. Oktober 2015 um 15:15

    Hallo,

    ich rufe in meinem Skript ein batch file über ein CMD-Window auf (versteckt). Die Ausgaben des Batch-Files erscheinen im Ausgabefenster von SciTE. Gibt es nun eine Möglichkeit, die Ausgabe auch im Skript zu verarbeiten? ConsoleRead() war hier mein erster Gedanke, aber wenn ich mit ConsoleRead() parallel zu der Ausgabe in der SciTE-Konsole arbeite und mir den Inhalt auf einer MsgBox ausgeben lassen möchte, ist kein Inhalt vorhanden.
    Liegt das daran, dass die SciTE-Konsole den Stream schon leert und somit eine Ausgabe im Skript nicht funktioniert?

    Gruß
    seventh_son

  • Logging der Ausgabe von verstecktem CMD-Window

    • seventh_son
    • 27. Oktober 2015 um 09:38

    Ich möchte den Stream ja nicht schließen. Aber wie im Edit schon geschrieben, ENTER lässt sich im Stream mit CRLF realieren und dann funktioniert mein Anwendungsfall auch.

  • Logging der Ausgabe von verstecktem CMD-Window

    • seventh_son
    • 27. Oktober 2015 um 08:20

    Danke. Mit StdinWrite hatte ich aber auch schon experimentiert, habe es aber nicht geschafft, dass die Kommandozeile an das COMD-Window weitergegeben wird:

    Local $iPID = Run(@ComSpec & " /c StartDirectUpdater.bat", "U:\Eigene Dateien\Tools\swUpdater", @SW_HIDE, $STDIN_CHILD)
    ;Wait for CMD to be opened
    $result = WinWait("C:\Windows\system32\cmd.exe", "", 15)
    Sleep(3000)
    StdinWrite($iPID, "sendhexfile filename" & "{ENTER}");
    MsgBox($MB_OK, "Result", $result);

    Liegt das vielleicht daran, dass mit StdinWrite keine ENTER-Taste übermittelt werden kann?

  • Logging der Ausgabe von verstecktem CMD-Window

    • seventh_son
    • 26. Oktober 2015 um 17:14

    Hallo,

    ich möchte in einem versteckten CMD-Window ein batch file ausführen (Update-Routine) und die Ausgabe des CMD-Fensters mitloggen. Soweit so gut, das Verstecken mit SW_HIDE hat geklappt, auch das Senden der Kommandozeilen-Eingabe per ControlSend funktioniert:

    Local $iPID = Run(@ComSpec & " /c StartDirectUpdater.bat", "U:\Eigene Dateien\Tools\swUpdater", @SW_HIDE)
    ;Wait for CMD to be opened
    $result = WinWait("C:\Windows\system32\cmd.exe", "", 15)
    Sleep(2000)
    ControlSend("C:\Windows\system32\cmd.exe", "", "", "sendhexfile filename" & "{ENTER}")
    MsgBox($MB_OK, "Result", $result);

    Wenn ich der Run-Funktion nun aber noch die Flags $STDERR_CHILD + $STDOUT_CHILD verpasse, die ich für das Logging in einer Datei ja benötige, scheint das ControlSend nicht mehr zu wirken. Das erkenne ich daran, dass bei meinem upzudatenden Client eben kein Update passiert.


    Als Anmerkung vielleicht noch: Das Sleep wird benötigt, weil das Batch File zunächst einige Ausgaben macht bevor es den Befehl interpretieren kann. Schickt man ihn zu früh, wird er u.U. nicht übernommen.


    Danke schonmal!

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™