Delphi编程调用指定的Windows程序

本实例介绍如何在自己的程序中调用指定的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;  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程序的方法,这样在大型应用程序中就可以实现各个模块程序之间的“程序超级链接”。 介绍如何在自己的程序中调用指定的windows程序。 1.以winexec函数来调用指定的windows程序。 以winexec函数的方式来调用指定的windows程序的响应代码如下: procedure tform1.btnwinexecclick(sender: tobject); begin  winexec(’notepad.exe’,sw_maximize); end; 其中winexec函数的第1个参数表示了被调用程序的路径和名称,第2个参数表示了程序的显示方式。 2.以shellexecute函数来调用指定的windows程序。 以shellexecute函数的方式来调用指定的windows程序的响应代码如下: procedure tform1.btnshellexecuteclick(sender: tobject); begin  shellexecute(application.handle,’open’,’notepad.exe’,pchar(’:\autoexec.bat’),nil,sw_shownormal); end;   其中shellexecute用于打开与指定文件关联在一起的程序文件。第1个参数用于指定一个窗口的句柄;第2个参数指定了程序运行的类别,如’open’或’print’;第3个参数指定了想用关联程序打印或打开的一个程序名或文件名;如果第3个参数中指定了一个可执行文件,那么第4个参数就是传递给执行程序的参数;第5个参数指定了可执行程序的完整路径。最后一个参数用于设定程序运行方式。 3.利用createprocess函数和terminateprocess函数实现对被调用程序更全面的操作。 下面来介绍利用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;

转载于:https://www.cnblogs.com/wenwencao/archive/2008/11/25/1340341.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值