Output eines Konsolenprogramm in eine StringList umleiten.
-
Hallo!
Ich möchte ein Konsolenprogramm ausführen und dessen Output in eine StringList schreiben. Dabei soll aber möglichst kein Konsolenfenster zu sehen sein.
Wie mach ich das?
-
Such mal hier und im WinAPI-Forum nach 'pipes'.
-
Das mit den Pipes versteh ich net so ganz.
Ich hab folgendes versucht, aber im Memo-Feld stehen nachher nur wirre Zeichen:
HANDLE hChildStdoutRd, hChildStdoutWr, hChildStdoutRdDup, hInputFile, hSaveStdout; SECURITY_ATTRIBUTES saAttr; BOOL fSuccess; saAttr.nLength = sizeof(SECURITY_ATTRIBUTES); saAttr.bInheritHandle = TRUE; saAttr.lpSecurityDescriptor = NULL; hSaveStdout = GetStdHandle(STD_OUTPUT_HANDLE); CreatePipe(&hChildStdoutRd, &hChildStdoutWr, &saAttr, 0); SetStdHandle(STD_OUTPUT_HANDLE, hChildStdoutWr); DuplicateHandle(GetCurrentProcess(), hChildStdoutRd, GetCurrentProcess(), &hChildStdoutRdDup , 0, FALSE, DUPLICATE_SAME_ACCESS); CloseHandle(hChildStdoutRd); PROCESS_INFORMATION piProcInfo; STARTUPINFO siStartInfo; ZeroMemory( &piProcInfo, sizeof(PROCESS_INFORMATION) ); ZeroMemory( &siStartInfo, sizeof(STARTUPINFO) ); siStartInfo.cb = sizeof(STARTUPINFO); CreateProcess(NULL, "cdrecord -scanbus", // command line NULL, // process security attributes NULL, // primary thread security attributes TRUE, // handles are inherited 0, // creation flags NULL, // use parent's environment NULL, // use parent's current directory &siStartInfo, // STARTUPINFO pointer &piProcInfo); // receives PROCESS_INFORMATION CloseHandle(piProcInfo.hProcess); CloseHandle(piProcInfo.hThread); SetStdHandle(STD_OUTPUT_HANDLE, hSaveStdout); DWORD dwRead; CHAR chBuf[BUFSIZE]; CloseHandle(hChildStdoutWr); for (;;) { if( !ReadFile( hChildStdoutRdDup, chBuf, BUFSIZE, &dwRead, NULL) || dwRead == 0) break; } Memo2->Lines->Add(String(chBuf));Kann mir jemand helfen und mir zeigen wie richtig geht?
-
*push*
-
*PUSH*
Kennt sich hier keiner damit aus?
-
*_P_U_S_H_*
Hallo? Ich weiß, dass sich hier ein paar Leute damit auskennen. Warum antwortet ihr mir nicht?
-
*-P--U--S--H-_*
Spreche ich irgendwie Chinesisch, oder warum antwortet mir keiner?
-
Hi!
Hmmm event. sei dir damit geholfen:
http://www.activevb.de/tipps/vb6tipps/tipp0272.html
z.B. Sind die Parameter von CreateProcess nicht mit deinen identisch.
mfg olli