2024年3月25日发(作者:)

如何在Delphi中调用外部程序

本实例介绍如何在自己的程序中调用指定的Windows程序。

首先启动一个新的项目,在空白的窗体上添加4个TButton组件。添加组件后的窗体如图1

所示。

图1添加组件后的窗体

其中WinExec按钮用于以WinExec函数来调用指定的Windows程序。ShellExecute按钮

用于以ShellExecute函数来调用指定的Windows程序。CreateProcess按钮和

TerminateProcess按钮用于实现对被调用程序更全面的操作,前者用于调用指定的Windows

程序,而后者则用于终止被调用的Windows程序。

以WinExec函数的方式来调用指定的Windows程序的响应代码如下:

ExecClick(Sender:TObject);

begin

WinExec(’’,SW_MAXIMIZE);

end;

其中WinExec函数的第1个参数表示了被调用程序的路径和名称,第2个参数表示了程序

的显示方式。

以ShellExecute函数的方式来调用指定的Windows程序的响应代码如下:

llExecuteClick(Sender:TObject);

begin

ShellExecute(,’Open’,’’,PChar(’C:’),nil,SW_SHO

WNORMAL);

end;

其中ShellExecute用于打开与指定文件关联在一起的程序文件。第1个参数用于指定一个

窗口的句柄;第2个参数指定了程序运行的类别,如’Open’或’Print’;第3个参数指定了想用关

联程序打印或打开的一个程序名或文件名;如果第3个参数中指定了一个可执行文件,那么第4

个参数就是传递给执行程序的参数;第5个参数指定了可执行程序的完整路径。最后一个参数

用于设定程序运行方式。

下面来介绍利用CreateProcess函数和TerminateProcess函数如何实现对被调用程序更全

面的操作。

首先定义3个全局变量:

PI:TProcessInformation;

SI:TStartUpInfo;

MyHandle:Thandle;

利用CreateProcess函数调用指定程序的响应代码如下:

ateProcessOpenClick(Sender:TObject);

begin

FillChar(SI,sizeof(SI),#0);

withSIdo

begin

cb:=sizeof(SI);

dwFlags:=StartF_UsesTDHandlesorSTARTF_USESHOWWINDOW;

lptitle:=nil;

wShowWindow:=SW_Show;

end;

CreateProcess(PChar(’C:’),

nil,nil,nil,true,DETACHED_PROCESS,nil,nil,SI,PI);

end;

调用CreateProcess函数激活C:程序后,把它的进程信息存储在变

量PI中,然后通过下面的语句来关闭本实例打开的C:程序:

ateProcessCloseClick(Sender:TObject);

begin

MyHandle:=OpenProcess(PROCESS_ALL_ACCESS,FALSE,essId);

TerminateProcess(MyHandle,0);

end;

程序代码如下:

unitUnit1;

interface

uses

Windows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,

Dialogs,StdCtrls,ShellAPI;