我在delphi中用shellExecute启动了一个程序(ftp);然后想做一个等待,只到ftp进程结束,再继续下面的操作,请问如何监控这个进程是否已结束?
2009-02-03 09:47
896 查看
我在delphi中用shellExecute启动了一个程序(ftp);然后想做一个等待,只到ftp进程结束,再继续下面的操作,请问如何监控这个进程是否已结束? Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiAPI/html/delphi_20061115114909229.html
如题,例如:
Hinstance:= ShellExecute(Application.Handle,nil,pchar('ftp'),pchar('-i -n -s:'+ScriptName),nil,SW_SHOWNORMAL);
for i:=0 to 10 do
begin
sleep 1000;
if ftp_end() then
break;
end;
用OpenProcess配合WaitForSingleObject应该可以。
转的
执行一个外部程序,并等待它完成
Function WinExecExW(cmd,workdir:pchar;visiable:integer):DWORD;
var
StartupInfo:TStartupInfo;
ProcessInfo:TProcessInformation;
begin
FillChar(StartupInfo,SizeOf(StartupInfo),#0);
StartupInfo.cb:=SizeOf(StartupInfo);
StartupInfo.dwFlags:=STARTF_USESHOWWINDOW;
StartupInfo.wShowWindow:=visiable;
if not CreateProcess(nil,cmd,nil,nil,false,Create_new_console or Normal_priority_class,nil,nil,StartupInfo,ProcessInfo) then
result:=0
else
begin
waitforsingleobject(processinfo.hProcess,INFINITE);
GetExitCodeProcess(ProcessInfo.hProcess,Result);
end;
end;
waitforsingleobject这个函数在xp下好象有问题,会一直等待,我现在不敢用这个;;
shellExectue 返回了进程的句柄,理论上通过 Hinstance应该是可以查看它的状态的,只是不知道具体怎么做!
那不如自己用TIdFTP
http://www.delphi2007.net/DelphiAPI/html/delphi_20061115114909229.html
如题,例如:
Hinstance:= ShellExecute(Application.Handle,nil,pchar('ftp'),pchar('-i -n -s:'+ScriptName),nil,SW_SHOWNORMAL);
for i:=0 to 10 do
begin
sleep 1000;
if ftp_end() then
break;
end;
用OpenProcess配合WaitForSingleObject应该可以。
转的
执行一个外部程序,并等待它完成
Function WinExecExW(cmd,workdir:pchar;visiable:integer):DWORD;
var
StartupInfo:TStartupInfo;
ProcessInfo:TProcessInformation;
begin
FillChar(StartupInfo,SizeOf(StartupInfo),#0);
StartupInfo.cb:=SizeOf(StartupInfo);
StartupInfo.dwFlags:=STARTF_USESHOWWINDOW;
StartupInfo.wShowWindow:=visiable;
if not CreateProcess(nil,cmd,nil,nil,false,Create_new_console or Normal_priority_class,nil,nil,StartupInfo,ProcessInfo) then
result:=0
else
begin
waitforsingleobject(processinfo.hProcess,INFINITE);
GetExitCodeProcess(ProcessInfo.hProcess,Result);
end;
end;
waitforsingleobject这个函数在xp下好象有问题,会一直等待,我现在不敢用这个;;
shellExectue 返回了进程的句柄,理论上通过 Hinstance应该是可以查看它的状态的,只是不知道具体怎么做!
那不如自己用TIdFTP
相关文章推荐
- C程序完成:父进程创建一个子进程,父进程对子进程设置一个报警信号,然后父进程等待子进程的结束,如果此时报警信号先到,就终止子进程。
- C# 下面的代码示例演示如何结束异步操作以获取请求的流,然后开始一个请求以获取响应。....
- c/s程序版本自动升级的问题,如何判断client端版本号是否最新,然后从指定ftp服务器down
- delphi中如何查看某个程序在进程中是否已经存在
- VC启动一个程序并等待运行结束
- 做一个WF窗体的启动项,就是让这个程序启动的时候首先会有一个图片出来,然后开始程序
- 如何等待一个线程完成后才继续执行之后的操作
- 腾讯面试题:给40亿个不重复的unsigned int的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那40亿个数当中?
- 腾讯面试题:给40亿个不重复的unsigned int的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那40亿个数当中?
- 给40亿个不重复的unsigned int的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那40亿个数当中?
- 如何判断一个C++对象是否在堆栈上(通过VirtualQuery这个API来获取堆栈的起始地址,然后就可以得到答案了),附许多精彩评论
- 编写一个程序,用于接收用户输入的数,然后显示从0到该数为止表示的所有字符,询问用户是否愿意再次继续同样的过程
- Delphi 如何让程序获取权限结束指定进程?
- 在delphi中如何判断一个文件正在被其它的程序或进程所调用?
- shell 脚本监控程序是否正在执行, 如果没有执行, 则自动启动该进程
- 如何调用一个程序,等待运行结束,并知晓程序运行成功与否:ShellExecuteEx;WaitForSingleObject;GetExitCodeProcess(C代码)
- 如何让Delphi调用外部程序并等待其运行结束
- 假设你有一个各位数字互不相同的四位数,把所有的数字从大到小排序后得到a,从小到大后得到b,然后用a-b替换原来这个数,并且继续操作。例如,从1234出发,依次可以得到4321-1234=3087、87
- 给40亿个不重复的unsigned int的数,没排序,然后再给一个数,如何快速间断这个数是否在那40亿个数中
- IOS开发中如何判断程序第一次启动(根据判断结果决定是否显示新手操作引导)