shell_2
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#中其結(jié)構(gòu)為
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;
}
?
參數(shù)詳解:
cbSize
存儲該結(jié)構(gòu)的長度,以字節(jié)為單位。
fMask
一個標(biāo)志數(shù)組,用來設(shè)置其他成員的有效性
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
調(diào)用這個 ShellExecuteEx 的窗口句柄
lpVerb
設(shè)定這個 ShellExecuteEx 的動作,包括:
edit
打開編輯器編輯文檔,如果 lpFile 不是一個文檔,則這個函數(shù)會失敗
explore
以 lpFile 為路徑打開資源管理器
find
從指定目錄開始搜索
open
根據(jù) lpFile 打開對應(yīng)文件,該文件可以為可執(zhí)行文件、文檔或者文件夾
print
根據(jù) lpFile 打印文檔,若 lpFile 不是一個文檔則該函數(shù)會失敗
properties
顯示文件或文件夾的屬性
lpFile
以 /0 結(jié)尾的字符串,指出 lpVerb 的操作對象的路徑,被系統(tǒng)支持的操作包括文本的 open 、 print 等,其中 print 要求必須有一個已經(jīng)注冊的打印機,而其他種類的文檔會通過系統(tǒng)關(guān)聯(lián)進行查詢執(zhí)行。若要設(shè)置一個空的 namespace ,則需要設(shè)置 fMask 的值為 see_mask_invokeidlist。
注意: 若 see_mask_invokeidlist 已設(shè)置,則可以藉由 lpFile 或者 lpIDList 確定 item 的系統(tǒng)路徑或者 PIDL
lpParameters
運行 / 打開程序的參數(shù),如果打開的是一個文檔,則該項無效
lpDirectory
指明工作目錄的名字,成員沒有說明,則默認為當(dāng)前目錄
nShow
說明 ShellExecuteEx 打開的程序?qū)⒁允裁葱问匠霈F(xiàn)
hInstApp
如果函數(shù)運行成功,該項的值將大于 32 ,否則會是下列錯誤對應(yīng)的值
SE_ERR_FNF
沒有找到文件
SE_ERR_PNF
沒有找到路徑
SE_ERR_ACCESSDENIED
拒絕訪問
SE_ERR_OOM
內(nèi)存不足
SE_ERR_DLLNOTFOUND
沒有找到動態(tài)鏈接庫
SE_ERR_SHARE
不能操作一個以打開的文件
SE_ERR_ASSOCINCOMPLETE
文件關(guān)聯(lián)信息不完整
SE_ERR_DDETIMEOUT
DDE 操作超時
SE_ERR_DDEFAIL
DDE 操作失敗
SE_ERR_DDEBUSY
DDE 繁忙
SE_ERR_NOASSOC
沒有找到文件關(guān)聯(lián)
lpIDList
一個 itemidlist 結(jié)構(gòu)的地址,用來存儲成員的特別標(biāo)識符,當(dāng) fMask 不包括 see_mask_idlist 或 see_mask_invokeidlist 時該項被忽略
lpClass
用以指明文件類別的名字或 GUID ,當(dāng) fMask 不包括 see_mask_classname 時該項被忽略
hkeyClass
獲得已在系統(tǒng)注冊的文件類型的 Handle ,當(dāng) fMask 不包括 see_mask_classkey 時該項被忽略
dwHotKey
程序的熱鍵關(guān)聯(lián),低位存儲虛擬關(guān)鍵碼( Key Code ),高位存儲修改標(biāo)志位 (HOTKEYF_) ,修改標(biāo)志為( modifier flags )的詳細列表請看 wm_sethotkey 消息的描述,當(dāng) fmask 不包括 see_mask_hotkey 時該項被忽略
DUMMYUNIONNAME
hIcon
取得對應(yīng)文件類型的圖標(biāo)的 Handle ,當(dāng) fMask 不包括 SEE_MASK_ICON 時該項被忽略
hMonitor
將文檔顯示在顯示器上的 Handle ,當(dāng) fMask 不包括 SEE_MASK_HMONITOR 時該項被忽略
hProcess
用于進行 return 操作的成員,若 fMask 不設(shè)為 see_mask_nocloseprocess 則該項值為 null ,即使 fMask 設(shè)為 see_mask_nocloseprocess ,若沒有進程啟動,該項值仍為 null 。即沒有新的進程啟動,則該項值一只為 null
?
3 、說說 ShellExecuteEx
http://blog.csdn.net/kesalin/category/242901.aspx
?
ShellExecuteEx Function
對指定應(yīng)用程序執(zhí)行某個操作
語法:
BOOL?ShellExecuteEx(??????
????LPSHELLEXECUTEINFO?lpExecInfo
?
?
?
?
);
?
?
參數(shù):
lpExecInfo
[in, out]? 一個指向 SHELLEXECUTEINFO 結(jié)構(gòu)的指針,用來傳遞和保存應(yīng)用程序執(zhí)行相關(guān)的信息。
返回值:
如果函數(shù)成功執(zhí)行就返回 TRUE ,否則返回 FALSE 。可調(diào)用 GetLastError 獲取錯誤信息。
備注:
由于 ShellExecuteEx能夠?qū)?zhí)行委托給那些由組件對象模型 COM 激活的 Shell 擴展(數(shù)據(jù)源,上下文菜單句柄,動詞實現(xiàn)),因此在調(diào)用 ShellExecuteEx之前要先初始化 COM 。某些 Shell 擴展要求單線程單元模型的 COM ,在這種情況下,應(yīng)當(dāng)像下面一般初始化 COM :
?
CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE)
?
?
?
?
在某些情況下 ShellExecuteEx并沒有使用這種類型的 Shell 擴展 ,這時就無需初始化 COM 。雖然如此,總是在使用這個函數(shù)之前初始化 COM 是個不錯的舉措。
如果有多個顯示器,并且你指定了一個 HWND同時設(shè)置 lpExecInfo的成員 lpVerb為 "Properties" ,那么由 ShellExecuteEx創(chuàng)建的任何窗口都有可能顯示在不正確的位置上。
如果這個函數(shù)執(zhí)行成功,它會設(shè)置 SHELLEXECUTEINFO的 hInstApp成員為一個大于 32 的值。如果函數(shù)執(zhí)行失敗, hInstApp成員被設(shè)置為 SE_ERR_XXX (提示失敗的原因)。雖然為了兼容 16 位的 windows 應(yīng)用程序 hInstApp被聲明成一個句柄,但它并不是一個句柄。它只能被轉(zhuǎn)型為整數(shù),并同 32 或 SE_ERR_XXX 之類的錯誤代碼比較。