提供 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 这个函数用来执行某个应用程序。
1. bool executePackage( LPCWSTR fileName, LPCWSTR args, LPCWSTR baseDir, bool wait)
2. {
- 3. SHELLEXECUTEINFOW sei = { sizeof (SHELLEXECUTEINFOW) };
- 4.
- 5. sei.fMask = SEE_MASK_NOCLOSEPROCESS | SEE_MASK_FLAG_NO_UI;
- 6.
- 7. sei.lpFile = fileName;
- 8. sei.lpParameters = args;
- 9. sei.lpDirectory = baseDir;
- if (!ShellExecuteExW(&sei)) {
- return false ;
- }
- if (wait) {
- HANDLE hProcess = sei.hProcess;
- if (hProcess != 0) {
- WaitForSingleObject(hProcess, INFINITE);
- CloseHandle(hProcess);
- }
- }
- return true ;
- }
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
个人资料
- 访问:49445次
- 积分:1963分
- 排名:第2559名
- 原创:134篇
- 转载:57篇
- 译文:1篇
- 评论:36条
文章搜索
窗体顶端
窗体底端
文章分类
- Android(2)
- C#(10)
- C/C++(23)
- Debugging Tools(1)
- HTTP / SOCKET(1)
- iphone(3)
- java(2)
- Symbian(2)
- WPhone7(4)
- 情感类(9)
- 社会-与-生活(4)
- 网络(5)
文章存档
- 2011年07月(1)
- 2011年06月(2)
- 2011年04月(1)
- 2011年03月(4)
- 2011年01月(4)
- 2010年12月(2)
- 2010年11月(1)
- 2010年10月(2)
- 2010年09月(3)
- 2010年08月(2)
- 2010年07月(3)
- 2010年06月(1)
- 2010年05月(2)
- 2010年04月(4)
- 2010年03月(3)
- 2010年01月(5)
- 2009年12月(8)
- 2009年11月(2)
- 2009年10月(1)
- 2009年08月(6)
- 2009年07月(10)
- 2009年06月(27)
- 2009年05月(18)
- 2009年04月(6)
- 2009年03月(3)
- 2009年02月(2)
- 2009年01月(3)
- 2008年12月(33)
- 2008年11月(17)
- 2008年10月(16)
阅读排行
- WTL (3185)
- 多普达818上网设置详细图解 (1476)
- 如何制作.CAB安装包及ini文件中的字... (1382)
- cout输出16进制 (1365)
- C# 与 C++ 数据类型对照 (1244)
- Windows Mobile SDK (1129)
- SHELLEXECUTEINFO 和 S... (1121)
- gzip zip 和zlib (1055)
- 配置PPC模拟器网络环境,调试TCP/U... (911)
- COM组件IImagingFactory... (778)
评论排行
- BeginPaint和GetDC有什么区... (6)
- Pocket PC 2003 PC网卡上... (5)
- 关于C++主函数参数--图文并茂 (4)
- windows mobile 程序的打... (2)
- 搜集资料 (2)
- //用new创建一个二维数组,有两种方法... (2)
- cout输出16进制 (1)
- CreateProcess传递参数到_t... (1)
- WinCE电源管理应对有技巧 (1)
- C++win32 SDK下面如何修改应用... (1)
推荐文章
最新评论
mapeijie888: 够清楚 .................遇见你专家了
gejjun: 装了虚拟网卡就有了。
okadler0518: 绘制图像,必须要的是刷新。WM_PAINT就是这个功能。图片的绘制有3-4中方法,也就是函数不一样而...
Wang471981125: 除了这种机制 还有其他的方法来进行图像的绘制吗?
okadler0518: gdc = BeginPaint (hwnd, &ps);gdc = GetDC (hwnd...
okadler0518: 2. WM_PAINT里面,最好用BeginPaint。我一开始都说很清楚了。
okadler0518: 1. break,是switch的循环跳出语句。是c/c++基础。
shmylm4201: 想问一下,假如我写一个WM_PAINT:break;这表示什么意思?还有我想在一个窗口中播放rtsp...
shangwei97: 正要做这方面的工作。谢谢
leewckk:
关机