确定是否存在另一个应用程序正忙
题
我如何检查,如果另一个应用程序正忙?
我发送文本到控制台的程序。我将发送文本包含#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;
我使用Delphi 7中。
解决方案
如果我理解你的问题正确你的文本发送到某种外壳/命令行解释的,你想它来执行你的命令。
一般命令行解释器输出一定的提示(例如$ Linux系统或C上:\用于DOS),其表明它们能接受新的命令。你需要读取输出等待适当的提示你发送另一个命令之前。如果没有你发送的文本将由当前正在运行的命令所消耗的输入(如你经历)。
其他提示
洛萨是在正确的轨道上;你想要做什么,而不是使用的ShellExecute,CreateProcess的使用。看看周围堆栈溢出和谷歌的“控制台重定向” - 这会得到你,你找什么
我想我明白这是怎么回事,不是说我有这方面的修复:
您发送命令到控制台。当命令在运行该程序将接收发送的密钥。
不隶属于 StackOverflow