调用外部程序的方法

我们常用的函数有两个,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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值