Umleiten von stdout an ein edit-control (Win32)
Habe ich eine einfache Win32-GUI-app, die hat ein edit-Steuerelement in das Hauptfenster. Wenn ich Schreibe:
printf("Hello world!\n");
Ich würde gerne den text in das Steuerelement anstelle der Konsole. Wie?
Update: Die app ist nur ein einfaches Fenster mit edit-Steuerelement, und ich kann es kompilieren mit oder ohne Anzeige der Konsole (gcc -mwindows). Manchmal habe ich eine externe Funktion aufrufen, die möglicherweise printf() etwas - und ich fangen möchte, dass etwas und zeigen Sie Sie in das edit-Steuerelement. So weit, SetStdHandle() zu sein scheint, am nächsten an das, was ich versuche zu erreichen, aber ich kann nicht damit es funktioniert, aber...
Update 2:
Bitte, kann mir jemand sagen warum das nicht funktioniert und wie man es beheben?
HANDLE hRead, hWrite;
CreatePipe(&hRead, &hWrite, NULL, 0);
SetStdHandle(STD_OUTPUT_HANDLE, hWrite);
printf("Hello world!\n");
CloseHandle(hWrite); //Why is this needed?
DWORD dwRead;
BOOL bSuccess;
CHAR chBuf[4096];
bSuccess = ReadFile(hRead, chBuf, 4096, &dwRead, NULL); //This reads nothing :(
Auch, das es noch gibt "Hello world" auf der Konsole, ich erwartet, dass es nicht zu..?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Check-out der API-Aufruf SetStdHandle. Sobald das stdout wird umgeleitet auf Ihren stream, Lesen Sie es und senden Sie den text-edit-control.
[Bearbeiten]
Einen Einblick in die Verwendung dup2. Der folgende code scheint zu funktionieren.
_read
? Ich denke da an so etwas wie_dup2(editControlFileDescriptor, 1)
. Was ich will, ist laufen eine app, erstellen Sie ein Formular mit einem Textfeld-Steuerelement, und leiten Sie die app stdout, um den edit-Steuerelement. Auf diese Weise, die Sie zeigen, würde ich einen thread, der in regelmäßigen Abständen macht dieread
und gibt Sie an das edit-Steuerelement.Können Sie tun, dass in Windows umleiten stdout, wenn Sie erstellen den Prozess. Tun Sie dies durch setzen von flags und festlegen von ein paar Griffe in die STARTUPINFO - Struktur übergeben CreateProcess. Sehen dieses Beispiel auf der MSDN-Website für Details, wie dies einzurichten.
Sobald Sie den setup ReadFile Lesen von der umgeleiteten stdout der Konsole verarbeiten, dann senden Sie es an das edit-Steuerelement.
Schreiben Sie eine interne __printf-Funktion kann die Ausgabe der text-edit-control, dann ersetzen Sie alle printf-Funktionen mit, die.