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

快捷菜单处理程序应使用 lpVerbWlpParametersWlpDirectoryWlpTitleW 成员,而不是其 ANSI 等效项。 由于某些快捷菜单处理程序可能不支持 Unicode,因此还应在 lpVerblpParameterslpDirectorylpTitle 成员中传递有效的 ANSI 字符串。

CMIC_MASK_NO_CONSOLE

如果快捷菜单处理程序需要创建新进程,它通常会创建新控制台。 设置 CMIC_MASK_NO_CONSOLE 标志会禁止创建新控制台。

CMIC_MASK_HASLINKNAME

lpTitle 成员包含快捷方式文件的完整路径。 与 CMIC_MASK_HASTITLE 结合使用。

注意 Windows Vista 及更高版本的系统不支持此值。
 

CMIC_MASK_HASTITLE

lpTitle 成员有效。

注意 Windows Vista 及更高版本的系统不支持此值。
 

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 Vista 之前,此结构在 Shlobj.h 中声明。
 

要求

要求
最低受支持的客户端 Windows 2000 专业版、Windows XP [仅限桌面应用]
最低受支持的服务器 Windows 2000 Server [仅限桌面应用]
标头 shobjidl_core.h (包括 Shobjidl.h)