ConsoleWrite abfragen

  • Guten Tag...

    Ich habe eine kleine Frage:

    Ich will eine ConsoleWrite in einer IF Abfrage starten, dieses geht aber garnicht..

    [autoit]

    if ConsoleWrite(Hallo) == "Hallo" then
    MsgBox( 0 , 2,"Du hast hallo gesagt")
    Else
    MsgBox( 0 ,2, "Du hast nichts gesagt")
    EndIf

    [/autoit]


    Es kommt immer, " Du hast nichts gesagt...."

    Aber wieso??

    Weiß jemand Rat??

    MFG TheBeatMaker

  • ConsoleWrite liefert als Rückgabewert die Anzahl der geschriebenen Zeichen zurück...
    Steht alles in der Hilfe. Einmal aufschlagen und dann weißt du woran es liegt.

    Spoiler anzeigen
    [autoit]

    ConsoleWrite(ConsoleWrite('Hallo') & @CRLF)
    ; Ausgabe: Hallo5 << Das zeigt das 5 Zeichen ausgegeben wurden

    [/autoit]

    Am besten liest du die Zeichen wieder aus der Console oder speicherst den zu schreibenden String vorher in eine Variable.
    Wenn du es direkt aus der Konsole lesen willst, musst du das Programm vorher als Konsolen Anwendung kompilieren.
    Zudem müssen die I/O-Streams entsprechend "aktiviert" werden. Siehe dazu in der Hilfe bei "Run" nach.

    Spoiler anzeigen
    [autoit]

    $iLast = ConsoleWrite('Hallo') ; ConsoleWrite() gibt die Anzahl der Zeichen zurück. Weil wir später
    ; die Zeichen nicht alle löschen wollen, lassen wir uns die Anzahl
    ; der geschriebenen Zeichen in eine Variable speichern. Wichtig ist
    ; zu wissen, das ConsoleWrite() in den STDOUT-Stream schreibt.
    $sRead = StdoutRead(@AutoItPID, True) ; Die Funktion StdoutRead() liest den STDOUT-Stream eines
    ; eines Prozesses aus. Der erste Parameter muss die PID des
    ; Prozesses sein. Den zweiten Parameter habe ich auf True
    ; gesetzt, damit die Zeichen nicht aus dem STDOUT-Stream
    ; entfernt werden.
    $sRead = StringRight($sRead, $iLast) ; Weil bei StdoutRead ALLE geschriebenen Daten ausgelesen
    ; werden, müssen wir die zuletzt geschriebenen Daten aus dem
    ; String auslesen. Dies tue ich durch StringRight.

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

    If $sRead == "Hallo" Then
    MsgBox(0, 2, "Du hast hallo gesagt")
    Else
    MsgBox(0, 2, "Du hast nichts gesagt")
    EndIf

    [/autoit]


    Ich hoffe ich konnte dir weiterhelfen.
    LG. Make

  • Klappt leider immer noch nicht...

    Ich verstehe nicht, was du mit "I/O-Streams" meinst...

    Ich habe schon in der Hilfe gelesen..

    Aber so richtig verstehe ich auch nicht, was die da meinen...
    Irgend etwas mit Child-Prozess, muss ich anstatt dem ConsoleWrite , dass StdinWrite setzten?
    Oder wie, ich versteh das nicht so ganz ....:(

  • Irgend etwas mit Child-Prozess, muss ich anstatt dem ConsoleWrite , dass StdinWrite setzten?


    Nein, du benutzt weiterhin ConsoleWrite. Und zum Auslesen benutzt du statt der Stream-Funktionen besser ConsoleRead, denn genau dafür gibt es diese Funktion schließlich.

    Spoiler anzeigen
  • Also, ich habe es so versucht:

    [autoit]

    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Change2CUI=y
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    $iLast = ConsoleWrite("Hallo") ; ConsoleWrite() gibt die Anzahl der Zeichen zurück. Weil wir später
    ; die Zeichen nicht alle löschen wollen, lassen wir uns die Anzahl
    ; der geschriebenen Zeichen in eine Variable speichern. Wichtig ist
    ; zu wissen, das ConsoleWrite() in den STDOUT-Stream schreibt.
    $sRead = StdoutRead(@AutoItPID, True) ; Die Funktion StdoutRead() liest den STDOUT-Stream eines
    ; eines Prozesses aus. Der erste Parameter muss die PID des
    ; Prozesses sein. Den zweiten Parameter habe ich auf True
    ; gesetzt, damit die Zeichen nicht aus dem STDOUT-Stream
    ; entfernt werden.
    $sRead = StringRight($sRead, $iLast) ; Weil bei StdoutRead ALLE geschriebenen Daten ausgelesen
    ; werden, müssen wir die zuletzt geschriebenen Daten aus dem
    ; String auslesen. Dies tue ich durch StringRight.


    Local $sOutput
    While True
    $sOutput &= ConsoleRead()
    Sleep(25)
    If @error Then ExitLoop
    WEnd
    MsgBox(4096, "", "Received: " & @CRLF & @CRLF & $sOutput )

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

    If $sOutput == "Hallo" Then
    MsgBox(0, 2, "Du hast hallo gesagt")
    Else
    MsgBox(0, 2, "Du hast nichts gesagt")
    EndIf

    [/autoit]


    Es kommt immer noch "Du hast nichts gesagt.."
    Die MsgBox sagt Nichts, dort steht nichts drinnen..