вот код:
- Код: Выделить всё
var
n
,idx
,Count
: Integer;
szBuffer: String;
AProcess: TProcess;
AStringList: TStringList;
AMemoryStream: TMemoryStream;
BytesRead: LongInt;
const
READ_BYTES = 2048;
begin
AProcess := TProcess.Create(nil);
AProcess.CommandLine := 'ping 101.140.12.151 -n 4 -l 1024'
AProcess.Options := AProcess.Options + [poUsePipes, poNoConsole];
AProcess.Execute;
AStringList := TStringList.Create;
AMemoryStream := TMemoryStream.Create;
ListBox1.Clear;
Memo1.Clear;
BytesRead := 0;
szBuffer := '';
while AProcess.Running do
begin
AMemoryStream.SetSize(BytesRead + READ_BYTES);
n := AProcess.Output.Read((AMemoryStream.Memory + BytesRead)^, READ_BYTES);
if
n > 0
then
begin
Inc(BytesRead, n);
AMemoryStream.SetSize(BytesRead);
AStringList.LoadFromStream(AMemoryStream);
szBuffer := szBuffer + AStringList.Text;
Memo1.Text := Cp866ToUtf8(szBuffer);
end
else
begin
Sleep(100);
end;
end;
AStringList.Free;
AMemoryStream.Clear;
AMemoryStream.Free;
AProcess.Free;
после выполнения Memo1.Text содержит следующий текст
Ответ №1
Обмен пакетами с 101.140.12.151 по 1024 байт:
Ответ от 101.140.12.151:
число байт=1024 время=3мс TTL=128
Ответ от 101.140.12.151:
число байт=1024 время=3мс TTL=128
Ответ от 101.140.12.151:
число байт=1024 время=2мс TTL=128
Ответ от 101.140.12.151:
число байт=1024 время=3мс TTL=128
Статистика Ping для 101.140.12.151:
Пакетов: отправлено = 4, получено = 4, потеряно = 0 (0% потерь),
Приблизительное время приема-передачи в мс:
Минимальное = 2мсек, Максимальное = 3 мсек, Среднее = 2 мсек
но если взять из буфера после выполнения процесса
- Код: Выделить всё
AMemoryStream.Seek(0, 0);
AStringList.LoadFromStream(AMemoryStream);
Memo1.Text := CP866ToUTF8(AStringList.Text);
то результат будет
Ответ №2
Обмен пакетами с 101.140.12.151 по 1024 байт:
Ответ от 101.140.12.151: число байт=1024 время=2мс TTL=128
Ответ от 101.140.12.151: число байт=1024 время=3мс TTL=128
Ответ от 101.140.12.151: число байт=1024 время=3мс TTL=128
Ответ от 101.140.12.151: число байт=1024 время=3мс TTL=128
Статистика Ping для 101.140.12.151:
Пакетов: отправлено = 4, получено = 4, потеряно = 0 (0% потерь),
Приблизительное время приема-передачи в мс:
Минимальное = 2мсек, Максимальное = 3 мсек, Среднее = 2 мсек
╚╨╘ ААА @@@ ╚╨╘ ААА ╚╨╘ ╚╨╘ ╚╨╘ ╚╨╘ ╚╨╘ ╚╨╘ ╚╨╘ ╚╨╘ ╚╨╘ ╚╨╘ ╚╨╘ ░
как правильно получать ответ от работающего процесса?