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

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

    • 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

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • 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]