您的位置:首页 > 其它

调用外部程序的方法

2008-05-05 08:20 465 查看
我们常用的函数有两个,WinExec 和 ShellExecute。
1) 使用 WinExec 函数 (属于 WinProcs单元) ·
声明形式 UNIT WinExec(LPCSTR lpCmdLine, UINT uCmdShow); [例] var SDir:string;
SetLength(SDir,144);
GetWindowsDirectory(PChar(SDir),144);
SetLength(SDir,StrLen(PChar(SDir))); SDir:=SDir+'/notepad.exe'+' '+savedialog1.FileName;
WinExec(PChar(SDir), SW_SHOWMAXIMIZED);
注意:如果 SDir 不是有效路径不会提示错误。
[例] winexec('command.com /c copy *.* c:/',SW_Normal);
[例] winexec('start abc.txt');
2)使用 ShellExecute 函数(属于ShellAPI单元)
它的几个参数: · hwnd:窗体的句柄;
· lpOperation:打开程序执行的操作,共预留有"open"、"explore"、 "print"三种方式,此参数可以省略,此时将依据打开的文件(lpFile)的类型执行相应的操作,比如:如果lpFile为一文本文件,那么将会在与该文件相关联的程序中打开它 ·
lpFile:文件名; · lpParamerters:打开文件时所需的参数;
· lpDirectory:文件名所在的路径,当然,一般来说,在Windows中登记过的程序(如WinWord)不必提供此参数;
· nShowCmd:打开文件后程序窗体如何显示。
(1)运行可执行文件
[例] 以"记事本"为例
procedure TForm1.OpenBtnClick(Sender:TObject);
begin
ShellExecute(handle,'open','notepad.exe',nil,nil,SW_ShowNormal);
end;
此外,ShellExeCute() 还可以进行链接网络。
[例] procedure TForm1.HttpClick(Sender: TObject);
begin
ShellExecute(handle,'open','http://liangming.163.net', nil,nil,SW_ShowNormal); end;
(2)打开在Windows注册的外部文件
如果一个文件已经在Windows的注册表中注册了,那我们就可以通过以下方法运行他,首先要在uses部分加入: uses Shellapi; 接着定义一个过程
procedure URLink(URL:PChar);
begin
ShellExecute(0, nil, URL, nil, nil, SW_NORMAL);
end;
在要调用的地方使用: URLink('Readme.txt'); 要链接到主页就改用: URLink('http://vortex.yeah.net'); 要发邮件就要在邮件地址前加: mailto URLink('mailto:guihong@163.net'); 如果是打开外部执行程序的话,那么也可以直接调用。 ---------------------------------------------------------------
function RunProgram(ProgramName:string;Wait:Boolean=False):Cardinal;
var
StartInfo:STARTUPINFO;
ProcessInfo:PROCESS_INFORMATION;
begin //执行外部程序,失败返回0,成功返回进程句柄
Result:=0;
if ProgramName='' then exit;
GetStartupInfo(StartInfo); StartInfo.dwFlags:=StartInfo.dwFlags or STARTF_FORCEONFEEDBACK; if not CreateProcess(nil,PChar(ProgramName),nil,nil,false,0, nil,nil,StartInfo,ProcessInfo) then exit
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: