博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
说说ShellExecuteEx
阅读量:6903 次
发布时间:2019-06-27

本文共 2105 字,大约阅读时间需要 7 分钟。

今天来说说ShellExecuteEx这个函数,先翻译MSDN,然后看个样例。

 

ShellExecuteEx Function

对指定应用程序运行某个操作

语法:

BOOL ShellExecuteEx(           LPSHELLEXECUTEINFO lpExecInfo
);

參数:

lpExecInfo

[in, out] 一个指向 结构的指针,用来传递和保存应用程序运行相关的信息。

返回值:

假设函数成功运行就返回TRUE,否则返回 FALSE 。可调用 获取错误信息。

备注:

因为ShellExecuteEx 可以将运行托付给那些由组件对象模型COM激活的Shell 扩展(数据源,上下文菜单句柄,动词实现),因此在调用ShellExecuteEx 之前要先初始化 COM。某些Shell 扩展要求单线程单元模型的COM,在这样的情况下,应当像以下一般初始化COM

 

CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE)
 

在某些情况下 ShellExecuteEx 并没有使用这样的类型的Shell 扩展,这时就无需初始化COM。尽管如此,总是在使用这个函数之前初始化COM是个不错的举措。

假设有多个显示器,而且你指定了一个HWND 同一时候设置lpExecInfo 的成员lpVerb "Properties",那么由ShellExecuteEx 创建的不论什么窗体都有可能显示在不对的位置上。

假设这个函数运行成功,它会设置 SHELLEXECUTEINFO hInstApp 成员为一个大于32的值。假设函数运行失败,hInstApp 成员被设置为(提示失败的原因)。尽管为了兼容16位的windows应用程序hInstApp 被声明成一个句柄,但它并非一个句柄。它仅仅能被转型为整数,并同32SE_ERR_XXX之类的错误代码比較。

提供SE_ERR_XXX 之类的错误代码是为了兼容ShellExecute使用GetLastError能够获得更具体的错误信息。返回值能够使下列之中的一个:

Error

Description

ERROR_FILE_NOT_FOUND

指定文件不存在

ERROR_PATH_NOT_FOUND

指定路径不存在

ERROR_DDE_FAIL

动态数据交换 (DDE) 处理失败

ERROR_NO_ASSOCIATION

没有与制定文件名称扩展相应的应用程序

ERROR_ACCESS_DENIED

訪问指定文件被拒绝

ERROR_DLL_NOT_FOUND

无法找到执行应用程序所必须的库文件

ERROR_CANCELLED

这个函数要求用户提供很多其它其它信息(译注:比方弹出对话框),但请求用户被取消了

ERROR_NOT_ENOUGH_MEMORY

没有足够的内存来运行操作

ERROR_SHARING_VIOLATION

共享违规发生了

Windows 95/98/Me: ShellExecuteEx Microsoft Layer for Unicode (MSLU)所支持。为了使用这个函数,必须加入额外的文件到应用程序中去,请參考:.

 

函数信息:

Minimum DLL Version

shell32.dll version 3.51 or later

Custom Implementation

No

Header

shellapi.h

Import library

shell32.lib

Minimum operating systems

Windows NT 4.0, Windows 95

Unicode

Implemented as ANSI and Unicode versions

 

 

 

以下举例说明怎样使用这个函数,executePackage 这个函数用来运行某个应用程序。

 

bool executePackage(LPCWSTR fileName, LPCWSTR args, LPCWSTR baseDir, bool wait) { SHELLEXECUTEINFOW sei = { sizeof(SHELLEXECUTEINFOW) }; sei.fMask = SEE_MASK_NOCLOSEPROCESS | SEE_MASK_FLAG_NO_UI; sei.lpFile = fileName; sei.lpParameters = args; sei.lpDirectory = baseDir; if (!ShellExecuteExW(&sei)) { return false; } if (wait) { HANDLE hProcess = sei.hProcess; if (hProcess != 0) { WaitForSingleObject(hProcess, INFINITE); CloseHandle(hProcess); } } return true; }

 

转载地址:http://nuldl.baihongyu.com/

你可能感兴趣的文章
java.lang.ClassFormatError:...illegal JVM_CONSTANT_Class name: [L[Ljava/lang/String;;错误
查看>>
Python安装与环境变量及集成开发环境配置
查看>>
与Servlet相关的接口
查看>>
webapi中的三大家族
查看>>
C# 只移除最后一个字符
查看>>
Scala class和case class的区别
查看>>
豆瓣电影TOP250全套下载
查看>>
试着用H5编的一个学员管理页面
查看>>
听写英语单词的小程序
查看>>
mariadb或者mysql查看某个库相关的用户授权信息
查看>>
「About Blockchain(一)」达沃斯年会上的区块链
查看>>
sqlite 实现时间的累加
查看>>
常用命令 tcl & shell
查看>>
关于MFC布局
查看>>
JS复习
查看>>
wx模拟鼠标事件
查看>>
JavaScript高级程序设计--对象,数组(栈方法,队列方法,重排序方法,迭代方法)...
查看>>
VS环境下的makefile编译
查看>>
VS2010下测试程序性能瓶颈
查看>>
微信小程序获取Access_token和页面URL生成小程序码或二维码
查看>>