IVsUIHierarchy.ExecCommand 方法

执行命令在 UI 层次结构 " 窗口中的特定项,或者在层次结构。

命名空间:  Microsoft.VisualStudio.Shell.Interop
程序集:  Microsoft.VisualStudio.Shell.Interop(在 Microsoft.VisualStudio.Shell.Interop.dll 中)

语法

声明
Function ExecCommand ( _
    itemid As UInteger, _
    ByRef pguidCmdGroup As Guid, _
    nCmdID As UInteger, _
    nCmdexecopt As UInteger, _
    pvaIn As IntPtr, _
    pvaOut As IntPtr _
) As Integer
int ExecCommand(
    uint itemid,
    ref Guid pguidCmdGroup,
    uint nCmdID,
    uint nCmdexecopt,
    IntPtr pvaIn,
    IntPtr pvaOut
)

参数

  • itemid
    类型:System.UInt32
    [in] 命令的影响的项的标识符传递给 IVsUIHierarchy。有关 itemid 值列表,请参见 VSITEMID。对于单选,此值是实际项 ID对于多重选择,设置 itemid 等于 VSITEMID_SELECTION
  • pguidCmdGroup
    类型:System.Guid%
    [in, unique] 命令组的唯一标识符;可以是指定标准组的 nullnull 引用(在 Visual Basic 中为 Nothing) 。在 nCmdID 传递的所有命令必须属于 pguidCmdGroup指定的组
  • nCmdID
    类型:System.UInt32
    [in] 命令执行。此命令必须属于组指定与 pguidCmdGroup。
  • nCmdexecopt
    类型:System.UInt32
    [in] 值描述对象应如何执行命令。
    [1|1 个] nCmdexecopt 值
    [1|2] 值
    [1|3]“描述”
    [2|1] OLECMDEXECOPT_DODEFAULT
    [2|2] 0
    [2|3] 基于默认行为提示用户输入中,
    [3|1] OLECMDEXECOPT_PROMPTUSER
    [3|2] 1
    [3|3] 在获取用户输入之后执行命令。
    [4|1] OLECMDEXECOPT_DONTPROMPTUSER
    [4|2] 2
    [4|3] 执行命令,但不想提示用户。例如,单击打印工具栏按钮使文档直接打印,而无需用户输入。
    [5|1] OLECMDEXECOPT_SHOWHELP
    [5|2] 3
    [5|3] 显示相应的命令的帮助,但是,不执行任何操作。
  • pvaIn
    类型:System.IntPtr
    [in, unique] 对包含输入参数的 VARIANTARG 结构的指针。可以为 nullnull 引用(在 Visual Basic 中为 Nothing)。
  • pvaOut
    类型:System.IntPtr
    [in, out, unique] 接收命令输出的 VARIANTARG 结构。可以为 nullnull 引用(在 Visual Basic 中为 Nothing)。

返回值

类型:System.Int32
如果方法成功,则返回 S_OK。如果失败,它会返回一个错误代码。

备注

COM 签名

从 vsshell.idl:

HRESULT IVsUIHierarchy::ExecCommand(
   [in] VSITEMID itemid,
   [in, unique] const GUID * pguidCmdGroup,
   [in] DWORD nCmdID,
   [in] DWORD nCmdexecopt,
   [in, unique] VARIANT * pvaIn,
   [in, out, unique]VARIANT* pvaOut
);

此方法类似于 Exec 方法,不同之处在于, Exec 方法不支持层次结构,,而 IVsUIHierarchy.ExecCommand 方法包括 itemid 参数,标识层次结构项目命令适用。

,当 UI 层次结构 " 窗口具有焦点时,该环境执行 IVsUIHierarchy.ExecCommand 。 UI 层次结构 " 窗口委托的任何菜单或工具栏命令将为选择的公用父级的 UIHierarchy 对象。 这提供了处理的选项命令仅适用的 UIHierarchy 对象,当 UI 层次结构 " 窗口具有焦点。 示例包括 删除移除 命令。 不能通过 Exec处理这些命令。 活动项目中 IOleCommandTarget 在环境的常用命令传送包括,因此,即使另一个窗口 (例如,文件) 具有焦点。 向项目中处理 删除移除 ,请使用 IVsHierarchyDeleteHandler

如果 UI 层次结构 " 窗口不是活动窗口,但是,它仍是有效的层次结构,涉及活动层次结构的意味着它是最后层次结构中选择了,则所有命令通过 IOleCommandTarget 接口发送而不是 IVsUIHierarchy 接口。 例如,因此,如果所选内容从 解决方案资源管理器 更改为任务列表,然后 解决方案资源管理器 有效的层次结构,但是,活动窗口是任务列表。 在这种情况下,使用有效的层次结构相关,例如将项添加到项目的所有命令,通过 IOleCommandTarget 接口发送。

,因为它们是从层次结构中的窗口之外,不会获得不应当由 IVsUIHierarchy 方法处理类似添加项目项的命令。 为了 UI 层次结构 窗口具有焦点,或在该层次结构中的特定项操作处理命令的仅使用 IVsUIHierarchy

命令组 VSConstants.VsUIHierarchyWindowCmdIds 用于处理直接 UI 处理在 UI 层次结构 " 窗口。

GetPropertySetProperty 必须支持VSHPROPID_EditLabel 编辑项目的名称启用。

应只处理 IVsUIHierarchy 接口,下面的标准命令:

// {5efc7975-14bc-11cf-9b2b-00aa00573819}

DEFINE_GUID(CLSID_StandardCommandSet97, 0x5efc7975, 0x14bc, 0x11cf, 0x9b, 0x2b, 0x00, 0xaa, 0x00, 0x57, 0x38, 0x19);

#define cmdidCopy 15

#define cmdidCut 16

#define cmdidDelete 17

#define cmdidPaste 26

#define cmdidRemove 168

#define cmdidRename 150

.NET Framework 安全性

请参见

参考

IVsUIHierarchy 接口

Microsoft.VisualStudio.Shell.Interop 命名空间