Konsole und Dilaog



  • Hi,

    ich benutze ein Gerät über einen Dialog. Das Gerät schreibt auf den Stdio
    Nachrichten raus. Damit ich die mitlesen kann muss mein Prozess vor dem laden des
    Gerätes eine Konsole öffnen zb. AllocConsole. Problem das Teil ist immer für einen Moment Sichtbar,ich rufe im Anschluss SW_HIDE an.

    Nun kann man einen Konsoleprozess erzeugen, leider ist der dann nicht mehr
    mit dem Gerät gekoppelt das ich verwende (Cameramessages)

    STARTUPINFO startupInfo;
       PROCESS_INFORMATION processInfo;
       ::ZeroMemory(&startupInfo, sizeof(startupInfo));
       startupInfo.cb = sizeof(startupInfo);
       startupInfo.dwFlags = STARTF_USESHOWWINDOW;
       //startupInfo.wShowWindow = SW_HIDE;
       startupInfo.wShowWindow = SW_SHOW;
       if (CreateProcess(NULL, "c:\\windows\\system32\\cmd.exe", NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &startupInfo, &processInfo))
    	   ;
       AttachConsole(processInfo.dwProcessId);//GetCurrentProcessId()
    
       //AllocConsole();ShowWindow(::GetConsoleWindow(), SW_HIDE);
       freopen("CONOUT$", "wb", stdout), freopen("CONIN$", "rb", stdin);
    

    Wie könnte man denn nun eine Hidden Konsole korrekt an den Prozess binden so das stdio darauf wirkt ?

    Danke für Hinweise.

    Achja und warum bekomme ich mit GetConsoleWindow nicht das Fensterhandel wenn
    ich das über CreateProzess starte, den handel brauche ich später um diese Konsole per Menu erscheinen zu lassen.

    Danke für Hinweise.
    Grüße Karsten


  • Mod



  • Das von Martin Richter gepostete Beispiel habe ich vor einiger Zeit auch einmal probiert. Das Problem war, wenn ich mich recht erinnere, dass der entsprechende Thread an ReadFile festhing, auch wenn die Konsolenapp schon längst geschlossen war. Keine Ahnung, ob ich vorher etwas falsch gemacht habe, aber die Lösung war schlussendlich, mit PeekNamedPipe vorher zu schauen, ob überhaupt etwas zu holen ist und das Prozesshandle von CreateProcess (PROCESS_INFORMATION::hProcess) zu speichern und nicht zu schließen:

    // Edit: Ich sehe gerade, es gibt wohl noch ein paar Probleme mit dem Code...
    


  • Hallo danke das ist ja dann nochmal eine andere Weise, bezüglich Write/ReadFile

    thx..

    Auch ärgerlich warum einige Programme auf die Konsole streamen anstatt
    den DebugChannel Print zu verwenden....


  • Mod

    Achromat schrieb:

    Auch ärgerlich warum einige Programme auf die Konsole streamen anstatt
    den DebugChannel Print zu verwenden....

    Sehe ich nicht als Problem. Man kann die ja auch umleiten...
    Oft genug haben die Programme auch Optionen mit denen sich ihr Verhalten anpassen lässt.



  • Ach es gibt schon genug Probleme, eine multiple Anwendung , die von verschiedenen RT Anrufern geöffnet wird zu beenden.

    *Was für ein Zirkus da ausbrechen kann..
    *

    Da ist man froh, wenn nicht all zu viele weitere Prozesse und Signale sich hinzu fingern.

    Ich habe seit 1986 einen Klotz mit mehr als 1 Millionen hand -maked Zeilen an der Backe..

    Ende nicht in Sicht. "Jeden Tag werden es 3 Zeilen mehr" <- Was tut der gute Programmierer ? (Er erstellt drei Zeilen Code/tag ..

    Hmm aber 365 * 32 = 11680 .. nichts stimmt wirklich 🙂


Anmelden zum Antworten