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 层次结构 " 窗口。
在 GetProperty 和 SetProperty 必须支持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 安全性
- 对直接调用方的完全信任。此成员不能由部分信任的代码使用。有关更多信息,请参见通过部分受信任的代码使用库。