确定另一个应用程序是否正忙

时间:2009-04-07 01:37:57

标签: delphi console delphi-7 redirect

如何检查另一个应用程序是否正忙?

我有一个程序可以将文本发送到控制台。我将发送的文本包含#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。

3 个答案:

答案 0 :(得分:5)

如果我正确地解释了您的问题,那么您正在将文本发送到某种shell /命令行解释器,并且您希望它能够执行您的命令。

通常命令行解释器会输出一个提示(如Linux系统上的$或DOS上的C:\),表示它们可以接受新命令。在发送另一个命令之前,需要读取输出以等待相应的提示。如果不这样做,您发送的文本将被当前运行的命令(如您所经历的那样)用作输入。

答案 1 :(得分:3)

lothar走在正确的轨道上;你想要做的是,而不是使用ShellExecute,使用CreateProcess。查看Stack Overflow和Google的“控制台重定向” - 这将为您提供所需的信息。

答案 2 :(得分:0)

我想我明白发生了什么,而不是我有一个解决方法:

您将命令发送到控制台。当命令正在运行时,程序将收到您发送的密钥。

相关问题