zoukankan      html  css  js  c++  java
  • 在Delphi中调用EXE文件,最简单、最容易理解的方法。

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

    //加一下按钮,加一个对话框就OK啦  
    procedure  TForm1.Button1Click(Sender:  TObject);  
    var  
       S:  String;  
    begin  
       if  OpenDialog1.Execute  then  
       begin  
           s  :=  OpenDialog1.FileName;  
           WinExec(  PChar(s),  SW_NORMAL);  
       end;  
    end;  
    
    --------------------------------------------------------------- 

     
       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;   
    
    (2)此外,ShellExeCute()  还可以进行链接网络。   
      [例] 

    procedure  TForm1.HttpClick(Sender:  TObject);      
    begin      
       ShellExecute(handle,'open','http://liangming.163.net',  nil,nil,SW_ShowNormal);      
    end;  
    (3)打开在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;  
       Result:=ProcessInfo.hProcess;  
       //建立进程成功  
       //如果异步执行则退出  
       if  not  wait  then  exit;  
       while  IsProgram_Runing(Result)  do  Application.ProcessMessages;  
    end;  
    function  IsProgram_Runing(hProcess:Cardinal):Boolean;  
    var  
       ExitCode:Cardinal;  
    begin  
       //查看进程是否正在运行  
       GetExitCodeProcess(hProcess,ExitCode);  
       if  ExitCode=STILL_ACTIVE  then  
           Result:=True  
       else  
           Result:=False;  
    end;

  • 相关阅读:
    Error C1189: #error: Please use the /MD switch for _AFXDLL builds
    block,inline和inline-block概念和区别(转载)
    jQuery学习--Code Organization Concepts
    Kafka— —副本(均衡负载)
    Kafka实践1--Producer
    漫画HDFS工作原理(转)
    JavaScript学习笔记3
    搭建简单SBT工程实践
    Hive SQL测试
    SparkSql常用语句
  • 原文地址:https://www.cnblogs.com/delphi7456/p/1855788.html
Copyright © 2011-2022 走看看