000
07.08.2006, 16:39 Uhr
LowFly
|
hy, ich hab mir eine MFC anwendung geschrieben die ein Consolenprogramm startet und das was das Consolenfenster mittels sprintf o. cout << ausgibt in einem string zu speichern.
mit Readfile klappt das wunderbar. Da gibt es mir den gesammten Text aus dem Consolefenster zurück.
C++: |
char *cExecute = new char[strlen(lpExeName)+strlen(lpArguments)+2]; sprintf(cExecute,"%s %s",lpExeName,lpArguments); //Sicherheitsattribute des Erstellten Process SECURITY_ATTRIBUTES secattr; ZeroMemory(&secattr,sizeof(secattr)); secattr.nLength = sizeof(secattr); secattr.bInheritHandle = TRUE;
HANDLE rPipe, wPipe;
//Erstell die Pipes zum lesen & schreiben CreatePipe(&rPipe,&wPipe,&secattr,0);
STARTUPINFO sInfo; ZeroMemory(&sInfo,sizeof(sInfo)); PROCESS_INFORMATION pInfo; ZeroMemory(&pInfo,sizeof(pInfo)); sInfo.cb=sizeof(sInfo); sInfo.dwFlags=STARTF_USESTDHANDLES; sInfo.hStdInput=NULL; sInfo.hStdOutput=wPipe; sInfo.hStdError=wPipe;
//Öffne die Console verdeckt CreateProcess(0,cExecute,0,0,TRUE, NORMAL_PRIORITY_CLASS|CREATE_NO_WINDOW,0,0,&sInfo,&pInfo);
CloseHandle(wPipe);
char *buf = new char[MAX_PATH]; DWORD reDword; BOOL res; char *cOutput=""; COORD dwReadCoord={0,0};
do {
[b]res=::ReadFile(rPipe,buf,MAX_PATH,&reDword,0);[/b]
if(res) { char *cTemp = new char[strlen(cOutput)+1]; strcpy(cTemp,cOutput);
cOutput = new char[strlen(cTemp)+strlen(buf)+1]; sprintf(cOutput,"%s%s",cTemp,buf);
delete[]cTemp; }
}while(res);
strcpy(lpReturnText,cOutput);
return TRUE;
delete[]cOutput; delete[]cExecute; delete[]buf;
|
jetzt ist der Text aber in spalten gegliedert zuerst kommt die Zeilennr dann ein space & danach der Text in der Zeile. Wenn ich jetzt die MSDN richtig versteh dann sollte das doch mit ReadConsoleOutput bzw. mit ReadConsoleOutputCharacter
funzen das ich text von bis auslese. leider tut es das nicht. alle versuche schlagen fehl wenn ich versuche aus der MFC anwendung heraus auszulesen. es wird mir gar kein text zurückgegeben.
PS: das beispiel hier hab ich schon durch und in einer console funzt das ganz gut nur nicht wenn ich von auserhalb darauf zugreifen will.
kann mir da mal jemand helfen. mfg LowFly |