Delphi编程调用指定的Windows程序

资讯 驱动中国 若水 669 次阅读 0 条评论
分享 Q

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

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


图1 添加组件后的窗体

其中WinExec按钮用于以WinExec函数来调用指定的Windows程序。ShellExecute按钮用于以ShellExecute函数来调用指定的Windows程序。CreateProcess按钮和TerminateProcess按钮用于实现对被调用程序更全面的操作,前者用于调用指定的Windows程序,而后者则用于终止被调用的Windows程序。

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

procedure TForm1.btnWinExecClick(Sender: TObject);
begin
WinExec(’Notepad.exe’,SW_MAXIMIZE);
end;

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

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

procedure TForm1.btnShellExecuteClick(Sender: TObject);
begin
ShellExecute(Application.Handle,’Open’,’NotePad.exe’,PChar(’C:\AutoExec.bat’),nil,SW_SHOWNORMAL);
end;

其中ShellExecute用于打开与指定文件关联在一起的程序文件。第1个参数用于指定一个窗口的句柄;第2个参数指定了程序运行的类别,如’Open’或’Print’;第3个参数指定了想用关联程序打印或打开的一个程序名或文件名;如果第3个参数中指定了一个可执行文件,那么第4个参数就是传递给执行程序的参数;第5个参数指定了可执行程序的完整路径。最后一个参数用于设定程序运行方式。

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

首先定义3个全局变量:

PI:TProcessInformation;
SI:TStartUpInfo;
MyHandle:Thandle;

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

procedure TForm1.btnCreateProcessOpenClick(Sender: TObject);
begin
FillChar(SI,sizeof(SI),#0);
with SI do
begin
cb:=sizeof(SI);
dwFlags:=StartF_UsesTDHandles or STARTF_USESHOWWINDOW;
lptitle:=nil;
wShowWindow:=SW_Show;
end;
CreateProcess(PChar(’C:\WINNT\Notepad.exe’),
nil,nil,nil,true,DETACHED_PROCESS,nil,nil,SI,PI);
end;

调用CreateProcess函数激活C:\WINNT\Notepad.exe程序后,把它的进程信息存储在变量PI中,然后通过下面的语句来关闭本实例打开的C:\WINNT\Notepad.exe程序:

procedure TForm1.btnCreateProcessCloseClick(Sender: TObject);
begin
MyHandle:=OpenProcess(PROCESS_ALL_ACCESS, FALSE,PI.dwProcessId);
TerminateProcess(MyHandle,0);
end;

程序代码如下:

unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ShellAPI;

type
TForm1 = class(TForm)
btnWinExec: TButton;
btnCreateProcessOpen: TButton;
btnCreateProcessClose: TButton;
btnShellExecute: TButton;
procedure btnWinExecClick(Sender: TObject);
procedure btnCreateProcessOpenClick(Sender: TObject);
procedure btnCreateProcessCloseClick(Sender: TObject);
procedure btnShellExecuteClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
PI:TProcessInformation;
SI:TStartUpInfo;
MyHandle:Thandle;

implementation
{$R *.dfm}
procedure TForm1.btnWinExecClick(Sender: TObject);
begin
WinExec(’Notepad.exe’,SW_MAXIMIZE);
end;

procedure TForm1.btnCreateProcessOpenClick(Sender: TObject);
begin
FillChar(SI,sizeof(SI),#0);
with SI do
begin
cb:=sizeof(SI);
dwFlags:=StartF_UsesTDHandles or STARTF_USESHOWWINDOW;
lptitle:=nil;
wShowWindow:=SW_Show;
end;
CreateProcess(PChar(’C:\WINNT\Notepad.exe’),nil,nil,nil,true,DETACHED_PROCESS,nil,nil,SI,PI);
end;
#p#分页标题#e#
procedure TForm1.btnCreateProcessCloseClick(Sender: TObject);
begin
MyHandle:=OpenProcess(PROCESS_ALL_ACCESS, FALSE,PI.dwProcessId);
TerminateProcess(MyHandle,0);
//关闭进程
end;

procedure TForm1.btnShellExecuteClick(Sender: TObject);
begin
ShellExecute(Application.Handle,’Open’,’NotePad.exe’,PChar(’C:\AutoExec.bat’),nil,SW_SHOWNORMAL);
end;
end.

保存文件,然后按F9键运行程序,程序运行的初始画面如图2所示。


图2 程序运行的初始画面

单击窗体上的WinExec按钮、ShellExecute按钮和CreateProcess按钮都可以激活“记事本”程序,而通过CreateProcess按钮激活的程序可以通过TerminateProcess按钮来终止。程序运行结果如图3所示。


图3 程序运行结果

本程序介绍了三种调用指定的Windows程序的方法,这样在大型应用程序中就可以实现各个模块程序之间的“程序超级链接”。
版权声明:本文由驱动中国整理发布,转载需注明出处与原文链接。如有疑问请联系 editor@qudong.com
本文价值 成为第一个评分的人
登录后为本文打分
网友评论0 条评论
正在回复 的评论取消
评论加载中…
🔐

登录后参与互动

评论、点赞均可赚积分
连续签到、邀请好友也有奖励 🎁

电脑端: 微信扫码登录 微信内: 一键登录

微信扫一扫

打开微信「扫一扫」,分享本文到朋友圈或好友