質問

他のアプリケーションがビジー状態の場合はどのようにチェックしますか?

私は、コンソールにテキストを送信し、プログラムを持っています。私が送信されるテキストは、#13のchar(例えばls#13cd documents#13dir)が含まれています。言い換えれば、私は一度に多くのコマンドを送信すると、コンソールにはそれらを一つずつ処理します。私はテキストを文字単位で送ります。時にはコンソールはのみlscd documentsを実行します。私は私のプログラムは、継続的にコンソールが、その場合にはコンソールが入ってくる文字を受信しない、ビジー状態であっても、文字を送信するため、これがあるかもしれないと思います。

これは私のコードです:

procedure TForm1.SendTextToAppO(Str: String; AHandle: Integer);
var
  iWindow, iPoint, i: Integer;
  SPass: PChar;
  sList: TStringList;
begin
sList := TStringList.Create;
  ExtractStrings([#13],[' '],PChar(Str),sList);
  iWindow := AHandle;// AHandle is the handle of the console
  iPoint := ChildWindowFromPoint(iWindow, Point(50,50));
  for i:=0 to sList.Count-1 do begin
    SPass := PChar(sList[i]);
    try
      while(SPass^ <> #$00) do begin
      SendMessage(iPoint,WM_CHAR,Ord(SPass^),0);
      Inc(SPass);
      end;
      SendMessage(iPoint,WM_KEYDOWN,VK_RETURN,0);
    except
        // do nothing;
    end;
  end;
end;

私は、Delphi 7を使用しています。

役に立ちましたか?

解決

私はあなたが正しくあなたがシェル/コマンドラインインタプリタのいくつかの並べ替えにテキストを送信している質問とあなたはそれがあなたのコマンドを実行したい場合は解釈します。

彼らは新しいコマンドを受け入れることができることを示している。

は、通常のラインインタプリタの出力を一定のプロンプト(\ DOS用のLinuxシステムやCの$など)を命じます。あなたが別のコマンドを送信する前に適切なプロンプトを待つの出力を読むために必要があります。 (あなたが経験したように)あなたが送信されたテキストは、現在実行中のコマンドで入力として消費されていない場合ます。

他のヒント

ローターは正しい軌道に乗っています。何がやりたいことはある、代わりのShellExecuteを使用しての、のCreateProcessを使用します。 「コンソールリダイレクト」をスタックオーバーフローやGoogleの周りを見て - それはあなたが探しているもの、あなたを得るでしょう。

私はそれのための修正を持っていないことを、私は何が起こっているかを理解すると思う:

あなたは、コンソールにコマンドを送信してください。コマンドは、プログラムを使用して、送信キーを受け取ることを実行している間ます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top