CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

我用ShellExecute函数执行了另外一个程序,我想等这个程序结束再接着执行程序,有什么办法啊,急啊,不用sleep函数

楼主woshixhs(纯净水)2005-01-24 12:26:29 在 VC/MFC / 基础类 提问

我在我的程序中,先调用了一个批处理,让他编译一些工程,我要用编译好的东西,所以等他执行完,确切的完成。所以不用sleep,我该怎么样才能完成这样,还是的开一个进程来代替ShellExecute,那又该怎么做!先谢谢大家了! 问题点数:20、回复次数:19Top

1 楼CuteSword(灵剑)回复于 2005-01-24 12:38:28 得分 2

ShellExecute   好像只是启动一个进程吧,你只有检查   nResult   =   ShellExecute(...)的返回结果来判断是否执行成功,至于什么时候这个进程完成,好像不是这个函数的责任。Top

2 楼wangzhanlili(小木头)回复于 2005-01-24 12:42:40 得分 2

你用一个线程检查用ShellExecute   生成的进程是否存在  
     
    不在了就执行下一个Top

3 楼shenailin(sal)回复于 2005-01-24 12:43:31 得分 0

在匹处理中加结束符好   !  
  再调用ShellExecuteTop

4 楼kvls(冰茶)回复于 2005-01-24 12:45:21 得分 2

使用CreateProcess启动进程,返回为一内核量,然后调用WaitForSingleObject函数,具体参考MSDNTop

5 楼handwolf(青松崖)回复于 2005-01-24 12:47:19 得分 0

WaitForSingleObject  
  Top

6 楼shootingstars(有容乃大,无欲则刚)回复于 2005-01-24 12:48:58 得分 2

用CreateProcess创建进程,然后可以用获得的进程句柄来WaitForSingleObjectTop

7 楼woshixhs(纯净水)回复于 2005-01-24 12:50:41 得分 0

nResult   =   ShellExecute(...)的返回结果来判断是否执行成功,至于什么时候这个进程完成,好像不是这个函数的责任。  
  这个nResult值得到是不会变的Top

8 楼fengqinggao(风清高)回复于 2005-01-24 12:50:50 得分 10

如下方法可以实现你的要求:  
   
  STARTUPINFO   si;  
  PROCESS_INFORMATION   pi;  
  ZeroMemory(&si,   sizeof(si));  
  si.cb   =   sizeof(si);  
  ZeroMemory(&pi,   sizeof(pi));  
   
  CString   sExePathName   =   “你要执行文件的路径和名称”;  
  if(!CreateProcess(NULL,   sExePathName.GetBuffer(sExePathName.GetLength()),   NULL,   NULL,   NULL,   CREATE_NEW_CONSOLE,   NULL,   NULL,   &si,   &pi))  
  AfxMessageBox("     运行   “"   +   sExeModel   +   "”   模块失败!     ");  
  else  
  WaitForSingleObject(pi.hProcess,   INFINITE);  
   
  关键在于CreateProcess()和WaitForSingleObject()函数的配合使用,前者成功后,用或者等待那个进程结束后才能进行其他操作Top

9 楼woshixhs(纯净水)回复于 2005-01-24 12:51:37 得分 0

WaitForSingleObject  
  在这里好像不能用的吧Top

10 楼fengqinggao(风清高)回复于 2005-01-24 12:53:31 得分 0

呵呵,正在整理代码的时候被shootingstars(有容乃大,无欲则刚)兄占了先,不好意思  
   
  顺便补充一下,上面语句中,sExeModel应该用sExePathName代替Top

11 楼woshixhs(纯净水)回复于 2005-01-24 12:55:00 得分 0

我就是在批处理中加的结束符,但是我不能控制啊    
  Top

12 楼zhjie374(zhjie374)回复于 2005-01-24 12:58:25 得分 0

用个笨办法,写个信号到文件,或者共享内存.Top

13 楼woshixhs(纯净水)回复于 2005-01-24 13:03:09 得分 0

我先试试在说,先谢谢了,看能否成功Top

14 楼fengqinggao(风清高)回复于 2005-01-24 13:13:10 得分 0

是啊,只能先试一试了,我没有用它处理过批处理,呵呵,反正调用一般的单个的应用程序没有问题  
   
  个人直觉,批处理,够戗,而且我也想不出其他方法处理这种情况,呵呵,除非你将批处理中的执行代码都转换成这种代码,:)Top

15 楼XunBaian(蓝水晶)回复于 2005-01-24 13:17:55 得分 2

SHELLEXECUTEINFO   ShExecInfo   =   {0};  
  ShExecInfo.cbSize   =   sizeof(SHELLEXECUTEINFO);  
  ShExecInfo.fMask   =   SEE_MASK_NOCLOSEPROCESS;  
  ShExecInfo.hwnd   =   NULL;  
  ShExecInfo.lpVerb   =   NULL;  
  ShExecInfo.lpFile   =   "要执行的文件";  
  ShExecInfo.lpParameters   =   "";  
  ShExecInfo.lpDirectory   =   NULL;  
  ShExecInfo.nShow   =   SW_SHOW;  
  ShExecInfo.hInstApp   =   NULL;  
  ShellExecuteEx(&ShExecInfo);  
  WaitForSingleObject(ShExecInfo.hProcess,INFINITE);  
  Top

16 楼woshixhs(纯净水)回复于 2005-01-24 13:29:40 得分 0

楼上的这个我没事,其实应该跟fengqinggao(风清高)   原理的一样,我已经成功了,谢谢了。我有这个相法这么用,就是不熟悉而已,现在好了,学了很多。再次谢谢各位了!Top

17 楼chuanke((C ) 2005【空间代数】. All rights reserved .)回复于 2005-01-24 14:11:02 得分 0

路过Top

18 楼xiejingking(石头)回复于 2005-02-24 23:31:17 得分 0

能给出完整的实现过程和代码吗,非常感谢!急等Top

19 楼kyh1234567(曾一坤)回复于 2005-04-19 17:29:02 得分 0

UPTop

相关问题

  • 关于ShellExecute ()函数;
  • 关于Sleep函数
  • 怎么用ShellExecute函数?
  • 如何用shellexecute函数
  • sleep()函数的问题sdk
  • Sleep()函数问题,求助
  • API函数ShellExecute连接网页
  • 这个函数ShellExecute()怎样使用!
  • 在pb怎么定义api函数ShellExecute????
  • 关于函数ShellExecute的问题

关键词

  • 函数
  • 执行
  • null
  • shellexecute
  • 程序
  • sexepathname
  • 进程
  • 调用
  • createprocess
  • si

得分解答快速导航

  • 帖主:woshixhs
  • CuteSword
  • wangzhanlili
  • kvls
  • shootingstars
  • fengqinggao
  • XunBaian

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo