Как я могу заставить Delphi передать F4 во входной канал процессу CMD? Я использую код, который очень похож на ответ здесь: Pipes in Delphi for Command PromptОтправить F4 во входной канал CMD-процесс в Delphi
Для simpliity У меня есть только 4 объектов на форме: 1. CommandText (а ТМето, который отображает представление окна CMD). 2. CommandRun (TEdit, где вводится линия CMD). 3. SendBtn (TButton используется для отправки CommandRun.Text в CMD). 3. ExitBtn (TButton используется для выхода из программы).
Вот мои записи Трубопроводные Отправить процедуры:
Написать Pipe
procedure WritePipeOut(OutputPipe: THandle; InString: string);
// writes Instring to the pipe handle described by OutputPipe
var
byteswritten: DWord;
AnsiBuf: AnsiString;
begin
// most console programs require CR/LF after their input.
if InString = 'f4' then AnsiBuf := #113#13#10
else AnsiBuf := AnsiString(InString) + #13#10;
WriteFile(InputPipeWrite, AnsiBuf[1], Length(AnsiBuf), byteswritten, nil);
end;
Отправить
procedure TForm1.SendBtnClick(Sender: TObject);
begin
WritePipeOut(OutputPipeWrite, CommandRun.Text);
CommandRun.Text := '';
CommandRun.SetFocus;
end;
команд, как DIR проходит через правильно и результаты успешно быть 'эхо' в CommandText. Моя проблема в том, что я запускаю программу через трубу. В обычном окне CMD программу можно остановить, нажав клавишу F4. Мне нужно реплицировать это сообщение F4 через трубу и просто не могу понять, как этого добиться. Я был бы очень благодарен за любое руководство.
Thanks @David. Вы подтвердили мои страхи. Похоже, мне придется использовать кувалду и использовать taskkill.exe/F/IM MyApp.exe – Paul
Почему вы так много работаете с внешними процессами? Почему вы не можете вызывать функции API. –
Действительно! Я получил побочные следы и хотел исследовать трубы и нитки, поскольку я раньше их не использовал. – Paul