怎样等待一个winexec函数执行完再继续下一条语句?

zs8816685 2004-04-01 10:10:55
procedure TfrmMain.btnGetClick(Sender: TObject);
var s: string; //临时变量
var sTempFile : string;
var sDefaultPassword:string ;
begin

sTempFile:='temp.txt';
sDefaultPassword:='304';
//调用UGReport.EXE 函数ReportPartTree生成格式化字符串结构书

//首先组成连接串
s:='UGReport.exe ' + txtFileName.text + ' ' +sTempFile + ' ' + sDefaultPassword;
//注意:我需要在以下的winexec函数执行完再继续下一条语句?
winexec (Pchar(s),SW_Hide);

s:='Notepad ' + sTempFile;
winexec (Pchar(s),SW_SHOWNORMAL);
end;

唯一的问题:在Dephi中有什么方法可以先让winexec函数执行完再继续下一条语句?
...全文
751 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
naughtyboy 2004-04-01
  • 打赏
  • 举报
回复
可以
其实winexec的执行应该是调用了CreateProcess(自己理解)
因为按照MSDN上来说,winexec的nCmdShow是将值传给STARTUPINFO结构体中的nShowWindow
zs8816685 2004-04-01
  • 打赏
  • 举报
回复
CreateProcess 可不可以像winexec swhide 那样隐式执行?
aiirii 2004-04-01
  • 打赏
  • 举报
回复
调用外部程序并等待其结束
程序源码 :
首先定义以下变量
var sInfo : TStartupInfo;
pInfo : TProcessInformation;
cmdLine : String;
exitCode : Cardinal;
// 下面是调用过程
cmdLine := 'c:\winnt\notepad.exe';
FillChar(sInfo,sizeof(sInfo),#0);
sInfo.cb := SizeOf(sInfo);
sInfo.dwFlags := STARTF_USESHOWWINDOW;
sInfo.wShowWindow := SW_NORMAL;

if not CreateProcess(nil,pchar(cmdLine),nil,nil,false,CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, nil, sInfo, pInfo) then
MessageBox(Application.handle,'指定程序启动失败!','错误',MB_OK or MB_ICONSTOP)
else
begin
WaitForSingleObject(pInfo.hProcess,INFINITE);
GetExitCodeProcess(pInfo.hProcess,exitCode);
end;

程序讲解 :
最主要是两个Windows API : CreateProcess和WaitForSingleObject. CreateProcess是用来启动进程的函数, 进程启动后, 会填写TProcessInformation这个结构, 而WaitForSingleObject的作用就是等待指定句柄的进程结束或超时. 关于这两个API的参数请参考Win32的说明.

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧