请问要在一个程序中调用外部可执行程序,用shellexecute的话,要如何申明?(30分)

  • 主题发起人 主题发起人 李子
  • 开始时间 开始时间

李子

Unregistered / Unconfirmed
GUEST, unregistred user!
我直接用提示没有定义这个函数,我看帮助提示的是在“shell32.lib”中,不知道哪位兄弟有过这方面的编程经验,请多多指教。如果有其他方法也可以
 
WinExec最简单了
 
用shellexecute,注意在 uses 子句中加 Shellapi ;
 
agree with Pipi,WinExec.不过有点过时,CreateProcess比较新的,没有
WinExec简单
 
procedure TForm1.Button1Click(Sender: TObject);
var
st:TStartUpInfo;
pp:TProcessInformation;
ppp:Thandle;
tt:Cardinal;
begin
FillChar(st,sizeof(st),#0);
with st do
begin
cb:=sizeof(st);
dwFlags:=StartF_UsesTDHandles or STARTF_USESHOWWINDOW;
lptitle:=nil;
wShowWindow:=SW_HIDE;
end;
CreateProcess(PChar('c:/program files/microsoft office/office/winword.exe'),
nil,nil,nil,true,DETACHED_PROCESS,nil,nil,st,pp);
ppp:=OpenProcess(PROCESS_ALL_ACCESS, FALSE,pp.dwProcessId );
GetExitCodeProcess(ppp,tt);
Exitprocess(tt)

// TerminateProcess(ppp,0);也可代替GetExitCodeProcess与ExitProcess
end;

 
调用Windows笔记本:

WinExec(PChar('C:/WINDOWS/Notepad.exe'), 0);
 
WinExec是16位下采用的技术,在32位下已经停止使用(但可以使用)。32位下用
shellexecute,在 uses 子句中加上 Shellapi 即可
 
ms推荐替代WinExec的是 CreateProcess 而不是 ShellExecute
CreateProcess参数太多,如果不需要控制子进程或者其他功能,WinExec 最简单

ShellExecute是调用shell来启动进程,严格一点说并不相当于exec()函数,而相当于
dos时代的system()函数。 (ShellExecute创建的进程的父进程是shell而不是自己)

WinExec和CreateProcess都相当于exec()函数(创建的进程的父进程是是自己)
 
多人接受答案了。
 
后退
顶部