资源描述
如安在 Delphi中挪用外部程序(转载)关键词 :本实例介绍如安在自己的程序中指定的Windows程序。第一启动一个新的项目,在空白的窗体上添加4 个 TButton 组件。添加组件后的窗体如图1 所示。图 1 添加组件后的窗体其中按钮用于以WinExec 函数来挪用指定的Windows程序。 ShellExecute按钮用于以ShellExecute 函数来挪用指定的Windows程序。 CreateProcess按钮和 TerminateProcess按钮用于实现对被挪用程序更全面的操作,前者用于挪用指定的Windows程序,而后者那么用于终止被挪用的Windows 程序。以 WinExec 函数的方式来挪用指定的 Windows 程序的响应代码如下:procedure (Sender: TObject);beginWinExec(,SW_MAXIMIZE);end;其中 WinExec 函数的第1 个参数表示了被挪用程序的途径和名称,第2 个参数表示了程序的显示方式。以 ShellExecute函数的方式来挪用指定的Windows程序的响应代码如下:procedure (Sender: TObject);beginShellExecute,Open, ,PChar(),nil,SWC:_SHOWNORMAL);end;其中ShellExecute用于打开与指定在一路的程序文件。第1 个参数用于指定一个窗口的句柄;第2 个参数指定了程序运行的类别,如Open 或 Print ;第3 个参数指定了想用关联程序打印或打开的一个程序名或文件名;若是第3 个参数中指定了一个可执行文件,那么第4 个参数确实是传递给执行程序的参数;第5 个参数指定了可执行程序的完整途径。最后一个参数用于设定程序运行方式。下面来介绍利用CreateProcess函数和 TerminateProcess函数如何实现对被挪用程序更全面的操作。第一概念 3 个全局:PI:TProcessInformation;SI:TStartUpInfo;MyHandle:Thandle;利用 CreateProcess函数挪用指定程序的响应代码如下:procedure (Sender: TObject);beginFillChar(SI,sizeof(SI),#0);with SI dobegincb:=sizeof(SI);dwFlags:=StartF_UsesTDHandles or STARTF_USESHOWWINDOW;lptitle:=nil;wShowWindow:=SW_Show;end;CreateProcess(PChar( C:),nil,nil,nil,true,DETACHED_PROCESS,nil,nil,SI,PI);end;挪用 CreateProcess函数激活程序后,把它的进程信息存储在变量PI 中,然后通过下面的语句来关闭本实例打开的程序:procedure (Sender: TObject);beginMyHandle:=OpenProcess(PROCESS_ALL_ACCESS, FALSE,;TerminateProcess(MyHandle,0);end;程序代码如下:unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls, ShellAPI;typeTForm1 = 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;varForm1: TForm1;PI:TProcessInformation;SI:TStartUpInfo;MyHandle:Thandle;implementation$R *.dfmprocedure (Sender: TObject);beginWinExec(,SW_MAXIMIZE);end;procedure (Sender: TObject);beginFillChar(SI,sizeof(SI),#0);with SI dobegincb:=sizeof(SI);dwFlags:=StartF_UsesTDHandles or STARTF_USESHOWWINDOW;lptitle:=nil;wShowWindow:=SW_Show;end;CreateProcess(PChar( C:),nil,nil,nil,true,DETACHED_PROCESS,nil,nil,SI,PI);end;procedure (Sender: TObject);beginMyHandle:=OpenProcess(PROCESS_ALL_ACCESS, FALSE,;TerminateProcess(MyHandle,0);保留文件,然后按F9 键运行程序,程序运行的初始画面如图2 所示。图 2 程序运行的初始画面单击窗体上的WinExec序,而通过 CreateProcess图3所示。按钮、 ShellExecute按钮和 CreateProcess按钮激活的程序能够通过TerminateProcess按钮都能够激活“记事本”程按钮来终止。 程序运行结果如图 3 程序运行结果本程序介绍了三种挪用指定的Windows程序的方式,如此在大型应用程序中就能够够实现各个模块程序之间的“程序超级链接”。
展开阅读全文