CMINVOKECOMMANDINFOEX 結構 (shobjidl_core.h)
包含快捷方式功能表命令的擴充資訊。 此結構是 CMINVOKECOMMANDINFO 的擴充版本,允許使用 Unicode 值。
語法
typedef struct _CMINVOKECOMMANDINFOEX {
DWORD cbSize;
DWORD fMask;
HWND hwnd;
LPCSTR lpVerb;
LPCSTR lpParameters;
LPCSTR lpDirectory;
int nShow;
DWORD dwHotKey;
HANDLE hIcon;
LPCSTR lpTitle;
LPCWSTR lpVerbW;
LPCWSTR lpParametersW;
LPCWSTR lpDirectoryW;
LPCWSTR lpTitleW;
POINT ptInvoke;
} CMINVOKECOMMANDINFOEX;
成員
cbSize
類型: DWORD
這個 結構的大小,以位元組為單位。 此成員應該由 IContextMenu::InvokeCommand 的呼叫端填入,並由實作測試,以了解結構是 CMINVOKECOMMANDINFOEX 結構, 而不是 CMINVOKECOMMANDINFO。
fMask
類型: DWORD
零或下列一或多個旗標會設定為表示所需的行為,並指出要使用結構中的其他欄位。
CMIC_MASK_HOTKEY
dwHotKey 成員有效。
CMIC_MASK_ICON
hIcon 成員有效。 從 Windows Vista 起,不會使用此旗標。
CMIC_MASK_FLAG_NO_UI
IContextMenu::InvokeCommand 的實作無法顯示使用者介面元素 (例如,執行命令時) 錯誤訊息。
CMIC_MASK_UNICODE
快捷方式功能表處理程式應該使用 lpVerbW、 lpParametersW、 lpDirectoryW 和 lpTitleW 成員,而不是其 ANSI 對等專案。 因為某些快捷方式功能表處理程式可能不支援 Unicode,所以您也應該在 lpVerb、 lpParameters、 lpDirectory 和 lpTitle 成員中傳遞有效的 ANSI 字串。
CMIC_MASK_NO_CONSOLE
如果快捷方式功能表處理程式需要建立新的進程,它通常會建立新的控制台。 設定 CMIC_MASK_NO_CONSOLE 旗標會隱藏建立新的控制台。
CMIC_MASK_HASLINKNAME
lpTitle 成員包含快捷方式檔案的完整路徑。 與 CMIC_MASK_HASTITLE搭配使用。
CMIC_MASK_HASTITLE
lpTitle 成員有效。
CMIC_MASK_FLAG_SEP_VDM
只有在參考 16 位 Windows 應用程式時,此旗標才有效。 如果設定,快捷方式指向的應用程式會在私人 Virtual DOS Machine (VDM) 中執行。 請參閱<備註>。
CMIC_MASK_ASYNCOK
IContextMenu::InvokeCommand 的實作可以啟動新的線程或進程來處理呼叫,而且不需要在叫用的函式完成時封鎖。 例如,如果動詞是 「delete」 , IContextMenu::InvokeCommand 呼叫可能會在刪除所有專案之前傳回。 由於這是諮詢,因此呼叫指定此旗標的應用程式,如果它們不熟悉叫用動詞動詞的實作,則無法保證會接受此要求。
CMIC_MASK_NOASYNC
Windows Vista 和更新版本。 IContextMenu::InvokeCommand 的實作應該是同步的,不會在完成之前傳回。 因為建議這樣做,所以呼叫指定此旗標的應用程式,如果它們不熟悉叫用的動詞命令實作,則無法保證會接受此要求。
CMIC_MASK_SHIFT_DOWN
按下SHIFT鍵。 請使用此選項,而不是輪詢自叫用動詞之後可能變更的鍵盤目前狀態。
CMIC_MASK_CONTROL_DOWN
按下 CTRL 鍵。 請使用此選項,而不是輪詢自叫用動詞之後可能變更的鍵盤目前狀態。
CMIC_MASK_FLAG_LOG_USAGE
指出 IContextMenu::InvokeCommand 的實作可能會想要追蹤針對 [最近使用的檔] 功能表等功能所叫用的專案。
CMIC_MASK_NOZONECHECKS
請勿執行區域檢查。 此旗標可讓 ShellExecuteEx 略過 IAttachmentExecute 放置的區域檢查。
CMIC_MASK_PTINVOKE
ptInvoke 成員有效。
hwnd
類型: HWND
視窗的句柄,該視窗是快捷方式功能表的擁有者。 延伸模組也可以使用此句柄作為它所顯示之任何消息框或對話框的擁有者。 呼叫端必須指定合法的 HWND,以做為任何可能顯示的 UI 的擁有者視窗。 從 UI 線程呼叫時無法指定 HWND, (已建立的視窗) 將會導致 IContextMenu::InvokeCommand 呼叫的實作中發生重新進入和可能的 Bug。
lpVerb
類型: LPCSTR
Null 終止字串的位址,指定要執行之命令的語言獨立名稱。當應用程式啟動命令時,這個成員通常是字串。 系統會為下列命令字串提供預先定義的常數值。
常數 | 命令字串 |
---|---|
CMDSTR_RUNAS | “RunAs” |
CMDSTR_PRINT | 列印” |
CMDSTR_PREVIEW | “預覽” |
CMDSTR_OPEN | “Open” |
這不是固定集合;操作功能表處理程式可以發明新的標準動詞,而應用程式可以叫用它們。
如果標準動詞存在且功能表處理程式未實作標準動詞,它必須傳回失敗碼,讓下一個處理程式能夠處理這個動詞。 若無法這麼做,將會中斷系統中的功能,包括 ShellExecute。
或者,這個參數可以是MAKEINTRESOURCE (offset) 其中 offset 是命令要執行的功能表標識元移。或者,這個參數可以是MAKEINTRESOURCE) 。實作可以使用 IS_INTRESOURCE 宏來偵測採用此替代方法。 當使用者選擇功能表命令時,Shell 會使用此替代方案。
lpParameters
類型: LPCSTR
選用參數。 這個成員一律是Shell延伸模組所插入功能表項的 NULL 。
lpDirectory
類型: LPCSTR
選擇性的工作目錄名稱。 這個成員一律是Shell延伸模組所插入功能表項的 NULL 。
nShow
類型: int
如果命令顯示視窗或啟動應用程式,則會傳遞至 ShowWindow 函式的一組SW_值。
dwHotKey
類型: DWORD
選擇性的鍵盤快捷方式,可指派給命令所啟動的任何應用程式。 如果 fMask 成員未指定 CMIC_MASK_HOTKEY,則會忽略此成員。
hIcon
類型: HANDLE
要用於命令所啟動之任何應用程式的圖示。 如果 fMask 成員未指定 CMIC_MASK_ICON,則會忽略此成員。
lpTitle
類型: LPCSTR
ASCII 標題。
lpVerbW
類型: LPCWSTR
Unicode 動詞,適用於可以使用它的命令。
lpParametersW
類型: LPCWSTR
Unicode 參數,適用於可以使用它的命令。
lpDirectoryW
類型: LPCWSTR
Unicode 目錄,適用於可使用它的命令。
lpTitleW
類型: LPCWSTR
Unicode標題。
ptInvoke
類型: POINT
叫用命令的點。 如果 fMask 成員未指定 CMIC_MASK_PTINVOKE,則會忽略此成員。 這個成員在 Internet Explorer 4.0 之前無效。
備註
雖然 IContextMenu::InvokeCommand 宣告指定 pici 參數的 CMINVOKECOMMANDINFO 結構,但它也可以接受 CMINVOKECOMMANDINFOEX 結構。 如果您要實作這個方法,則必須檢查 cbSize ,以判斷已傳遞哪一個結構。
根據預設,所有16位Windows應用程式都會在單一共用VDM中以線程的形式執行。 個別執行的優點是當機只會終止單一 VDM;在相異 VM 中執行的任何其他程式都會繼續正常運作。 此外,在個別 VM 中執行的 16 位 Windows 應用程式具有個別的輸入佇列。 這表示,如果一個應用程式暫時停止回應,個別 VM 中的應用程式會繼續接收輸入。 個別執行的缺點是需要大量記憶體才能執行。
CMINVOKECOMMANDINFOEX 本身定義於 Shobjidl.h 中,但您也必須包含 Shellapi.h,才能完整存取所有旗標。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows 2000 Professional、Windows XP [僅限桌面應用程式] |
最低支援的伺服器 | Windows 2000 Server [僅限桌面應用程式] |
標頭 | shobjidl_core.h (包含 Shobjidl.h) |