如何检查另一个应用程序是否正忙?
我有一个程序可以将文本发送到控制台。我将发送的文本包含#13 char(例如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;
我正在使用Delphi 7。
答案 0 :(得分:5)
如果我正确地解释了您的问题,那么您正在将文本发送到某种shell /命令行解释器,并且您希望它能够执行您的命令。
通常命令行解释器会输出一个提示(如Linux系统上的$或DOS上的C:\),表示它们可以接受新命令。在发送另一个命令之前,需要读取输出以等待相应的提示。如果不这样做,您发送的文本将被当前运行的命令(如您所经历的那样)用作输入。
答案 1 :(得分:3)
lothar走在正确的轨道上;你想要做的是,而不是使用ShellExecute,使用CreateProcess。查看Stack Overflow和Google的“控制台重定向” - 这将为您提供所需的信息。
答案 2 :(得分:0)
我想我明白发生了什么,而不是我有一个解决方法:
您将命令发送到控制台。当命令正在运行时,程序将收到您发送的密钥。