如何检查另一个应用程序是否忙?
我有一个程序可以将文本发送到控制台。我将发送的文本包含 #13 字符(例如 ls#13cd documents#13dir
)。换句话说,我想一次发送很多命令,控制台会一条一条地处理它们。我正在逐个字符地发送文本。有时控制台只执行ls
和cd 文件
。我想这可能是因为即使控制台很忙,我的程序也会不断发送字符,在这种情况下,控制台不会接收到传入的字符。
这是我的代码:
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/