博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
visual studio 插件开发(5) -- 在任意位置添加自己的菜单
阅读量:5982 次
发布时间:2019-06-20

本文共 1657 字,大约阅读时间需要 5 分钟。

      Vsx开发中常见的一个需求就是需要在某个特定的菜单中添加项目。比如我需要在代码视图中右击时,在Snippetgroup中加入自己的菜单项(如下图所示)。
 
 
 我们已经涉及了如何添加一个菜单。我觉得,在任何一处添加自己的菜单项难点有三:
 
  1. 如何确定Button节点中的Guid (即下面第二幅图中的{1496A755-94DE-11D0-8C3F-00C04FC2AAE2}是如何得到的)
  2. 如何确保Button节点中的id属性没有被使用过 (即下面第二幅图中的 value="9999" 这个9999为什么这么设置,我怎么知道这个ID在这个group中没有被使用过呢?)
  3. 如何找到Button节点的Parent (即下面第一幅图中的Parent的guid和id怎么得到的)
       
 
下面我就按照我添加这个菜单项时候的寻找步骤来添加这个菜单项,仅供参考。
 
一. 快速找到某个菜单的Guid:Id
 
    既然我们要在Insert Snippet的上面添加一个菜单项。那么比较好的方式就是看看Insert Snippet这个菜单项目在vsct中是怎么设置的。如果知道了Insert Snippet在vsct是怎么设置的,那么我们的工作就已经完成了一大半了。从 我们可以知道如何利用一个注册文件来获得各个菜单项的具体Guid:Id信息。步骤如下:
  1. 将下面这段代码保存为“任意文件名.reg“ 的注册表文件吗,然后运行此注册表文件。注意代码中的"VisualStudio\10.0",如果你说用的是vs2008开发,那么请改为\9.0
Windows Registry Editor Version 5.00[HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\10.0\General]"EnableVSIPLogging"=dword:00000001
 
    2.   重启VS后,在想要查看的菜单项上按住shift+ctrl的同时,单击左键。如果配置正确,此时应该会弹出一个对话框(下图是在Insert Snippet上单击的结果)
可以看到我们已经能够获得Sinnpet菜单项的guid和cmdID了。到这边为止,我们提出的难点一已经解决。
 
二.根据Guid:Id得到默认配置信息
 
     得到了Guid和CmdID之后,我们需要在C:\Program Files\Microsoft Visual Studio 2010 SDK\VisualStudioIntegration\Common\Inc(具体的盘符取决于你安装的VS SDK位置)中搜索所有的文件,我的做法是全选里面的文件后右击选择使用Notepad++打开(一个编辑器)。
 
 
在所有打开的文件中所有我们找到的Guid ”1496A755-94DE-11D0-8C3F-00C04FC2AAE2“ ,此时文件定位到了一个叫stdidcmd.h的文件中(只有这一个文件匹配),
在这个文件中我们再次搜索cmdID的值323,发现了这么一个匹配项(如下图所示)。果然就是我们要找的Snippet的菜单项。
 
 
有了ECMD_INSERTSNIPPET字符串以后,我们在所有文件中搜索这个字符串,结果如下:
 
 
注意其中的Line 2378:这个匹配项。我们进入这个匹配文件去看看具体的内容可以发现,我们已经找到了Snippet这个菜单项的parent是怎么设置的了。所以,第三个难点被解决。
 
 
接下来看看第二个难点,其实这个难点我们在查找323这个值的时候就可以顺便解决了。我的方法是找没有出现在323那个匹配文件中的数字。比如,我们找到的323这个匹配文件中还有许许多多的Id已经被定义好了,选定一个认为没有定义过的数字,然后用这个数字在此文件中搜索,如果没有匹配的项那么这个值你就可以使用了。很简单,不是么:)
 
写到这里,我们已经能够成功的添加开头指定的菜单项了。过程看起来繁琐,其实真正找起来也就很短的时间而已。这篇仅仅是我自己的经验,希望给你一些帮助!

转载地址:http://efrox.baihongyu.com/

你可能感兴趣的文章
安全半月谈:Mozilla遭入侵、GitHub被DDoS
查看>>
DevOps采用现状情况报告
查看>>
Eclipse发布MicroProfile 1.4和2.0
查看>>
Mozilla工程师观点:开源不赚钱,因为它不是为赚钱而设计的
查看>>
经纬中国熊飞:底层技术创业的春天来了
查看>>
亚马逊发布 Corretto 8 GA 版本
查看>>
云监控状态调查:公有云和混合云的监控成熟度落后于传统数据中心
查看>>
半数以上国产手游曾使用他开源的引擎:Cocos和王哲的故事 | 二叉树视频
查看>>
物联网技术周报第 145 期: ESP8266 和 IFTTT 自制 WiFi 智能秤
查看>>
KPN iTV的敏捷转型之旅
查看>>
IBM和Red Hat会对Java模块系统(Jigsaw)投反对票
查看>>
35岁的程序员是“都挺好”还是“都挺惨”?\n
查看>>
红帽收购混合云管理提供商NooBaa,混合云爆发节点临近!
查看>>
i4o开源项目增强LINQ索引功能
查看>>
腾讯研发总监揭秘腾讯敏捷研发引擎之谜(上)
查看>>
华为敏捷/DevOps实践:如何开好迭代计划会议
查看>>
Oracle计划新的移动OpenJDK项目
查看>>
持续交付:巨大的益处也伴随着巨大的挑战
查看>>
Java EE Security API(JSR-375)获得通过
查看>>
2018年测试状况调查
查看>>