Fremde Konsole auslesen



  • Wie kann ich ein Konsolenprogramm per PID finden und dessen Ausgabe Zeilenweise auslesen? Kann ich das mit ReadConsole machen? Oder gibt es einen anderen Weg?



  • Ich würde das mit FindWindow und dann mit ReadConsole machen ja.

    Denke mal, dass das das sinnvollste ist.



  • drakon schrieb:

    Ich würde das mit FindWindow und dann mit ReadConsole machen ja.

    Denke mal, dass das das sinnvollste ist.

    Wenn ich jetzt aber mehrere Konsolen mit dem gleichen Titel habe wirds schwer mit FindWindow und die PID kenn ich ja.

    Und wie genau funktioniert ReadConsole? Ich werd durch msdn einfach nicht schlau.



  • Du übergibst da einfach ein Handle auf die Instanz, einen Zeiger auf einen Buffer, gibst an, wie viele Zeichen gelesen werden sollen und dann erhälst du einen Rückgabewert, sowie die Anzahl wirklich gelesenen Zeichen.

    Spiel da am besten ein wenig rum, dann sollte das klappen.

    Wenn du die Position ändern willst, dann wäre da SetConsoleCursorPosition wahrscheinlich die beste Anlaufstelle.



  • drakon schrieb:

    Du übergibst da einfach ein Handle auf die Instanz, einen Zeiger auf einen Buffer, gibst an, wie viele Zeichen gelesen werden sollen

    Wie denn genau?

    BOOL WINAPI ReadConsole(
      __in      HANDLE hConsoleInput,
      __out     LPVOID lpBuffer,
      __in      DWORD nNumberOfCharsToRead,
      __out     LPDWORD lpNumberOfCharsRead,
      __in_opt  LPVOID pInputControl
    );
    

    Ich versteh da die argumente nicht ganz. Ich will eigentlich nur die letzte Zeile einer fremden Konsole auslesen und diese per if überprüfen. Zeichen sollte wenn möglich nicht begrenzt sein. Wie also muss ich das jezt machen?

    char *buff[1024];
    ReadConsole(FindWindow("cmd.exe", 0), buff, 1024, 1024, 0);
    

    So?



  • Ja. In etwa so. Allerdings musst du, wenn du die letzte Zeile auslesen willst wie ich schon gesagt habe die Position des Cursors verändern. (Also auf die gewünschte Zeile legen).



  • Mal die alte Frage nach dem Grund...
    Gehts hier nur darum von einem selbst gestarteten Prozess den Output zu erhalten?
    Dann würde popen() sich da besser eignen...
    rya.



  • Wenn ich die MSDN richtig verstehe, eignet sich ReadConsole nur dazu, den Input Buffer zu lesen. Für bereits auf die Konsole ausgegebenen Text müsstest Du ReadConsoleOutputCharacter benutzen.


Log in to reply