Delphi与Windows平台紧密结合,编译代码快速高效。作为一种可视化的面向对象开发工具,Delphi可以帮助程序员更轻松、更快速地编写各种 Windows应用程序。而且通过编程可以方便地调用其它语言编写的动态库或应用程序,并在不需要时关闭这些外部程序。这一点对许多编程人员非常有用,例 如,在采用Delphi进行软件开发的同时,可能需要调用以前采用其它工具开发的应用程序,以免再次重新编写代码,或者需要调用Windows中的记事本 和计算器等工具,以便在程序运行过程中记录信息或进行计算等。
在Delphi中,通过调用一组API函数是可以比较轻松地完成上述要求的。下面本文将以一个实际的例子详细地介绍一下实现外部应用程序启动和关闭的具体方法和步骤:
1. 创建一个应用程序,在应用程序的窗体上添加两个Tbutton组件和一个TopenDialog组件。设置其中一个Tbutton组件的Caption属 性为“启动外部应用程序”、另一个Tbutton组件的Caption属性为“关闭已开启的外部应用程序”。设置TopenDialog组件的 Filter属性为“可执行文件(*.exe)|*.exe”。
2. 实现外部应用程序的启动功能
⑴ 要启动外部应用程序,可以通过调用API函数WinExec来实现。该函数用于运行指定的应用程序。下面介绍一下该函数所需的参数和返回值:
UINT WinExec( LPCSTR lpCmdLine, file://命令行指针 UINT uCmdShow file://应用程序的窗口风格 ); |
如果成功,返回值大于31。否则可能返回下列结果:
0 系统内存或资源不足
ERROR_BAD_FORMAT 该*.EXE文件无效
ERROR_FILE_NOT_FOUND 没找到指定的文件
ERROR_PATH_NOT_FOUND 没找到指定路径
⑵ 通过编写标题为“启动外部应用程序”组件的OnClick事件,来实现外部应用程序的启动,代码如下:
procedure TForm1.Button1Click(Sender: TObject); var str: string; file://存储指定的应用程序文件名 begin if opendialog1.Execute then file://选择要调用的外部可执行程序 begin str := opendialog1.FileName; file://获取可执行文件名 winexec(PChar(str), SW_SHOWNORMAL); file://启动指定的可执行程序 end; end; |
3. 关闭已开启的外部应用程序
⑴ 通过调用两个API函数,可以实现该功能。这两个函数分别为:
① FindWindow函数 该函数用于查找与指定的类名和窗口名相匹配的高层窗口,如果查找成功,返回非0值,否则返回0。
② SendMessage函数 此函数向一个或多个窗口发送指定的消息。在此通过发送WM_CLOSE消息来关闭指定的外部应用程序。
⑵ 通过编写标题为“关闭已开启的外部应用程序”组件的OnClick事件,来关闭已开启的外部应用程序。代码如下:
procedure TForm1.Button2Click(Sender: TObject); var hWndClose: HWnd; file://存储指定的外部应用程序窗口句柄 str: String; file://存储指定的外部应用程序的窗口名 begin str := InputBox('提示','请输入应用程序名:',''); file://获取要关闭的应用程序窗口名 if str <> '' then begin file://根据窗口名查找要关闭的窗口句柄 hWndClose := FindWindow(nil, PChar(str)); if hWndClose <> 0 then file://如果查找成功,则发送消息,关闭指定的窗口 SendMessage(hWndClose,WM_CLOSE,0,0); else file://否则,给出提示信息 ShowMessage('没找到指定的应用程序,所以无法关闭!'); end; end; |
本文来自博客园,作者:del88,转载请注明原文链接:https://www.cnblogs.com/del88/archive/2011/12/27/2303569.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人