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
仅当引用基于 Windows 的 16 位应用程序时,此标志才有效。 如果设置,快捷方式指向的应用程序在专用虚拟 DOS 计算机中运行 (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
请勿执行区域检查。 此标志允许 ShellExecuteExecuteEx 绕过 IAttachmentExecute 到位的区域检查。
CMIC_MASK_PTINVOKE
ptInvoke 成员有效。
hwnd
类型:HWND
作为快捷菜单所有者的窗口的句柄。 扩展还可以将此句柄用作其显示的任何消息框或对话框的所有者。 调用方必须指定一个合法的 HWND,该 HWND 可用作可能显示的任何 UI 的所有者窗口。 从 UI 线程 (已创建) 窗口的 UI 线程调用时未能指定 HWND 将导致 IContextMenu::InvokeCommand 调用的实现中出现重新进入和可能的 bug。
lpVerb
类型: LPCSTR
以 null 结尾的字符串的地址,该字符串指定要执行的命令与语言无关的名称。当应用程序激活命令时,此成员通常是字符串。 系统为以下命令字符串提供预定义的常量值。
一直 | 命令字符串 |
---|---|
CMDSTR_RUNAS | “运行方式” |
CMDSTR_PRINT | “Print” |
CMDSTR_PREVIEW | “预览版” |
CMDSTR_OPEN | “打开” |
这不是固定集:上下文菜单处理程序可以发明新的规范谓词,应用程序可以调用它们。
如果规范谓词存在,并且菜单处理程序未实现规范谓词,则必须返回失败代码,使下一个处理程序能够处理此谓词。 如果不这样做,将破坏系统中的功能,包括 ShellExecute。
或者,此参数可以是 MAKEINTRESOURCE (偏移量) 其中 offset 是要执行的命令的菜单标识符偏移量,而不是指针。实现可以使用 IS_INTRESOURCE 宏来检测是否使用了此替代项。 当用户选择菜单命令时,Shell 会使用此替代方法。
lpParameters
类型: LPCSTR
可选参数。 对于 Shell 扩展插入的菜单项,此成员始终为 NULL 。
lpDirectory
类型: LPCSTR
可选的工作目录名称。 对于 Shell 扩展插入的菜单项,此成员始终为 NULL 。
nShow
类型: int
如果命令显示窗口或启动应用程序,则要传递给 ShowWindow 函数的一组SW_值。
dwHotKey
类型:DWORD
一个可选的键盘快捷方式,用于分配给由 命令激活的任何应用程序。 如果 fMask 成员未指定 CMIC_MASK_HOTKEY,则忽略此成员。
hIcon
类型: 句柄
用于由 命令激活的任何应用程序的图标。 如果 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 以确定传递了哪个结构。
默认情况下,所有基于 Windows 的 16 位应用程序在单个共享 VDM 中作为线程运行。 单独运行的优点是崩溃仅终止单个 VDM;在其他 VM 中运行的任何其他程序继续正常运行。 此外,在单独的 VM 中运行的基于 Windows 的 16 位应用程序具有单独的输入队列。 这意味着,如果一个应用程序暂时停止响应,则单独的 VM 中的应用程序将继续接收输入。 单独运行的缺点是需要大量内存才能实现。
CMINVOKECOMMANDINFOEX 本身在 Shobjidl.h 中定义,但还必须包含 Shellapi.h 才能完全访问所有标志。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows 2000 专业版、Windows XP [仅限桌面应用] |
最低受支持的服务器 | Windows 2000 Server [仅限桌面应用] |
标头 | shobjidl_core.h (包括 Shobjidl.h) |