Динамические горячие клавиши для расширения Visual Studio

Есть ли способ, которым я могу динамически добавлять глобальные горячие клавиши из расширения / пакета Visual Studio?

Объявление горячих клавиш в файле *.vsct моего пакета не вариант, потому что я не знаю, какие горячие клавиши должны быть доступны во время выполнения - внутри моего расширения есть своего рода плагин-система, которая может динамически добавлять / удалять горячие клавиши.

Добавление фильтра сообщений работает только тогда, когда.NET запускает цикл сообщений, что не относится к VS.

Спасибо за вашу поддержку!

1 ответ

Решение

Лучший способ добавить горячие клавиши - это определить свои команды без каких-либо привязок клавиш. По сути убедитесь, что команда MyExtension.MyOperation доступен, но не привязан ни к одному ключу.

Во время выполнения вы можете взять DTE.Command объект для вашей команды расширения. Это доступно через Commands собственность на DTE объект. Оттуда вы можете изменить ключ, к которому привязана конкретная команда, установив Binding имущество.

Например, если вы хотите изменить привязку к CTRL+o, я бы сделал следующее

command.Binding = "Global::ctrl+o";

Синтаксис для связывания ключей на самом деле довольно хорошо документирован на MSDN.

Другие вопросы по тегам