Что такое идентификатор меню «Организовать использование» в Visual Studio 2010?

Я создаю расширение Visual Studio 2010, используя шаблон пакета, а не надстройку.

Я хочу добавить пункт меню в группу меню «Организация использования», которая появляется при щелчке правой кнопкой мыши в файле .cs. Для этого мне нужен guid и идентификатор этой группы меню.

<Button guid="myCmdSet" id="myButton" priority="0x0100" type="Button">
    <Parent guid="guidSHLMainMenu (I think?)" id="???" />
    <Icon guid="guidImages" id="bmpPic1" />
    <Strings>
      <CommandName>myCommand</CommandName>
      <ButtonText>Do Stuff</ButtonText>
    </Strings>
  </Button>

Я просмотрел здесь и здесь и здесь. В основном все вокруг MSDN. Опубликованы ли они, и кто-нибудь знает, что это такое?

РЕДАКТИРОВАТЬ: я нашел соответствующее меню через это метод, но у меня до сих пор нет способа найти GUID/ID группы меню, чего я действительно хочу.


person lettucemode    schedule 13.06.2012    source источник
comment
Попробуйте записать временный макрос и выполнить эту команду. Он должен кодироваться в макросе.   -  person Preet Sangha    schedule 13.06.2012
comment
Это не работает, потому что я не пытаюсь получить идентификатор команды.   -  person lettucemode    schedule 13.06.2012


Ответы (1)


OMG, я потратил на это 3 часа :D Вот решение:

<?xml version="1.0" encoding="utf-8"?>
<CommandTable xmlns="http://schemas.microsoft.com/VisualStudio/2005-10-18/CommandTable" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <Extern href="stdidcmd.h"/>
  <Extern href="vsshlids.h"/>
  <Extern href="msobtnid.h"/>
  <Commands package="guidVSPackage1Pkg">
    <Buttons>      
      <Button guid="guidCSharpGrpId" id="mySuperCommand" priority="0x0200" type="Button">
        <Parent guid="guidCSharpGrpId" id="IDG_CSHARP_CTX_ORGANIZE" />
        <Icon guid="guidImages" id="bmpPic1" />
        <Strings>
          <CommandName>mySuperCommand</CommandName>
          <ButtonText>My super command</ButtonText>
        </Strings>
      </Button>
    </Buttons>
    <Bitmaps>
      <Bitmap guid="guidImages" href="Resources\Images_32bit.bmp" usedList="bmpPic1, bmpPic2, bmpPicSearch, bmpPicX, bmpPicArrows"/>
    </Bitmaps>
  </Commands>
  <Symbols>
    <!-- This is the package guid. -->
    <GuidSymbol name="guidVSPackage1Pkg" value="{F066e284-dcab-11d2-b551-00c04f68d4db}" />
    <GuidSymbol name="guidCSharpGrpId" value="{5d7e7f65-a63f-46ee-84f1-990b2cab23f9}">
      <IDSymbol name="IDG_CSHARP_CTX_ORGANIZE" value="0x3618" />
      <IDSymbol name="mySuperCommand" value="0x0100" />
    </GuidSymbol>
    <GuidSymbol name="guidImages" value="{cff24f4c-767f-48ee-aff4-6bdf8218cba0}" >
      <IDSymbol name="bmpPic1" value="1" />
      <IDSymbol name="bmpPic2" value="2" />
      <IDSymbol name="bmpPicSearch" value="3" />
      <IDSymbol name="bmpPicX" value="4" />
      <IDSymbol name="bmpPicArrows" value="5" />
    </GuidSymbol>
  </Symbols>
</CommandTable>

Вы должны разместить guidCSharpGrpId и IDG_CSHARP_CTX_ORGANIZE, потому что они недоступны в "стандартном" наборе идентификаторов. Под «стандартными» я подразумеваю файлы, размещенные в каталоге VisualStudioIntegration\Common\Inc в файлах *.h. Они скрыты в библиотеке cslangsvcui.dll.

Чтобы получить эти идентификаторы, я использовал VS Command Table PowerToy. Его можно загрузить отсюда: http://archive.msdn.microsoft.com/VSCTPowerToy.

Проверьте это также как этот поток: http://social.msdn.microsoft.com/Forums/en-US/vsx/thread/697245ac-1596-4d6a-b55c-f5b01b69a583

В случае, если это решение не сработает для вас из-за некоторых руководств и т. д., я заархивировал проект на свой SkyDrive: https://skydrive.live.com/#cid=6A19F3A9B7B8E017&id=6A19F3A9B7B8E017!16486

Надеюсь это поможет :)

person Marcin Robaszyński    schedule 23.06.2012
comment
Да, эта ссылка на форум social.msdn на самом деле является моим вопросом :) У меня уже давно есть решение, но я не смог найти способ удалить награду. Но так как вы потратили время... - person lettucemode; 25.06.2012