2017-01-10 3 views
0

DelphiでF4を入力パイプにCMDプロセスに渡す方法を教えてください。 1. CommandTextを(CMDウィンドウの表現を表示TMemoオブジェクト):私は、フォーム上の唯一の4オブジェクトを持ってsimpliityについてPipes in Delphi for Command PromptDelphiの入力パイプCMDプロセスにF4を送信

:私はここで答えに非常によく似ているコードを使用してきました。 2. CommandRun(実行するCMD行が入力されるTEdit)。 3. SendBtn(CMDにCommandRun.Textを送信するために使用されるTButton)。 3. ExitBtn(プログラムを終了するために使用されるTButton)。ここで

は私の書き込みパイプであり、手続きを送る:

ライトパイプ

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; 

はDIRのような

procedure TForm1.SendBtnClick(Sender: TObject); 
begin 
    WritePipeOut(OutputPipeWrite, CommandRun.Text); 
    CommandRun.Text := ''; 
    CommandRun.SetFocus; 
end; 

コマンドが正常に通過しているとの結果が正常に「エコー」されている送信しますCommandTextへ。 私の問題は、パイプ経由でプログラムを起動していることです。通常のCMDウィンドウでは、F4キーを押してのみプログラムを停止できます。 私はパイプを介してこのF4プレスを複製する必要があり、これを達成する方法を理解できません。どんな指導にもとても感謝しています。

答えて

0

F4は、標準入力を通じて送信されるものではありません。このコンソールアプリケーションはほぼ確実にキーボード入力を直接読み取っています。

これを解決する別の方法を探す必要があります。私は、次のことをお勧め:

  1. cmdウィンドウが入力フォーカスとF4キーの偽の入力を持っていることを確認します。フォーカスをcmdウィンドウに移動することは、あなたがするのが嫌なものになると思います。
  2. このプロセスを停止するには別の方法を使用してください。コンソールウィンドウへのF4 keypress以外のプロセスがサポートされているかどうかは、問題のプロセスについては何も知らないので、ここから判断することはできません。
  3. TerminateProcessを呼び出して、プロセスを強制終了します。
+0

ありがとう@David。あなたは私の恐れを確認しました。私はsledgehammerを使用してtaskkill.exe/F/IM MyApp.exeを使用する必要があるように見えます – Paul

+0

なぜ外部プロセスで何をしていますか?なぜAPI関数を呼び出せないのですか? –

+0

確かに!私はサイドトラッキングを受けて、これまでパイプやスレッドを使用していなかったので調査したいと思っていました。 – Paul

関連する問題