代码之家  ›  专栏  ›  技术社区  ›  junmats

确定其他应用程序是否正忙

  •  2
  • junmats  · 技术社区  · 15 年前

    如何检查其他应用程序是否忙?

    我有一个向控制台发送文本的程序。我将发送的文本包含13个字符(例如 ls#13cd documents#13dir )换句话说,我希望一次发送多个命令,控制台将逐个处理这些命令。我正在一个字符一个字符地发送文本。有时控制台只执行 ls cd 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;
    

    我用的是Delphi7。

    3 回复  |  直到 10 年前
        1
  •  5
  •   lothar    15 年前

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

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

        2
  •  3
  •   overslacked    15 年前

    lothar在正确的轨道上;您要做的是,不要使用shellexecute,而是使用createprocess。看看栈溢出和谷歌的“控制台重定向”-这将得到你想要的。

        3
  •  0
  •   Loren Pechtel    15 年前

    我想我明白发生了什么事,但我没有办法解决:

    您向控制台发送一个命令。当命令运行时,该程序将接收您发送的密钥。