SHELLEXECUTEINFO 结构



ShellExecuteEx 的参数。


在C++中其结构为


typedef
struct _SHELLEXECUTEINFO {
DWORD cbSize;
ULONG fMask;
HWND hwnd;
LPCTSTR lpVerb;
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
结尾的字符串,指出
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_idlistsee_mask_invokeidlist时该项被忽略

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

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

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


参考文档:


SHELLEXECUTEINFO Structure (MSDN)