Delphi编程调用指定的Windows程序

豆豆网   技术应用频道   2006年07月31日  【字号: 收藏本文

本文详细介绍Delphi编程调用指定的Windows程序

  下面来介绍利用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;
 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程序的方法,这样在大型应用程序中就可以实现各个模块程序之间的“程序超级链接”。

责编:豆豆技术应用

正在加载评论...