delphi怎么实现打开一个文件后延迟10秒再打开另一个文件?
我的设想是这样的,我在一个窗口里有一个按钮,点击后先打开c:\1.exe,然后过10秒后,也就是等1.exe确定完全运行之后,再打开c:\2.exe程序。打开程序都能好写...
我的设想是这样的,我在一个窗口里有一个按钮,点击后先打开c:\1.exe,然后过10秒后,也就是等1.exe确定完全运行之后,再打开c:\2.exe程序。打开程序都能好写,问题是中间的延迟我不会写,希望老鸟们给个代码,谢谢
展开
3个回答
展开全部
方法很多:
1、sleep(10000):以毫秒为单位
2、用Ttime控件
3、给你写了个延时过程:
//ms 毫秒
procedure MyDelay(mS :integer);
var
beginTick ,endTick :Integer;
begin
beginTick :=GetTickCount;
while True do
begin
Application.ProcessMessages;
endTick :=GetTickCount;
if (endTick - beginTick)>mS then Break;
end;
end;
推荐第三种!
1、sleep(10000):以毫秒为单位
2、用Ttime控件
3、给你写了个延时过程:
//ms 毫秒
procedure MyDelay(mS :integer);
var
beginTick ,endTick :Integer;
begin
beginTick :=GetTickCount;
while True do
begin
Application.ProcessMessages;
endTick :=GetTickCount;
if (endTick - beginTick)>mS then Break;
end;
end;
推荐第三种!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
最简单的办法,
增加一个Timer控件,
然后设置 internal:=10000;
在Timer的OnTime事件中添加打开2.exe文件代码,
将Timer.Enable := False ;
在1.exe的OnActive中,
启动Timer。
增加一个Timer控件,
然后设置 internal:=10000;
在Timer的OnTime事件中添加打开2.exe文件代码,
将Timer.Enable := False ;
在1.exe的OnActive中,
启动Timer。
追问
是这样的,这个1.exe并不是我写的(或是任意一个别人写的不同编译软件生成的程序),我没法重新编译在他的ONACTIVE中再启动timer.如果能加又该怎么写?
追答
做一个Dos的批处理文件
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
给你一个通过进程来检测1.exe是否运行的函数,如果已运行,在打开2.exe,反之则一直循环等待
function chktaskcount(proname: string; procount: integer):boolean;
var
i: integer;
ProcessName: string;
ListLoop: Boolean;
FsnapShotHandle: Thandle;
FProcessEntry32: TProcessEntry32;
begin
result := false;
Fsnapshothandle := CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS, 0);
FProcessEntry32.dwsize := SizeOF(FProcessEntry32);
Listloop := Process32First(FSnapshotHandle, FProcessEntry32);
i := 0;
while Listloop do
begin
ProcessName := FprocessEntry32.szExeFile;
if ProcessName = proname then
i := i + 1;
ListLoop := Process32Next(FSnapshotHandle, FprocessEntry32);
end;
if i = procount then
result := true;
CloseHandle(FSnapshotHandle);
end;
调用方法:
procedure TForm1.Button1Click(Sender: TObject);
begin
windows.WinExec(pchar('c\1.exe'), 1);
while not chktaskcount('1.exe', 1) do //当进程里面1.exe的个数不为1的时候 循环延迟
begin
sleep(1000);
end;
windows.WinExec(pchar('c\2.exe'), 1);
end;
function chktaskcount(proname: string; procount: integer):boolean;
var
i: integer;
ProcessName: string;
ListLoop: Boolean;
FsnapShotHandle: Thandle;
FProcessEntry32: TProcessEntry32;
begin
result := false;
Fsnapshothandle := CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS, 0);
FProcessEntry32.dwsize := SizeOF(FProcessEntry32);
Listloop := Process32First(FSnapshotHandle, FProcessEntry32);
i := 0;
while Listloop do
begin
ProcessName := FprocessEntry32.szExeFile;
if ProcessName = proname then
i := i + 1;
ListLoop := Process32Next(FSnapshotHandle, FprocessEntry32);
end;
if i = procount then
result := true;
CloseHandle(FSnapshotHandle);
end;
调用方法:
procedure TForm1.Button1Click(Sender: TObject);
begin
windows.WinExec(pchar('c\1.exe'), 1);
while not chktaskcount('1.exe', 1) do //当进程里面1.exe的个数不为1的时候 循环延迟
begin
sleep(1000);
end;
windows.WinExec(pchar('c\2.exe'), 1);
end;
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询