Weshalb ein leeres Fenster davor ?

  • Hallo zusammen,
    Möchte die Ausgabe einer Dos Anwendung abfangen, habe hier ein Skript das schon in die richtige richtung rennt dennoch
    ist mir nicht klar weshalb es davor ein leeres Fenster ausgibt und erst im nachhinein den gewünschten wert meldet.

    Die Anwendung "Date.exe" habe ich nur benützt weil er auf jedem M$ auffindbar ist.

    Spoiler anzeigen
    [autoit]

    #include<Constants.au3>
    $foo=Run(@ComSpec & " /c " & 'date /t', "", @SW_HIDE,$STDOUT_CHILD)
    While 1
    $line=StdoutRead($foo)
    If @error Then ExitLoop
    MsgBox(0,"date:",$line)
    Wend

    [/autoit]
  • Dein Script ist schneller als die Dos-Box ;)

    setz einfach einen kleinen sleep dazwischen...

    Spoiler anzeigen
    [autoit]

    #include<Constants.au3>
    $foo=Run(@ComSpec & " /c " & 'date /t', "", @SW_HIDE,$STDOUT_CHILD)
    While 1
    sleep(100)
    $line=StdoutRead($foo)
    If @error Then ExitLoop
    MsgBox(0,"date:",$line)
    Wend

    [/autoit]

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    über mich...

    ich habe meine Erfahrungen hauptsächlich gesammelt in (grobe Übersicht):

    - RibbonBar Automation
    - MySQL Nutzung
    - GUIs in vielerlei Ausprägung
    - Nutzung von Powershell / Batch in AutoIt
    - Windows Automatisierung

    außerhalb von AutoIt:

    - Sprachen: PS, Batch, php, html(5), javascript, (perl eingeschränkt), vbs
    - Powershell (AD, WPF inkl. Multi-Threading, ...)
    - Deployment-Automatisierung ohne SCCM
    - Office-Nutzung mit COM-Object (AutoIt, PowerShell)
    - ActiveDirectory und alles was damit zusammenhängt
    - Hyper-V Clustering (Converged / Hyper Converged)
    - Serverhardware (Konfiguration, Aufbau, Architektur, Betrieb)

    Lieblingsthema:

    günstige Automatisierung von Vorgängen, für die andere Firmen viel Geld nehmen

    more to come ...

    • Offizieller Beitrag
    [autoit]

    MsgBox(64, 'Datum', _getDOSOutput('date /t'))

    [/autoit][autoit][/autoit][autoit]

    Func _getDOSOutput($command)
    Local $text = '', $Pid = Run('"' & @ComSpec & '" /c ' & $command, '', @SW_HIDE, 2 + 4)
    While 1
    $text &= StdoutRead($Pid, False, False)
    If @error Then ExitLoop
    Sleep(10)
    WEnd
    Return $text
    EndFunc ;==>_getDOSOutput

    [/autoit]

    Mega

  • der minimum sleep ist 10 auch wenn du sleep(0) anwendest.
    Ich wollte nur sichergehen, dass das auch auf etwas langsameren Kisten funktioniert.

    Natürlich ist die Methode von Xeno die bessere.
    Ich hab nur verdeutlichen wollen, wo der Fehler liegt...

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    über mich...

    ich habe meine Erfahrungen hauptsächlich gesammelt in (grobe Übersicht):

    - RibbonBar Automation
    - MySQL Nutzung
    - GUIs in vielerlei Ausprägung
    - Nutzung von Powershell / Batch in AutoIt
    - Windows Automatisierung

    außerhalb von AutoIt:

    - Sprachen: PS, Batch, php, html(5), javascript, (perl eingeschränkt), vbs
    - Powershell (AD, WPF inkl. Multi-Threading, ...)
    - Deployment-Automatisierung ohne SCCM
    - Office-Nutzung mit COM-Object (AutoIt, PowerShell)
    - ActiveDirectory und alles was damit zusammenhängt
    - Hyper-V Clustering (Converged / Hyper Converged)
    - Serverhardware (Konfiguration, Aufbau, Architektur, Betrieb)

    Lieblingsthema:

    günstige Automatisierung von Vorgängen, für die andere Firmen viel Geld nehmen

    more to come ...

  • Danke euch vielmals !,
    habe gesehen wo mein Fehler war, wollte dennoch Xenos Version in mein bestehendes Script implemetieren aber bekomme immer den Fehler "Func - EndFunc" eigentlich Schad. mhm

  • Hi,
    dann ist das ein Syntaxfehler. Das Script von Xeno so wie es ist funktioniert ja. Um den Fehler zu beheben musst du schon dein ganzes Script Zeigen.

    PS.
    Wenn du wirklich nur das Datum willst, kannst du auch das nehmen:

    [autoit]

    #include <Date.au3>
    MsgBox(0, "", _NowDate())

    [/autoit][autoit][/autoit][autoit]

    ; oder

    [/autoit][autoit][/autoit][autoit]

    MsgBox(0, "", @MDAY & "." & @MON & "." & @YEAR)

    [/autoit]