当前位置:首页 > 芯闻号 > 充电吧
[导读]LPCTSTR lpFile;LPCTSTR lpParameters;LPCTSTR lpDirectory;int nShow;HINSTANCE hInstApp;LPVOID lpIDList

LPCTSTR lpFile;
LPCTSTR lpParameters;
LPCTSTR lpDirectory;
int nShow;
HINSTANCE hInstApp;
LPVOID lpIDList;
LPCTSTR lpClass;
HKEY hkeyClass;
DWORD dwHotKey;
union {
HANDLE hIcon;
HANDLE hMonitor;
} DUMMYUNIONNAME;
HANDLE hProcess;

} SHELLEXECUTEINFO, *LPSHELLEXECUTEINFO;

 

在C#中其结构为

public struct SHELLEXECUTEINFO // 用于 ShellExecuteEx
{
public int cbSize;
public int fMask;
public int hwnd;
public string lpVerb;
public string lpFile;
public string lpParameters;
public string lpDirectory;
public int nShow;
public int hInstApp;
public int lpIDList;
public string lpClass;
public int hkeyClass;
public int dwHotKey;
public int hIcon;
public int hProcess;
}

 

参数详解:

cbSize
存储该结构的长度,以字节为单位。

fMask
一个标志数组,用来设置其他成员的有效性
SEE_MASK_CLASSKEY         0x3
SEE_MASK_CLASSNAME         0x1
SEE_MASK_CONNECTNETDRV     0x80
SEE_MASK_DOENVSUBST         0x200
SEE_MASK_FLAG_DDEWAIT     0x100
SEE_MASK_FLAG_LOG_USAGE     0x4000000
SEE_MASK_FLAG_NO_UI         0x400
SEE_MASK_HMONITOR         0x200000
SEE_MASK_HOTKEY         0x20
SEE_MASK_ICON             0x10
SEE_MASK_IDLIST         0x4
SEE_MASK_INVOKEIDLIST     0xC
SEE_MASK_NOASYNC         0x100000
SEE_MASK_NOCLOSEPROCESS     0x40
SEE_MASK_NOZONECHECKS     0x800000
SEE_MASK_NO_CONSOLE         0x8000
SEE_MASK_UNICODE         0x100000
SEE_MASK_FILEANDURL         0x4000000

 

hwnd
调用这个 ShellExecuteEx 的窗口句柄

lpVerb
设定这个 ShellExecuteEx 的动作,包括:
edit
打开编辑器编辑文档,如果 lpFile 不是一个文档,则这个函数会失败
explore
以 lpFile 为路径打开资源管理器
find
从指定目录开始搜索
open
根据 lpFile 打开对应文件,该文件可以为可执行文件、文档或者文件夹
print
根据 lpFile 打印文档,若 lpFile 不是一个文档则该函数会失败
properties
显示文件或文件夹的属性

lpFile
以 /0 结尾的字符串,指出 lpVerb 的操作对象的路径,被系统支持的操作包括文本的 open 、 print 等,其中 print 要求必须有一个已经注册的打印机,而其他种类的文档会通过系统关联进行查询执行。若要设置一个空的 namespace ,则需要设置 fMask 的值为 see_mask_invokeidlist。
注意: 若 see_mask_invokeidlist 已设置,则可以藉由 lpFile 或者 lpIDList 确定 item 的系统路径或者 PIDL

lpParameters
运行 / 打开程序的参数,如果打开的是一个文档,则该项无效

lpDirectory
指明工作目录的名字,成员没有说明,则默认为当前目录

nShow
说明 ShellExecuteEx 打开的程序将以什么形式出现

hInstApp
如果函数运行成功,该项的值将大于 32 ,否则会是下列错误对应的值
SE_ERR_FNF
没有找到文件
SE_ERR_PNF
没有找到路径
SE_ERR_ACCESSDENIED
拒绝访问
SE_ERR_OOM
内存不足
SE_ERR_DLLNOTFOUND
没有找到动态链接库
SE_ERR_SHARE
不能操作一个以打开的文件
SE_ERR_ASSOCINCOMPLETE
文件关联信息不完整
SE_ERR_DDETIMEOUT
DDE 操作超时
SE_ERR_DDEFAIL
DDE 操作失败
SE_ERR_DDEBUSY
DDE 繁忙
SE_ERR_NOASSOC
没有找到文件关联

lpIDList
一个 itemidlist 结构的地址,用来存储成员的特别标识符,当 fMask 不包括 see_mask_idlist 或 see_mask_invokeidlist 时该项被忽略

lpClass
用以指明文件类别的名字或 GUID ,当 fMask 不包括 see_mask_classname 时该项被忽略

hkeyClass
获得已在系统注册的文件类型的 Handle ,当 fMask 不包括 see_mask_classkey 时该项被忽略

dwHotKey
程序的热键关联,低位存储虚拟关键码( Key Code ),高位存储修改标志位 (HOTKEYF_) ,修改标志为( modifier flags )的详细列表请看 wm_sethotkey 消息的描述,当 fmask 不包括 see_mask_hotkey 时该项被忽略

DUMMYUNIONNAME
hIcon
取得对应文件类型的图标的 Handle ,当 fMask 不包括 SEE_MASK_ICON 时该项被忽略

hMonitor
将文档显示在显示器上的 Handle ,当 fMask 不包括 SEE_MASK_HMONITOR 时该项被忽略

hProcess
用于进行 return 操作的成员,若 fMask 不设为 see_mask_nocloseprocess 则该项值为 null ,即使 fMask 设为 see_mask_nocloseprocess ,若没有进程启动,该项值仍为 null 。即没有新的进程启动,则该项值一只为 null

 

3 、说说 ShellExecuteEx

http://blog.csdn.net/kesalin/category/242901.aspx

 

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 之类的错误代码比较。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

关注「Linux大陆」,一起进步!继 300来行代码带你实现一个能跑的最小Linux文件系统 之后,我们来看看如何60行C代码实现一个shell!在实现它之前,先看看这样做的意义。美是有目共睹的。Unix之美,稍微体会,...

关键字: shell C代码

【c/c++】如何调用【linux】shell命令行命令并获取命令行的输出内容

关键字: shell Linux

当使用Linux系统时,最常见的Shell脚本交互类型是应用菜单(文本菜单),文本菜单的核心是case命令。 H. L.使用case命令完成菜单交互。 让我们在下面创建一个简单的脚本。 在Linux系统中运行文本菜单。

关键字: Linux 文本菜单 shell

由于缺乏直接的内核编译准则,著名的XDA开发人员Droidzone决定专门为开发人员创建自己的内核。 本指南包含一个交互式菜单和以下主题:-获取源代码

关键字: Linux shell ubuntu

任何初学者都可以在Internet上轻松获得基本的Linux和Linux Shel教程。 但是,在使用shell解决现实世界中的问题时,大多数相关的知识和技能在论坛或博客中分散或不够广泛。 要么不容易找到。 如果遇到此问...

关键字: Linux shell 脚本

为了使每个人都容易学习,我们将不断更新大数据学习课程,为每个人提供优质的教育。

关键字: Linux shell 高并发

当使用Linux时,我们经常会遇到终端和外壳程序的概念。 例如,在桌面版Ubuntu中,我们可以右键单击桌面,然后单击“打开终端”以打开终端。 此时,我们可以在终端中输入Linux命令。 可能有人会问,这不是错字吗? 那...

关键字: Linux shell 控制台 终端

《鸟哥的Linux私房菜基础学习篇》内容广泛而全面,对基本概念的解释非常详尽且易于理解。 各种功能和命令的引入伴随着大量的操作示例和详细分析。 这本书是初学者学习Linux的好书。

关键字: Linux shell 主机

保存系统启动相关,或者系统配置相关的变量。在系统中可以通过env命令打印系统当前的环境变量。

关键字: Linux shell ubuntu

GNOME是一个完全由自由软件组成的桌面环境,它可以在GNU / Linux、Solaris和大多数BSD系统上运行。 它是由志愿者开发的,是GNU项目的一部分。

关键字: gnome Linux shell
关闭
关闭