命令执行顺序问题?(50分)

  • 主题发起人 主题发起人 dwj_dd
  • 开始时间 开始时间
D

dwj_dd

Unregistered / Unconfirmed
GUEST, unregistred user!
我在编写一段自动解压缩程序,用到了wzunzip.exe,程序如下
ShellExecute(f_form1.handle,'open','wzunzip.exe',f_name,nil,SW_ShowNormal);
我想让上面的语句解压缩完f_name后,再执行下面的语句,结果屡试不成功,还是请大家
来帮我一下!
 
你是箱等解压缩完成之后再回到你的程序中执行下一条指令么?
如果是,你只要搜索 启动一个程序,直到它运行结束 这样的问题就能看到答案了:)
 
是,请说具体一些
 
在DFW上查一查吧,我回答过类似的问题好几次了。下次养成先查找,再提问的习惯。
可以省很多分的 :P
 
具体如何查找!
 
这个够了。
{****************************************}
{执行其他可执行程序,等待它执行完毕再继续执行自己,否则阻塞}
{****************************************}
function TFrm1.ExecAndWait(const Filename, Params: string; WindowState: word): boolean;
var SUInfo: TStartupInfo;
ProcInfo: TProcessInformation;
CmdLine: string;
begin
CmdLine := '"' + Filename + '"' + Params; { 注意检查长文件名}
FillChar(SUInfo, SizeOf(SUInfo), #0);
with SUInfo do begin
cb := SizeOf(SUInfo);
dwFlags := STARTF_USESHOWWINDOW;
wShowWindow := WindowState;
end;

Result := CreateProcess(NIL, PChar(CmdLine), NIL, NIL,
FALSE,CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, NIL,
PChar(ExtractFilePath(Filename)), SUInfo, ProcInfo);
if Result then {等待结束 }
begin
WaitForSingleObject(ProcInfo.hProcess, INFINITE);
CloseHandle(ProcInfo.hProcess); {清理句柄 }
CloseHandle(ProcInfo.hThread);
end;
end;
 
用FindWindow,不过这个wzunzip.exe要是开了N个,又怎么知道你等哪个wzunzip结束呢?
所以不太同意shenloqi,我觉得你可以将ShellExecute(f_form1.handle,'open','wzunzip.exe',f_name,nil,SW_ShowNormal);
放在一个线程函数中,建立一个线程后后判断这个线程的状态,如果结束了,就运行下面的程序。
 
麻烦问一下线程又该如何建立,执行,并且如何判断其执行完毕呢?
 
自己找找吧
 
不好意思,由于我是新手,还没用过线程,由于要赶进度没时间去研究,所以如果您能有空
还是帮帮忙,我将把积分给你!谢谢!
 
我给你的足够了。你要实现的就是单任务,根本不是什么线程。
 
procedure TForm1.Button1Click(Sender: TObject);
begin
ExecAndWait('C:/Windows/Calc.exe', '', sw_Normal);
ShowMessage('它执行完了。。');
end;
 
问题已经解决,非常感谢!
 
后退
顶部