如何调用一个外部程序,并等待其执行完成?

balloy 2002-07-31 07:17:05
希望是用api直接实现的
...全文
153 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
balloy 2002-07-31
  • 打赏
  • 举报
回复
哦,我又试了一下,命名行程序是可以的,但我用vb编的另外一个程序就不行,呵呵,真实奇怪
webber84 2002-07-31
  • 打赏
  • 举报
回复
看MSDN的说法si.wShowWindow = SW_HIDE;应该是可以的。我这里没有VC,你再试试看吧。
balloy 2002-07-31
  • 打赏
  • 举报
回复
啊,难道没有其他办法了吗?
webber84 2002-07-31
  • 打赏
  • 举报
回复
那我也没什么好办法了。CreateProcess以后再FindWindow,
ShowWindow(SW_HIDE)吧。
balloy 2002-07-31
  • 打赏
  • 举报
回复
还是不行
webber84 2002-07-31
  • 打赏
  • 举报
回复
STARTUPINFO si={sizeof(STARTUPINFO)};
si.wShowWindow = SW_HIDE;
si.dwFlags=STARTF_USESHOWWINDOW; //加上这句试试
PROCESS_INFORMATION pi;
CreateProcess(NULL,"someapp.exe",NULl,NULL,false,0,NULL,NULL,&si,&pi);
WaitForSingleObject(pi.hProcess,INFINITE);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
balloy 2002-07-31
  • 打赏
  • 举报
回复
哦,谢谢,不好意思,还有一个问题,我想隐藏外部的应用程序,但这样写又不对,应该怎么写?谢谢:

STARTUPINFO si={sizeof(STARTUPINFO)};

PROCESS_INFORMATION pi;

si.wShowWindow = SW_HIDE;

CreateProcess(NULL, szCmdLine, NULL, NULL, false, 0, NULL, NULL, &si, &pi);
WaitForSingleObject(pi.hProcess, INFINITE);
Angus_Fan 2002-07-31
  • 打赏
  • 举报
回复
gz
webber84 2002-07-31
  • 打赏
  • 举报
回复
上面不是吗?把第二个参数改成你的程序路径就是了。
balloy 2002-07-31
  • 打赏
  • 举报
回复
哦,谢谢,能不能给个完整的例子?我不太会设置CreateProcess的那堆参数
webber84 2002-07-31
  • 打赏
  • 举报
回复
STARTUPINFO si={sizeof(STARTUPINFO)};
PROCESS_INFORMATION pi;
CreateProcess(NULL,"someapp.exe",NULl,NULL,false,0,NULL,NULL,&si,&pi);
WaitForSingleObject(pi.hProcess,INFINITE);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
wiler 2002-07-31
  • 打赏
  • 举报
回复
同意楼上的
deadhorse 2002-07-31
  • 打赏
  • 举报
回复
用CreateProcess启动子进程,用WaitForSingleObject等待

PROCESS_INFORMATION pi;
CreateProcess(NULL, "cmd.exe", ..., &pi);
WaitForSingleObject(pi.hProcess WAIT_TIMEOUT);
studentforever 2002-07-31
  • 打赏
  • 举报
回复
The WinExec function runs the specified application.
UINT WinExec(
LPCSTR lpCmdLine, // address of command line
UINT uCmdShow // window style for new application
);

The CreateProcess function creates a new process and its primary thread. The new process executes the specified executable file.

BOOL CreateProcess(
LPCTSTR lpApplicationName,
// pointer to name of executable module
LPTSTR lpCommandLine, // pointer to command line string
LPSECURITY_ATTRIBUTES lpProcessAttributes, // process security attributes
LPSECURITY_ATTRIBUTES lpThreadAttributes, // thread security attributes
BOOL bInheritHandles, // handle inheritance flag
DWORD dwCreationFlags, // creation flags
LPVOID lpEnvironment, // pointer to new environment block
LPCTSTR lpCurrentDirectory, // pointer to current directory name
LPSTARTUPINFO lpStartupInfo, // pointer to STARTUPINFO
LPPROCESS_INFORMATION lpProcessInformation // pointer to PROCESS_INFORMATION
);

16,470

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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