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

标签 delphi console delphi-7 redirect

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

我有一个程序可以将文本发送到控制台。我将发送的文本包含 #13 字符(例如 ls#13cd documents#13dir)。换句话说,我想一次发送很多命令,控制台会一条一条地处理它们。我正在逐个字符地发送文本。有时控制台只执行lscd 文件。我想这可能是因为即使控制台很忙,我的程序也会不断发送字符,在这种情况下,控制台不会接收到传入的字符。

这是我的代码:

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。

最佳答案

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

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

关于delphi - 确定另一个应用程序是否忙,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/723876/

相关文章:

delphi - 如何有效地让 `ParentFont = False` 子控件使用与父控件相同的字体名称?

javascript - 读取 Deno 中记录到控制台的值

delphi - 如何在 asm block 中引发异常?

multithreading - 使用 TThread.Resume 有什么问题?

string - 如何计算字符串变量使用的实际内存?

windows - 在 Windows C++ 控制台应用程序中使用 wchar_t/wmain 有意义吗?

java - 如何在控制台中返回到行首?

windows - Delphi,删除包含内容的文件夹

delphi - 如何在 Delphi 中获得静态(类)字段的等效项?

delphi - 如何在命令行上编译我的 Delphi 项目?