?
Hi !
So kannst Du Dir die Ausgabe eines Konsolenprogramms in Deine GUI-Anwendung anzeigen lassen:
#define BUFFSIZE 4096
char cPipeResult[BUFFSIZE];
memset(cPipeResult,0,BUFFSIZE);
DWORD dwBytes =0;
PROCESS_INFORMATION PROCCINFO;
LPSECURITY_ATTRIBUTES lpPipeAttributes = NULL;
HANDLE hReadPipe;
HANDLE hWritePipe;
SECURITY_ATTRIBUTES SecAttribs;
SecAttribs.lpSecurityDescriptor = NULL;
SecAttribs.bInheritHandle = TRUE;
SecAttribs.nLength = sizeof(SecAttribs);
if( ! CreatePipe( &hReadPipe, &hWritePipe, &SecAttribs, 0))
{
AfxMessageBox("Konnte Pipe nicht erstellen");
}
else // Ok Prozess vorbereiten
{
STARTUPINFO INFO;
INFO.cb=sizeof(STARTUPINFO);
INFO.lpReserved=NULL;
INFO.lpDesktop= NULL;
INFO.lpTitle=NULL;
INFO.dwX=0;
INFO.dwY=0;
INFO.dwXSize=100;
INFO.dwYSize=100;
INFO.dwXCountChars=0;
INFO.dwYCountChars=0;
INFO.dwFillAttribute=NULL;
INFO.dwFlags=STARTF_USESTDHANDLES|STARTF_USESHOWWINDOW|STARTF_USEPOSITION;
INFO.wShowWindow= SW_SHOWDEFAULT;
INFO.cbReserved2=0;
INFO.lpReserved2=NULL;
INFO.hStdInput = GetStdHandle(STD_INPUT_HANDLE);
INFO.hStdOutput= hWritePipe;
INFO.hStdError= GetStdHandle(STD_ERROR_HANDLE);
CreateProcess( "C:\\A\\Debug\\A.exe",NULL, NULL, NULL, TRUE, CREATE_DEFAULT_ERROR_MODE|
NORMAL_PRIORITY_CLASS, NULL, NULL, &INFO, &PROCCINFO);
WaitForSingleObject(PROCCINFO.hProcess, 5000);
ReadFile(hReadPipe, cPipeResult, sizeof(cPipeResult), &dwBytes,NULL);
AfxMessageBox(cPipeResult);
}
}
// cPipeResult liefert die Ausgabe der Konsolenanwendung, kann z.B. in eine
// CString Variable eingelesen werden.
// C:\\A\\Debug\\A.exe ist meine Testdatei, das ist der Pfad zur
Konsolenanwendung.
// Möchte man die Ausgabe der Konsolenfensters vermeiden, kann man den Fenster-
// stil SW_SHOWDEFAULT durch SW_HIDE ersetzen
Gruß, J.