我如何检查,如果另一个应用程序正忙?

我发送文本到控制台的程序。我将发送文本包含#13字符(例如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中。

有帮助吗?

解决方案

如果我理解你的问题正确你的文本发送到某种外壳/命令行解释的,你想它来执行你的命令。

一般命令行解释器输出一定的提示(例如$ Linux系统或C上:\用于DOS),其表明它们能接受新的命令。你需要读取输出等待适当的提示你发送另一个命令之前。如果没有你发送的文本将由当前正在运行的命令所消耗的输入(如你经历)。

其他提示

洛萨是在正确的轨道上;你想要做什么,而不是使用的ShellExecute,CreateProcess的使用。看看周围堆栈溢出和谷歌的“控制台重定向” - 这会得到你,你找什么

我想我明白这是怎么回事,不是说我有这方面的修复:

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top