Добавьте элемент context meu во все файлы и папки в обозревателе решений с помощью vspackage

Я хочу добавить пункт меню в контекстное меню всех файлов и папок в обозревателе решений. Я смог добавить свой пункт меню в узел проекта с этой записью в файле vsct ..

<Menu guid="guidERAPackageAlphaCmdSet" id="ERAInsightMenu" priority="0x0700" type="Context">
    <Parent guid="guidSHLMainMenu" id="IDG_VS_CTXT_PROJECT_ADD" />
    <Strings>
      <ButtonText>ERA Insight</ButtonText>
      <CommandName>ERA Insight</CommandName>
    </Strings>  
  </Menu>

Я хочу получить это в контекстном меню всех файлов и папок в обозревателе решений. Какой идентификатор мне следует использовать? Есть ли место, где я могу найти идентификаторы для всех меню в Visual Studio?


person niruj    schedule 20.11.2012    source источник


Ответы (2)


Я знаю, что это устарело, но, надеюсь, это кому-то поможет.

Если вы посмотрите на верхнюю часть файла vsct, вы увидите следующее:

  <!--This header contains the command ids for the menus provided by the shell. -->
  <Extern href="vsshlids.h"/>

Путь будет отличаться в зависимости от версии, но вы сможете найти его по тому же пути, что и:

C: \ Program Files (x86) \ Microsoft Visual Studio 12.0 \ VSSDK \ VisualStudioIntegration \ Common \ Inc

Этот файл содержит список всех констант, а некоторые из них имеют описания.

Вот пример того, что можно использовать для исходного вопроса из файла:

// Common Item Node context menu
#define IDM_VS_CTXT_ITEMNODE          0x0430

// Folder Node context menu
#define IDM_VS_CTXT_FOLDERNODE        0x0431
person Daniel    schedule 14.07.2015
comment
Я обнаружил, что IDM_VS_CTXT_ITEMNODE работает для меня для файлов в проекте, но IDM_VS_CTXT_FOLDERNODE, похоже, не работает для меня для папок (мой обратный вызов статуса запроса вообще не вызывается). Может быть уловка, когда используется контекстное меню IDM_VS_CTXT_FOLDERNODE ... - person webjprgm; 30.09.2017
comment
Я нашел недокументировано IDM_VS_CTXT_SOLNNODE для настройки контекстного меню узла решения. Большое Вам спасибо - person oleksa; 07.07.2020

Вы можете найти идентификаторы всех корневых меню (это означает, что они не показывают дочерние элементы контекстных меню), используя трюк, описанный в этом сообщении:

http://blogs.msdn.com/b/dr._ex/archive/2007/04/17/using-enablevsiplogging-to-identify-menus-and-commands-with-vs-2005-sp1.aspx

Подводя итог, вам нужно добавить раздел реестра в следующем месте: HKEY_CURRENT_USER/Software/Microsoft/VisualStudio/<your vs version>/General, а ключ к заднице имеет DWORD тип с именем EnableVSIPLogging (вы должны установить его в 1)

затем, прежде чем щелкнуть правой кнопкой мыши, чтобы отобразить контекстное меню, удерживайте CTRL и SHIFT, и вы увидите окно сообщения, содержащее все идентификаторы, которые вам нужны

person ppetrov    schedule 30.05.2013