Delphi Win API 函数 [ ShellAPI ] ShellExecute 函数--运行一个外部程序
引用单元:uses ShellAPI;
函数功能:运行一个外部程序(或者是打开一个已注册的文件、打开一个目录、打印一个文件等等),并对外部程序有一定的控制。
函数原型:function ShellExecute(hWnd: HWND; Operation, FileName, Parameters,Directory: PChar; ShowCmd: Integer): HINST; stdcall;
hWnd:用于指定父窗口句柄。当函数调用过程出现错误时,它将作为Windows消息窗口的父窗口。例如,可以将其设置为应用程序主窗口句柄,即Application.Handle,也可以将其设置为桌面窗口句柄(用GetDesktopWindow函数获得)。
Operation:用于指定要进行的操作。为nil时,表示默认执行“open”。
open:操作表示执行由FileName参数指定的程序,或打开由FileName参数指定的文件或文件夹;
print:操作表示打印由FileName参数指定的文件;
explore:操作表示浏览由FileName参数指定的文件夹。
{指定动作, 譬如: open、runas、print、edit、explore、find }
FileName:用于指定要打开的文件名、要执行的程序文件名或要浏览的文件夹名。
Parameters:若FileName参数是一个可执行程序,则此参数指定命令行参数,否则此参数应为nil或PChar(0)。
Directory:用于指定默认目录。
ShowCmd:若FileName参数是一个可执行程序,则此参数指定程序窗口的初始显示方式,否则此参数应设置为0。
SW_HIDE 隐藏
SW_MAXIMIZE 最大化
SW_MINIMIZE 最小化,并把Z order顺序在此窗口之后(即窗口下一层)的窗口激活
SW_RESTORE 激活窗口并还原为初始化大小 SW_SHOW 以当前大小和状态激活窗口
SW_SHOW 用当前的大小和位置显示一个窗口,同时令其进入活动状态
SW_SHOWDEFAULT 以默认方式运行
SW_SHOWMAXIMIZED 激活窗口并最大化
SW_SHOWMINIMIZED 激活窗口并最小化
SW_SHOWMINNOACTIVE 最小化但不改变当前激活的窗口
SW_SHOWNA 以当前状态显示窗口但不改变当前激活的窗口
SW_SHOWNOACTIVATE 以初始化大小显示窗口但不改变当前激活的窗口
SW_SHOWNORMAL 激活并显示窗口,如果是最大(小)化,窗口将会还原。第一次运行程序 时应该使用这个值
函数调用成功,则返回被执行程序的实例。若返回值小于32,则表示出现错误。
返回值:
执行成功会返回应用程序句柄
返回的HINSTANCE可以将它转换为一个整数(%d),并比较它的值大于还是小于32或比较它的错误代码
返回值大于32表示执行成功
返回值小于32表示执行错误
返回值可能的错误有: = 0 {内存不足}
ERROR_FILE_NOT_FOUND = 2; {文件名错误}
ERROR_PATH_NOT_FOUND = 3; {路径名错误}
ERROR_BAD_FORMAT = 11; {EXE 文件无效}
SE_ERR_SHARE = 26; {发生共享错误}
SE_ERR_ASSOCINCOMPLETE = 27; {文件名不完全或无效}
SE_ERR_DDETIMEOUT = 28; {超时}
SE_ERR_DDEFAIL = 29; {DDE 事务失败}
SE_ERR_DDEBUSY = 30; {正在处理其他 DDE 事务而不能完成该 DDE 事务}
SE_ERR_NOASSOC = 31; {没有相关联的应用程序}
Delphi示例:
1 2 3 4 5 | ShellExecute(Handle, 'open' , 'calc.exe' , nil , nil ,SW_SHOWMAXIMIZED ); //打开计算器 ShellExecute(Handle, 'open' , PChar ( 'http://www.baidu.com' ), nil , nil , SW_SHOW); 打开一个网址 ShellExecute(Handle, 'explore' , PChar ( 'c:/windows)' , nil , nil , SW_SHOW); //打开指定目录 ShellExecute(handle, 'open' , '***@163.com' , nil , nil , SW_SHOWNORMAL); //打开邮件窗口发邮件 ShellExecute(Handle, 'open' , 'firefox.exe' , 'about:blank' , nil , SW_SHOWNORMAL); //用火狐浏览器打开 |
用记事本打开指定文件:
1 2 3 4 | ShellExecute(Handle, 'open' , 'notepad.exe' , 'C:\WINDOWS\test.txt' , nil , SW_SHOWNORMAL); ShellExecute( 0 , 'open' , 'notepad.exe' , 'C:\WINDOWS\test.txt' , nil , SW_SHOWNORMAL); ShellExecute( 0 , nil , 'notepad.exe' , 'C:\WINDOWS\test.txt' , nil , SW_SHOWNORMAL); ShellExecute( 0 , nil , 'notepad.exe' , 'test.txt' , 'C:\WINDOWS' , SW_SHOWNORMAL); |
关于此函数中参数的传递,如果传递多个参数中,部分参数有空格存在,可用用双引号,将有空格的参数包起来,这样获取参数 ParamStr(n) 的时候就能正常获取 -- 2023.05.09
1 | ShellExecute(Handle, 'open' , PChar (PNPath), PChar ('aa bb "Tao Roy" dd ff ’ ), nil ,SW_SHOWNORMAL); |
创建日期:2019.12.24 更新时间:2020.03.03/ 2022.06.10 2023.05.09
来源于:https://www.cnblogs.com/guorongtao/p/12089515.html
博客园 滔Roy https://www.cnblogs.com/guorongtao 希望内容对你有所帮助,谢谢!
分类:
Delphi C函数/过程
, WinAPI 丶其他
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报