Собственно задача вроде бы простая, но не могу решить, есть run.bat, он выполняется, выводит какие то данные, задача в том что бы перехватить вывод в какую нить строку, plz на Delphi или хотя бы на C++.
Могу привести пример на перле Code: #!/usr/bin/perl open(STDOUT,"> out.txt"); system("run.bat"); close(STDOUT); Данный код весь вывод (а точнее весь STDOUT) отправит в файл out.txt
Вот готовый пример реализации, рабочий и на Дельфи: Code: function Dos2Win(CmdLine:String):string; const BUFSIZE = 2000; var SecAttr : TSecurityAttributes; hReadPipe, hWritePipe : THandle; StartupInfo: TStartUpInfo; ProcessInfo: TProcessInformation; Buffer : Pchar; WaitReason, BytesRead : DWord; begin with SecAttr do begin nlength := SizeOf(TSecurityAttributes); binherithandle := true; lpsecuritydescriptor := nil; end; // Creazione della pipe if Createpipe (hReadPipe, hWritePipe, @SecAttr, 0) then begin Buffer := AllocMem(BUFSIZE + 1); // Allochiamo un buffer di dimensioni BUFSIZE+1 FillChar(StartupInfo, Sizeof(StartupInfo), #0); StartupInfo.cb := SizeOf(StartupInfo); StartupInfo.hStdOutput := hWritePipe; StartupInfo.hStdInput := hReadPipe; StartupInfo.dwFlags := STARTF_USESTDHANDLES + STARTF_USESHOWWINDOW; StartupInfo.wShowWindow := SW_HIDE; if CreateProcess(nil,PChar(CmdLine),@SecAttr,@SecAttr,true,NORMAL_PRIORITY_CLASS,nil, nil,StartupInfo, ProcessInfo) then begin // Attendiamo la fine dell'esecuzione del processo repeat WaitReason := WaitForSingleObject( ProcessInfo.hProcess,100); Application.ProcessMessages; until (WaitReason <> WAIT_TIMEOUT); // Leggiamo la pipe Repeat BytesRead := 0; // Leggiamo "BUFSIZE" bytes dalla pipe ReadFile(hReadPipe, Buffer[0], BUFSIZE, BytesRead, nil); // Convertiamo in una stringa "\0 terminated" Buffer[BytesRead]:= #0; // Convertiamo i caratteri da DOS ad ANSI OemToAnsi(Buffer,Buffer); // Scriviamo nell' "OutMemo" l'output ricevuto tramite pipe Result := Result + String(Buffer); until (BytesRead < BUFSIZE); end; FreeMem(Buffer); CloseHandle(ProcessInfo.hProcess); CloseHandle(ProcessInfo.hThread); CloseHandle(hReadPipe); CloseHandle(hWritePipe); end; end;