说说ShellExecuteEx
今天来说说ShellExecuteEx这个函数,先翻译MSDN,然后看个样例。
ShellExecuteEx Function
对指定应用程序运行某个操作
语法:
BOOL ShellExecuteEx(
LPSHELLEXECUTEINFO lpExecInfo
);
參数:
lpExecInfo
[in, out] 一个指向 SHELLEXECUTEINFO 结构的指针,用来传递和保存应用程序运行相关的信息。
返回值:
假设函数成功运行就返回TRUE,否则返回 FALSE 。可调用 GetLastError 获取错误信息。
备注:
因为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 成员被设置为SE_ERR_XXX(提示失败的原因)。尽管为了兼容16位的windows应用程序hInstApp 被声明成一个句柄,但它并非一个句柄。它仅仅能被转型为整数,并同32或SE_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)所支持。为了使用这个函数,必须加入额外的文件到应用程序中去,请參考:Microsoft Layer for Unicode on Windows Me/98/95 Systems.
函数信息:
|
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;
}
说说ShellExecuteEx的更多相关文章
- 【转】vc++MCF/C++/C中怎样让应用程序获得或以管理员权限运行 ,ShellExecuteEX编程 --- 获取管理员权限
ShellExecuteEX编程 --- 获取管理员权限:http://blog.csdn.net/jhui163/article/details/5873027 怎样让你的应用程序获得管理员权限:就 ...
- ShellExecuteEx的使用方法
关于怎样在c++中启动外部的exe程序,之前看到在百度一搜就看到了: ShellExecute(this->m_hWnd,"open","calc.exe" ...
- 转:ShellExecute函数与ShellExecuteEx函数
ShellExecute函数 ShellExecute函数原型及參数含义例如以下: function ShellExecute(hWnd: HWND; Operation, FileName, Par ...
- ShellExecuteEX打开iqy文件导致excel hang的原因分析
1. 问题 当在console中调用API ShellExecuteEx打开"test.iqy"文件时,发现excel会hang住,console退出后excel才会响应,但直接双 ...
- C/C++ ShellExecuteEx调用exe可执行文件
本系列文章由 @YhL_Leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/49591995 以商业的软件Enblen ...
- API函数ShellExecute与ShellExecuteEx用法
ShellExecute: 1.函数功能:你可以给它任何文件的名字,它都能识别出来并打开它.2.函数原型: HINSTANCE ShellExecute( HWND hwnd, LPCTSTR lpO ...
- VC程序获取管理员权限
一: 编译程序的时候设置一下 在项目属性--连接器--清单文件--UAC执行级别改为requireAdministrator 二: void GainAdminPrivileges(CString s ...
- 转:Delphi 6 实用函数
来自: daocaoren0824, 时间: -- ::, ID: 再给你一份 程序员实用函数 {▎▎▎▎▎▎▎▎▎▎▎▎▎▎▎▎▎▎▎▎▎▎▎▎▎▎▎▎▎▎▎▎▎▎▎▎▎▎▎} {▎ ▎} {▎ 大 ...
- System.Diagnostics.Process.Star的用法
System.Diagnostics.Process.Start(); 能做什么呢?它主要有以下几个功能: 1.打开某个链接网址(弹窗). 2.定位打开某个文件目录. 3.打开系统特殊文件夹,如“控制 ...
随机推荐
- FZU 2108(dfs模拟,大数取余)
K Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status Pr ...
- EEPlat vs saleforce 配置 Knowledge Article 演示样例
==================================================================================================== ...
- XML读写
private string fileName = HttpContext.Current.Server.MapPath("~/Student.xml"); protected v ...
- linux上备份Oracle时EXP-00091的错误解决方法
unix/linux上备份Oracle时EXP-00091的错误解决方法 unix/linux上备份数据时的错误解决方法 EXP-00091: Exporting questionable stati ...
- 9、Khala实现0.01版QQ
这次来个有界面的. 登录界面: 主界面: 1.服务端开发: 只需创建一个类ChatType(./examples/HelloKhala/src/ChatType.cpp),在该类型中,核心为创建的两个 ...
- Gengxin讲STL系列目录
引言:有人催我写关于STL的博客#(滑稽) STL嘛,昨晚有人一直逼问我STL名字的由来——STL = Standard Template Library,标准模板库,惠普实验室开发的一 ...
- TCP的状态
在TCP层,有个FLAGS字段,这个字段有以下几个标识:SYN, FIN, ACK, PSH, RST, URG. 其中,对于我们日常的分析有用的就是前面的五个字段. 它们的含义是: SYN表示建立连 ...
- mysql创建存储过程
-- 创建CREATE PROCEDURE proDelAccountById(IN in_accountid int) BEGIN -- 执行sql预计 END -- 调用 ; CALL proDe ...
- C# 导出Excel Aspose.Cells
public void ExportExcel() { Workbook workbook = new Workbook(); //工作簿 workbook.Worksheets.Clear(); w ...
- php web qq第三方登录
官方api地址:http://wiki.connect.qq.com/%E5%87%86%E5%A4%87%E5%B7%A5%E4%BD%9C_oauth2-01.去qq互联上注册申请成为开发者,并创 ...