Вы можете перехватить любую команду, поступающую из пользовательского интерфейса Visual Studio в VSPackage. Для этого следует подписаться на нужное событие DTE.Events.CommandEvents
. Вы должны передать GUID и идентификатор в CommandEvents.
private void Initialize()
{
var dte = GetService(typeof(SDTE)) as EnvDTE.DTE;
_startCommandEvents = dte.Events.CommandEvents["{5EFC7975-14BC-11CF-9B2B-00AA00573819}", 295];
_startCommandEvents.BeforeExecute += OnLeaveBreakMode;
}
private void OnBeforeStartCommand(string guid, int id, object customIn, object customOut, ref bool cancelDefault)
{
//your event handler this command
}
Ваш обработчик событий имеет параметр ref bool cancelDefault
, передавая в cancelDefault
значение TRUE, вы отменяете команду VS, тем самым заменяя поведение VS своим.
Чтобы получить команду GUID и Id, вы можете использовать функцию ведения журнала VSIP. Чтобы включить эту функцию, установите значение ключа реестра:
[HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\<version>\General] "EnableVSIPLogging"=dword:00000001
и перезапустите интегрированную среду разработки Visual Studio. Затем, используя Ctrl-Shift, щелкните пункт меню, и вы получите сообщение, подобное этому:
![Guid и Id команда](https://i.stack.imgur.com/oZGm8.png)
Guid и CmdID из сообщения являются обязательными параметрами для CommandEvents.
Если вы внедряете новый язык (создаете новый тип проекта), правильнее добавить пользовательский механизм отладки и интеграцию с MSBuild. Вы можете увидеть примеры такой реализации в IronPython или проекты Nemerle.
person
Mikhail Shcherbakov
schedule
14.04.2013