如何在exe中运行bat,并在运行完bat后再执行exe中的代码

3fly 2003-06-03 05:08:13
我想用如下方法,却不行

#########################################

var
h: cardinal;
hd: HDC;
begin
showmessage('start...');
h := ShellExecute(Application.Handle, 'open',
'C:\test.bat',
nil,
nil,
SW_shownormal);
WaitForInputIdle(h, INFINITE);
showmessage('end...');
end;

######################################

可是WaitForInputIdle在dos窗口打开时就执行完了,而不是在bat中的dos命令运行完后(或dos窗口关闭后)执行完的,请教……
...全文
829 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
3fly 2003-06-03
  • 打赏
  • 举报
回复
to lion_lh(xmanx):
果然,马上给分,不过还有事请教

#1: CreateProcess(nil,cmdstr,nil,nil,false,0,nil,nil,StartupInfo,ProcessInfo);
#2: With ProcessInfo do begin
#3: CloseHandle(hThread);
#4: WaitForSingleObject(hProcess, INFINITE);
#5: CloseHandle(hProcess);
#6: end;

就是#3起什么作用?我注释掉也可以实现啊?
还有我在
h := ShellExecute(
之后调用
WaitForSingleObject(h, INFINITE);
为什么不可以?
为什么ProcessID可以作为一个互斥对象而Application_Instance_Handle不行?
李_军 2003-06-03
  • 打赏
  • 举报
回复
同意 lion_lh(xmanx)
Linux2001 2003-06-03
  • 打赏
  • 举报
回复
用楼上的方法吧,他的方法就是等待test.bat运行完毕,然后主程序继续执行
lion_lh 2003-06-03
  • 打赏
  • 举报
回复
var cmdStr:pchar;
StartupInfo: TStartupInfo;
ProcessInfo: TProcessInformation;
begin
cmdstr:=pchar('C:\test.bat');
fillchar(StartupInfo,sizeof(StartupInfo),0);
CreateProcess(nil,cmdstr,nil,nil,false,0,nil,nil,StartupInfo,Pro
cessInfo);
With ProcessInfo do begin
CloseHandle(hThread);
WaitForSingleObject(hProcess, INFINITE);
CloseHandle(hProcess);
end;
end;

1,184

社区成员

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

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