2

別のアプリケーションがビジーかどうかを確認するにはどうすればよいですか?

テキストをコンソールに送信するプログラムがあります。送信するテキストには #13 文字 (例: ls#13cd documents#13dir) が含まれています。言い換えれば、一度に多くのコマンドを送信したいのですが、コンソールはそれらを 1 つずつ処理します。文字ごとにテキストを送信しています。場合によっては、コンソールで実行されるのは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 を使用しています。

4

3 に答える 3

5

私があなたの質問を正しく解釈した場合、あなたはテキストをある種のシェル/コマンドラインインタープリターに送信しており、コマンドを実行したいと考えています。

通常、コマンド ライン インタープリターは、新しいコマンドを受け入れることができることを示す特定のプロンプト (Linux システムの $ や DOS の C:\ など) を出力します。別のコマンドを送信する前に、出力を読んで適切なプロンプトを待つ必要があります。そうしないと、送信されたテキストは現在実行中のコマンドによって入力として消費されます(経験したように)。

于 2009-04-07T01:45:50.180 に答える
0

私は何が起こっているのか理解していると思いますが、それに対する修正があるわけではありません:

コマンドをコンソールに送信します。コマンドが実行されている間、そのプログラムはあなたが送信したキーを受け取ります。

于 2009-04-07T03:37:28.367 に答える