Я хочу захватить вывод cmd.exe и показать его в отличном gui, который я создаю. Я хочу сделать командный интерпретатор с расширенной функциональностью. Команда dir работает безупречно, проблема возникает, когда я пытаюсь выполнить другой процесс, например ipconfig.Capture all commands output
Я не вижу выход ipconfig. Есть ли на этом рабочий стол?!
Я использую TProcess компонент из Lazarus (FreePascal)
proc := TProcess.Create(nil);
proc.Options:= [poUsePipes, poNoConsole];
proc.ShowWindow:= swoHIDE;
proc.Executable:= 'cmd';
Чтение вывода нити:
if (Length(cmd) > 0) then
begin
cmd := cmd + #13#10;
proc.Input.Write(cmd[1], Length(cmd)); // here I write command from user
strikes := 0;
end
else
if proc.Output.NumBytesAvailable > 0 then
begin
while proc.Output.NumBytesAvailable > 0 do
begin
FillChar(buf, sizeof(buf), #0);
proc.Output.Read(buf, sizeof(buf) - 1);
data := data + buf;
end;
// data gets echoed to user
Мы не можем видеть ваш код. –
@DavidHeffernan Я использую TProcess из пакета lazarus, это флаги создания. Не думайте, что код неправильный – opc0de
'proc.ShowWindow' не имеет никакой цели. Это консольное приложение, «poNoConsole» - это то, что важно. Если вы показали полную программу, которая поможет. –