VSX-3 VSCT文件
关于VSPackage中的VSCT,算是VSX开发中比较重要的一个成员。 我这里给出LearnVSXNow!系列文章关于VSCT的链接,除了#14有译文。
看完上面几篇文章,也就对VSCT有一些基本的认识了,能做什么,不能做什么应该了解。
在我项目中,一个功能,可能会出现在很多不同的地方,诸如新建项(New Item)的功能,可以在项目文件中点击右键,在添加(Add)菜单中找到,也可以在菜单中的项目(Project)中找到添加新项(Add New Item)。 如何把想要的功能添加到指定位置? 这里有一篇文章:
作者介绍了一种快速找到某个菜单的Guid:Id的方法,大家可以参考参考。
起初也没有使用这种方法,而是不停的翻看MSDN相关文档,诸如这篇。 但是所罗列的根本满足不了我的需求,且不可能一个一个去尝试。 最后发现其实在sdk中是有默认的vsct文件的,参考msdn
也就是上面所说的四个文件:
- SharedCmdDef.vsct
- SharedCmdPlace.vsct
- ShellCmdDef.vsct
- ShellCmdPlace.vsct
在其中不仅能查到所需要的GUID和ID,且能参考一些想要的东西,诸如助记符,图标,关系使用CommandPlacement,快捷键实现等等问题。 但在使用中发现,几个vsct文件,并没有完全概括vs2010所有的命令和菜单和组,有些是找不到的。
助记符
助记符意思是说点Alt键后,菜单出现下划线的键位。 例如说在vs2010中打开一个文件,使用助记符的话,点下Alt键,依次点击f-o-f,即可弹出打开文件的对话框。
在项目中,我需要在菜单栏中增加一个菜单,别的菜单都有相应的助记符,当我在VSCT中如此定义一个Button的文本时:
交易开发(&R)
告诉我没有该实体,随后我才想到了xml的实体&应该表示为&,而期间我居然还试过使用WPF的方式去定义:交易开发(_R),自然都是徒劳无功的。 但是如果你查看SharedCmdDef.vsct和ShellCmdDef.vsct,你会发现满篇的&。
CommandPlacement
起初是不知道CommandPlacement的存在的。 当时写一个新建交易的功能,要出现在很多个地方,所以定义了多个新建交易的Button,然后依次给其Parent赋值。 当然一直认为,绝对有解决方案,只是暂时不知道怎么做。 还没有看后续的关于VSCT的文章时,已经从上面的两个文件SharedCmdPlace.vsct和ShellCmdPlace.vsct中找到了答案。
快捷键
快捷键也能从上面的两个文件中找到,诸如:
<KeyBindingguid="guidVSStd97"id="cmdidPaste"editor="guidVSStd97"key1="V"mod1="Control"/>
综合VS2010,可以得到一些全面的认识,比如说guidVSStd97表示的可能是全局的意思,而如果对于使用两个快捷键:
<KeyBindingguid="guidVSStd2K"id="cmdidOBGoToSearchCmd"editor="guidVSStd97"key1="K"mod1="Control"key2="R"mod2="Control"/>
你也能找到相应的原型,还有诸如如何定义功能键:
<KeyBindingguid="guidVSStd97"id="cmdidGotoDefn"editor="guidVSStd97"key1="VK_F12"/>
如果有要同时按Control和Shift怎么办:
<KeyBindingguid="guidVSStd97"id="cmdidPasteNextTBXCBItem"editor="guidVSStd97"key1="V"mod1="Control Shift"/>
如何查找
说了很多找到这几个文件的好处,那如何把自己想要的功能放入指定的菜单内仍然是一个问题。 其实我上面已经提到,这四个文件几乎包括了所有VS2010的命令、菜单和组,这样我们完全可以使用最笨的办法,找到现有的Button,看它的Parent。
比如说我需要在新建项目这里增加一个Button:新建交易工程

那么我就可以用New Project的关键字搜索这四个文件,最后能定位到这个Button:
<Buttonguid="guidVSStd97"id="cmdidNewProject"priority="0x0000"type="Button"><Iconguid="guidSHLMainMenu"id="2"/><CommandFlag>DynamicVisibility</CommandFlag><CommandFlag>TextMenuUseButton</CommandFlag><Strings><ButtonText>New &Project...</ButtonText><MenuText>&Project...</MenuText><ToolTipText>New Project</ToolTipText></Strings></Button>
然后我在查找这个ID:cmdidNewProject,这里能找到它的一些关系,属于那个Group,这时候根据情况不一样,可能还要找这个Group的Parent,当然,最终能确定所需要的Group的Guid和Id。
如果你装的是中文也没有关系,可以学我当初使用&P的关键字去查找,或者使用key1="A",一样能轻松定位。 当然,总有些东西是无法满足的,比如说我需要把Button添加在一个项目的文件夹上的右键菜单中,这时候就有点难为我的样子,因为我没法在这里面找到相应的(或许我还没有找到),这时候就可以使用上面所说的修改注册表的办法去做。而且据我所看,这个办法估计也是vs开发人员留的调试办法。
VSX-3 VSCT文件的更多相关文章
- Visual Studio Package扩展——vsct文件简介
首先我们使用向导生成一个package的扩展,里面就会发现一个vsct文件.vsct文件的全称是Visual Studio Command Table,它其实就是一个xml文件,通过一定的规则来描述v ...
- VSX规划Package文件
VSX是VS扩展,可以针对不同项目编写插件,虽然接触VSX的时间并不多,但是当了解VSX后深刻感受到VSX的魅力. VSX的材料比较少,配置文件也很繁琐,当初我也走了不少弯路. 这篇文章将帮助您更好的 ...
- Visual Studio插件开发基础
Visual Studio插件主要有两种:Add-in 和 VSX(Visual Studio eXtensibility) 两者区别可参考这篇文章:Visual Studio Extensions ...
- Visual Studio 插件开发资源
微软官方MSDN 官方MSDN永远是最大而全的电子字典Visual Studio Software Development Kit ,不过它的资料虽然详细,但没有一定的基础的话直接使用它的话有点无从入 ...
- 强迫症的福利——我的第一个VS插件,对using排序!
首先来看看VS自带的using整理功能: 长短不一,看着让人生厌!这是哪个门子的整理?越来越乱了好吗! 难道就没有一款,由短到长——金字塔搬的排序方案吗? 于是各种百度: “VS 插件 using排序 ...
- 扩展Visual Studio IDE
安装visual studio 2012 SDK 下载visual studio SDK. 安装可能遇到的问题 安装时报错:Visual Studio 2012 Install Fails: Prog ...
- VS简单注释插件——VS插件开发续
VS简单注释插件——VS插件开发续 前些时候,我写过一篇<VS版权信息插件——初试VS插件开发小记>分享过一个用于添加注释信息的插件,但那个插件有几个问题: 不能添加带块注释(/**/), ...
- 【小试插件开发】给Visual Studio装上自己定制的功能来提高代码调试效率
背后的故事 随着项目需求的逐步增加,后端开发框架在我手上也慢慢重构为组件开发模式,整体结构类似于NopCommence.在这种结构中,每个组件所在的类库项目其实是生成到网站项目里指定的一个目录的,然后 ...
- Visual Studio Package 插件开发之自动生成实体工具
前言 这一篇是VS插件基于Visual Studio SDK扩展开发的,可能有些朋友看到[生成实体]心里可能会暗想,T4模板都可以做了.动软不是已经做了么.不就是读库保存文件到指定路径么…… 我希望做 ...
随机推荐
- jquery中$.ajax()方法使用详解
1.url 说明:发送请求的地址(默认为当前页面),要求是String类型的参数,比如是.net下,"~wexin(控制器)/getweinxinmenu(动作)", 2.type ...
- react+webpack 引入字体图标
在使用react+webpack 构建项目过程中免不了要用到字体图标,在引入过程中报错,不能识别字体图标文件中的@符,报错 Uncaught Error: Module parse failed: U ...
- TP5.0: 显示错误信息
在TP5中,我们运行的代码有错误无法执行时,只显示页面错误,而不显示错误信息 对我我来讲是无法接受滴!!毕竟我还是个小渣渣,查看了百度,解决方案是: 在application/config,php中找 ...
- 【2017-06-17】QtGui基础控件:QSpinBox及QDoubleSpinBox
今天开始一个新的系列,主要是翻译并摘录QtGui中基础空间的常用方法,并做一些简单的实验程序: 我觉得这是一个炒冷饭的行为,但有时候冷饭不能不炒,不热不好吃,而且也很容易发霉. 其实到现在这种状态,对 ...
- 【转】Android Support 包里究竟有什么
随着 Android 5.0 Lollipop 的发布,Android 又为我们提供了更多的支持包,但是我相信大部分开发者都同我之前一样不知道这些包里究竟有些什么东西,我们应该在什么时候使用它.现在, ...
- 将xml转换成Json,数组,对象格式转换方法
xml字符串:$simplexml 转换成Json格式:json_encode($simplexml) 转换成数组格式:json_decode(json_encode($simplexml),TRUE ...
- 如何让HttpWebRequest使用指定网络接口传输数据
using System; using System.Net; class Program { public static void Main () { foreach (var ip in Dns. ...
- AI-Info-Micron-Insight:5G、人工智能和即将到来的移动革命
ylbtech-AI-Info-Micron-Insight:5G.人工智能和即将到来的移动革命 1.返回顶部 1. 5G.人工智能和即将到来的移动革命 人们都说自己的手机“智能”,但究竟有多智能?凡 ...
- mysql常用命令添加外键主键约束存储过程索引
数据库连接 mysql -u root -p123456 查看表 show databases 创建数据库设置编码 create table books character set utf8; 创建用 ...
- 【洛谷P1379】八数码难题(广搜、A*)
八数码难题 题目描述 一.广搜: 首先要考虑用什么存每一个状态 显然每个状态都用一个矩阵存是很麻烦的. 我们可以考虑将一个3*3的矩阵用一个字符串或long long 存. 每次扩展时再转化为矩阵. ...