Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >ShellExecute 启动外部程序 参数详细介绍

ShellExecute 启动外部程序 参数详细介绍

作者头像
hbbliyong
发布于 2018-03-06 02:55:43
发布于 2018-03-06 02:55:43
4K00
代码可运行
举报
文章被收录于专栏:hbbliyonghbbliyong
运行总次数:0
代码可运行

ShellExecute的功能是运行一个外部程序(或者是打开一个已注册的文件、打开一个目录、打印一个文件等等),并对外部程序有一定的控制。

目录

1基本简介

2原型参数

3返回值

4例子

5特殊用法

6VB语言

▪ 概括▪ 定义声明▪ 参数说明▪ 示例

1基本简介编辑

有几个API函数都可以实现这些功能,但是在大多数情况下ShellExecute是更多的被使用的,同时它并不是太复杂。

2原型参数编辑

注意事项:使用该函数时,需添加该头文件:[1]#include <shellapi.h>

ShellExecute函数原型及参数含义如下:

ShellExecute(

hWnd: HWND; {指定父窗口句柄}

Operation: PChar; {指定动作, 譬如: open、runas、print、edit、explore、find[2]}

FileName: PChar; {指定要打开的文件或程序}

Parameters: PChar; {给要打开的程序指定参数; 如果打开的是文件这里应该是 nil}

Directory: PChar; {缺省目录}

ShowCmd: Integer {打开选项}

): HINST;

ShowCmd 参数可选值:SW_HIDE = 0; {隐藏}

SW_SHOWNORMAL = 1; {用最近的大小和位置显示, 激活}

SW_NORMAL = 1; {同 SW_SHOWNORMAL}

SW_SHOWMINIMIZED = 2; {最小化, 激活}

SW_SHOWMAXIMIZED = 3; {最大化, 激活}

SW_MAXIMIZE = 3; {同 SW_SHOWMAXIMIZED}

SW_SHOWNOACTIVATE = 4; {用最近的大小和位置显示, 不激活}

SW_SHOW = 5; {同 SW_SHOWNORMAL}

SW_MINIMIZE = 6; {最小化, 不激活}

SW_SHOWMINNOACTIVE = 7; {同 SW_MINIMIZE}

SW_SHOWNA = 8; {同 SW_SHOWNOACTIVATE}

SW_RESTORE = 9; {同 SW_SHOWNORMAL}

SW_SHOWDEFAULT = 10; {同 SW_SHOWNORMAL}

SW_MAX = 10; {同 SW_SHOWNORMAL}

3返回值编辑

执行成功会返回应用程序句柄

返回的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; {没有相关联的应用程序}

4例子编辑

//调用计算器

ShellExecute(NULL,"open","calc.exe",NULL,NULL,SW_SHOWNORMAL);

//调用记事本

ShellExecute(NULL,"open","NOTEPAD.EXE",NULL,NULL,SW_SHOWNORMAL);

●hWnd:用于指定父窗口句柄。当函数调用过程出现错误时,它将作为Windows消息窗口的父窗口。例如,可以将其设置为应用程序主窗口句柄,即Application.Handle,也可以将其设置为桌面窗口句柄(用GetDesktopWindow函数获得)。

●Operation:用于指定要进行的操作。其中“open”操作表示执行由FileName参数指定的程序,或打开由FileName参数指定的文件或文件夹;“print”操作表示打印由FileName参数指定的文件;“explore”操作表示浏览由FileName参数指定的文件夹。当参数设为nil时,表示执行默认操作“open”。

●FileName:用于指定要打开的文件名、要执行的程序文件名或要浏览的文件夹名。

●Parameters:若FileName参数是一个可执行程序,则此参数指定命令行参数,否则此参数应为nil或PChar(0)。

●Directory:用于指定默认目录。

●ShowCmd:若FileName参数是一个可执行程序,则此参数指定程序窗口的初始显示方式,否则此参数应设置为0。

若ShellExecute函数调用成功,则返回值为被执行程序的实例句柄。若返回值小于32,则表示出现错误。

上述仅仅是ShellExecute函数的标准用法,下面将介绍它的特殊用法。

5特殊用法编辑

如果将FileName参数设置为“http:”协议格式,那么该函数将打开默认浏览器并链接到指定的URL地址。若用户机器中安装了多个浏览器,则该函数将根据Windows 9x/NT注册表中http协议处理程序(Protocols Handler)的设置确定启动哪个浏览器。

格式一:http://网站域名

如:ShellExecute(Handle, "open", "http:// ;

www.neu.edu.cn", NULL, NULL, SW_SHOWNORMAL);

格式二:http://网站域名/网页文件名

如:ShellExecute(Handle, "open"," http:// ;

www.neu.edu.cn/default.htm",NULL,NULL,

SW_SHOWNORMAL);

如果将FileName参数设置为“mailto:”协议格式,那么该函数将启动默认邮件客户程序,如Microsoft Outlook(也包括Microsoft Outlook Express)或Netscape Messanger。若用户机器中安装了多个邮件客户程序,则该函数将根据Windows 9x/NT注册表中mailto协议处理程序的设置确定启动哪个邮件客户程序。

格式一:mailto

如:ShellExecute(Handle,"open", "mailto:", NULL, NULL, SW_SHOWNORMAL);打开新邮件窗口。

格式二:mailto:用户账号@邮件服务器地址

如:ShellExecute(Handle, "open"," mailto:who@mail.neu.edu.cn", NULL, NULL, SW_SHOWNORMAL);打开新邮件窗口,并自动填入收件人地址。若指定多个收件人地址,则收件人地址之间必须用分号或逗号分隔开(下同)。

格式三:mailto:用户账号@邮件服务器地址

subject=邮件主题&body=邮件正文

如:ShellExecute(handle, ‘open’, ‘ mailto:who@mail.neu.edu.cn?subject=Hello&Body=This is a test’,NULL, NULL, SW_SHOWNORMAL);打开新邮件窗口,并自动填入收件人地址、邮件主题和邮件正文。若邮件正文包括多行文本,则必须在每行文本之间加入换行转义字符%0a。

例子(delphi):

在一个应用程序调用c:\Project1.exe;

ShellExecute(handle, 'open',"c:\Project1.exe",'字串内容',NULL, SW_SHOWNORMAL);

在Project1.exe里可以调用:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
procedure TForm1.FormCreate(Sender: TObject);
var i:integer;
begin
for i:=1 to paramcount do
if ParamStr(i)<>'' then showmessage(ParamStr(i));
end;

最后的那个参数,为窗口指定可视性方面的一个命令。

请用下述任何一个常数

SW_HIDE 隐藏窗口,活动状态给另一个窗口

SW_MINIMIZE 最小化窗口,活动状态给另一个窗口

SW_RESTORE 用原来的大小和位置显示一个窗口,同时令其进入活动状态

SW_SHOW 用当前的大小和位置显示一个窗口,同时令其进入活动状态

SW_SHOWMAXIMIZED 最大化窗口,并将其激活

SW_SHOWMINIMIZED 最小化窗口,并将其激活

SW_SHOWMINNOACTIVE 最小化一个窗口,同时不改变活动窗口

SW_SHOWNA 用当前的大小和位置显示一个窗口,不改变活动窗口

SW_SHOWNOACTIVATE 用最近的大小和位置显示一个窗口,同时不改变活动窗口

SW_SHOWNORMAL 与SW_RESTORE相同

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2014-04-17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
ShellExecute使用详解
有三个API函数可以运行可执行文件WinExec、ShellExecute和CreateProcess。 1.CreateProcess因为使用复杂,比较少用。 2.WinExec主要运行EXE文件。如:WinExec(‘Notepad.exe Readme.txt’, SW_SHOW); 3.ShellExecute不仅可以运行EXE文件,也可以运行已经关联的文件。 首先必须引用shellapi.pas单元:uses ShellAPI; 1).标准用法   ShellExecute函数原型及参数含义如下:   function ShellExecute(hWnd: HWND; Operation, FileName, Parameters,Directory: PChar; ShowCmd: Integer): HINST; stdcall;   ●hWnd:用于指定父窗口句柄。当函数调用过程出现错误时,它将作为Windows消息窗口的父窗口。例如,可以将其设置为应用程序主窗口 句柄,即Application.Handle,也可以将其设置为桌面窗口句柄(用GetDesktopWindow函数获得)。   ●Operation:用于指定要进行的操作。其中“open”操作表示执行由FileName参数指定的程序,或打开由FileName参数指定的文件或文件 夹;“print”操作表示打印由FileName参数指定的文件;“explore”操作表示浏览由FileName参数指定的文件夹。当参数设为nil时,表示执 行默认操作“open”。    ●FileName:用于指定要打开的文件名、要执行的程序文件名或要浏览的文件夹名。   ●Parameters:若FileName参数是一个可执行程序,则此参数指定命令行参数,否则此参数应为nil或PChar(0)。   ●Directory:用于指定默认目录。   ●ShowCmd:若FileName参数是一个可执行程序,则此参数指定程序窗口的初始显示方式,否则此参数应设置为0。   若ShellExecute函数调用成功,则返回值为被执行程序的实例句柄。若返回值小于32,则表示出现错误。   上述仅仅是ShellExecute函数的标准用法,下面将介绍它的特殊用法。 2).特殊用法   如果将FileName参数设置为“http:”协议格式,那么该函数将打开默认浏览器并链接到指定的URL地址。若用户机器中安装了多个浏览器 ,则该函数将根据Windows 9x/NT注册表中http协议处理程序(Protocols Handler)的设置确定启动哪个浏览器。   格式一:http://网站域名。   如:ShellExecute(handle, ‘open’, http://www.neu.edu.cn’, nil, nil, SW_SHOWNORMAL);   格式二:http://网站域名/网页文件名。   如:ShellExecute(handle, ‘open’, http://www.neu.edu.cn/default.htm’,nil,nil,SW_SHOWNORMAL);
全栈程序员站长
2022/09/06
1.2K0
wine怎么打开exe_exe是什么格式的文件
  示例,我想要用记事本打开”C:\HDC.TXT”,以正常方式运行:WinExec(pChar(‘notepad c:\taoyoyo.txt’),SW_SHOWNORMAL);
全栈程序员站长
2022/09/18
2.3K0
WinExec、ShellExecute用法详解「建议收藏」
  WinExec主要运行EXE文件,不能运行其他类型的文件,不用引用特别单元。原型是:
全栈程序员站长
2022/09/15
2K0
windows文件在另一程序打开_windows程序设计第7版
参数可选值: SW_HIDE = 0; {隐藏, 并且任务栏也没有最小化图标} SW_SHOWNORMAL = 1; {用最近的大小和位置显示, 激活} SW_NORMAL = 1; {同 SW_SHOWNORMAL} SW_SHOWMINIMIZED = 2; {最小化, 激活} SW_SHOWMAXIMIZED = 3; {最大化, 激活} SW_MAXIMIZE = 3; {同 SW_SHOWMAXIMIZED} SW_SHOWNOACTIVATE = 4; {用最近的大小和位置显示, 不激活} SW_SHOW = 5; {同 SW_SHOWNORMAL} SW_MINIMIZE = 6; {最小化, 不激活} SW_SHOWMINNOACTIVE = 7; {同 SW_MINIMIZE} SW_SHOWNA = 8; {同 SW_SHOWNOACTIVATE} SW_RESTORE = 9; {同 SW_SHOWNORMAL} SW_SHOWDEFAULT = 10; {同 SW_SHOWNORMAL} SW_MAX = 10; {同 SW_SHOWNORMAL}
全栈程序员站长
2022/09/23
7160
ShellExecute, WinExec, CreateProcess区别
ShellExecute   ShellExecute的功能是运行一个外部程序(或者是打开一个已注册的文件、打开一个目录、打印一个文件等等),并对外部程序有一定的控制。
全栈程序员站长
2022/09/18
9930
WinExec、ShellExecute和CreateProcess
有三个API函数可以运行可执行文件WinExec、ShellExecute和CreateProcess。CreateProcess因为使用复杂,比较少用。
全栈程序员站长
2022/09/14
1.1K0
WinExec、ShellExecute和CreateProcess
windows WinExec()
若 函数调用成功,则返回值大于31。若 函数调用失败,则返回值为下列之一:
全栈程序员站长
2022/09/14
5270
WinExec
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/154192.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/07
3850
vc++ 在程序中运行另一个程序的方法
在vc++ 程序中运行另一个程序的方法有三个: WinExec(),ShellExcute()和CreateProcess() 三个SDK函数: WinExec,ShellExecute ,CreateProcess可以实现调用其他程序的要求,其中以WinExec最为简单,ShellExecute比WinExec灵活一些,CreateProcess最为复杂。     WinExec 两个参数,前一个指定路径,后一个指定显示方式。     ShellExecute 可以指定工作目录,并且还可以寻找文件的关联直
用户1198337
2018/01/19
4.1K0
WPF窗口置顶
但是如果其他程序也置顶,后来的置顶就会覆盖之前的置顶,所以我们要保证我们的窗口永远置顶就要做如下设置。
码客说
2022/04/19
2.4K0
WinExec, ShellExecute,CreateProcess 区别
本文转载自WinExec, ShellExecute,CreateProcess 区别 其中以WinExec最为简单,ShellExecute比WinExec灵活一些,CreateProcess最为复杂。
ccf19881030
2020/05/29
1.3K0
WinExec, ShellExecute, CreateProcess
在vc++ 程序中运行另一个程序的方法有三个: WinExec(),ShellExcute()和CreateProcess()
全栈程序员站长
2022/09/18
1.5K0
VC 调用外部程序接口
  返回值     =-1:出现错误     =0:调用成功但是没有出现子进程     >0:成功退出的子进程的id
阳光岛主
2019/02/19
1.2K0
C/C++ 打开外部程序
ShellExecute ShellExecute 在不使用管理员权限运行 VS2019 的情况下仍然可以正常打开任何程序,不报 740 错误。
王瑞MVP
2022/12/28
6970
C/C++ 打开外部程序
python win32api中文手册_python 模拟鼠标和键盘输入
# FindWindow(lpClassName=None, lpWindowName=None) 窗口类名 窗口标题名
全栈程序员站长
2022/11/07
6.6K0
Python PyWin32 模块
Python的生产效率极高,通过使用pypiwin32模块可以快速调用windows API函数,结合Python的高效开发能力,同等时间内比C++能更快的达到目标,pypiwin32模块封装了Win32下的常用定义,函数方法等。
王瑞MVP
2022/12/28
2.2K0
Python PyWin32 模块
关于WinExec和System的比较
WinExec是一个WIN32 API,它的第一个参数必须包含一个可执行文件名,
全栈程序员站长
2022/09/18
1.1K0
C#/.NET基于Topshelf创建Windows服务的守护程序不显示UI界面的问题分析和解决方案
C#/.NET基于Topshelf创建Windows服务的守护程序作为服务启动的客户端桌面程序不显示UI界面的问题分析和解决方案
Rector
2019/05/25
1.4K0
Windows黑客编程技术详解 --第四章 木马启动技术(内含赠书福利)
病毒木马植入模块成功植入用户计算机之后,便会启动攻击模块来对用户计算机数据实施窃取和回传等操作。通常植入和攻击是分开在不同模块之中的,这里的模块指的是DLL、exe或其他加密的PE文件等。只有当前植入模块成功执行后,方可继续执行攻击模块,同时会删除植入模块的数据和文件。模块化开发的好处不单单是便于开发管理,同时也可以减小因某一模块的失败而导致整个程序暴露的可能性。
用户1631416
2019/05/14
4.1K0
CreateProcess时不显示或者不创建窗口 (或用虚拟桌面实现后台调用外部程序)
【方法一:】 将 CreateProcess()的参数dwCreationFlags指定为CREATE_NO_WINDOW,即以不创建窗口方式创建DOS进程。 【参考代码:】 if (!CreateProcess(NULL, szCommand, NULL, NULL, FALSE, CREATE_NO_WINDOW, NULL, NULL, &si, &pi)) 【方法二:】 指定STARTUPINFO结构中WORD wShowWindow为SW_HIDE(但是一定要有这一句: si.dwFlags = STARTF_USESHOWWINDOW|STARTF_USESHOWWINDOW; ),即以不显示窗口方式创建DOS进程。 【参考代码:】 STARTUPINFO si; PROCESS_INFORMATION pi; ::ZeroMemory(&si, sizeof(si)); si.cb = sizeof(si); si.dwFlags = STARTF_USESHOWWINDOW|STARTF_USESHOWWINDOW; si.wShowWindow = SW_HIDE; ::ZeroMemory(&pi, sizeof(pi)); if (!CreateProcess(NULL, szCommand, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) 【方法三:】 将这个DOS窗口放到另外一个桌面上,实现隐藏。 【参考代码:】 si.lpDesktop="NewDesktop"; if (!CreateProcess(NULL, szCommand, NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi)) 方法三的详细原理: 参考http://blog.163.com/madengyao_super/blog/static/2859822020093249493150/ 。 =============================================================================== 【用虚拟桌面实现后台调用外部程序】 最近需要实现一个无线通信的功能,X他XX的,该死的硬件厂商竟然不提供接口函数,只提供一个EXE可执行文件-_-! 这样就需要我在程序里调用他的这个EXE可执行文件。 调用EXE文件,可以用WINEXEC()、SHELLEXECUTE()和CreateProcess()等函数来实现,我这里就用CreateProcess()来调用。 但是一个软件,两个EXE文件,这叫什么??实在没办法,我想在打开的时候不让用户看到这个执行文件:首先调用FINDWINDOW来查找窗口的句柄,之后再用SendMessage()来隐藏窗口,但是还是会有一瞬主窗口被显示出来的,或许你会说我BT吧,但是我实在是不忍心看到…… 那么怎么解决这个问题呢,首先我当然在CreateProcess()上面寻找方法,可惜,它只有一个参数可以设置窗口的默认显示方式,但是一旦这个窗口自己重设了显示方式,它就没有任何作用了。 继续查找文档,这时我看到CreateProcess()的一个参数TStartupInfo中有 lpDesktop这么一个属性,按照MSDN的说法,如果该指针为NULL,那么新建的Process将在当前Desktop上启动,而如果对其赋了一个Desktop的名称后,Process将在指定的Desktop上启动,恩,看来不错,就从它入手了; 首先,建立一个虚拟的Desktop。 const DesktopName: PChar = 'NewDesktop'; FDesktop:= CreateDesktop(DesktopName, nil, nil, 0, GENERIC_ALL, nil); 然后,在CreateProcess的时候,指定程序在我新生成的Desktop上运行: var SI: TStartupInfo; begin FillChar(SI, SizeOf(SI), 0); SI.cb:= SizeOf(SI); SI.lpDesktop:= DesktopName; SI.wShowWindow:= SW_HIDE; SI.dwFlags:= STARTF_USESHOWWINDOW; SI.hStdError:= 0; SI.hStdInput:= 0; SI.hStdOutput:= 0; if not CreateProcess(PChar('……'), nil, nil, nil, True, CREATE_NEW_C
战神伽罗
2019/07/24
4.2K0
相关推荐
ShellExecute使用详解
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验