Есть ли способ захватить горячие клавиши/ярлыки в Excel VSTO, используя только C# и без VBA?

Итак, я хочу зафиксировать некоторые ключевые команды в нашей надстройке Excel VSTO на уровне документа. Кажется, я не могу найти способ сделать это, кроме как использовать VBA и поговорить с VBA над нашей надстройкой. Любая помощь/примеры будут очень признательны.

Я использую Эксель 2007.


person Phobis    schedule 19.02.2010    source источник
comment
Группа поддержки Visual Studio Office Development (VSOD) написала об этом статью: blogs.msdn.com/b/vsod/archive/2010/04/08/   -  person Michael Zlatkovsky - Microsoft    schedule 05.03.2013


Ответы (2)


Вы можете сделать это только через API-вызовы подкласса Excel и следить за ключевыми командами. Это старше, но все еще применимо.

person Todd Main    schedule 21.02.2010
comment
ссылка не работает - person Leo Gurdian; 19.07.2016

  1. Один из методов предполагает использование стороннего решения от Addin-Express. Их продукт включает возможность добавления сочетания клавиш в качестве свойства к командам меню ленты.

  2. Другой способ заключается в использовании низкоуровневых перехватчиков клавиатуры с помощью некоторых API Win32, которые обычно называются подклассами Windows. Вот отличное объяснение с примером кода, как это сделать. Обратите внимание, что единственная «дополнительная» вещь, которую вам нужно сделать, чтобы заставить этот код «работать» в VSTO, — это переместить метод SetHook() в событие Startup, а метод UnhookWindowsHookEx() — в событие Shutdown.

    Прочитайте статью Стивена Туба на MSDN здесь.< /а>

  3. Наконец, используется свойство OnAction класса Addin. Этот метод требует использования некоторых VBA (в терминах метода обратного вызова, который указывает на базовую надстройку .net) и работает нормально, если вы готовы распространять некоторые VBA в своем решении ( т. е. проект xls или doc с проектом vba или, возможно, собственную надстройку). Обратите внимание, что вам также нужно будет отметить comvisible = true и предоставить метод GetAutomationServiceObject, чтобы ваш VBA мог ссылаться на вашу надстройку из кода VBA.

    см. здесь тему на нем...

person Anonymous Type    schedule 25.05.2010
comment
Похоже, ссылка Джеффа Дарста больше не работает. Любая идея, где найти эту статью сейчас? Спасибо! - person Michael Zlatkovsky - Microsoft; 05.03.2013
comment
@MichaelZlatkovsky-Microsoft См. эту ссылку из наркива: microsoft.public.vsnet.vstools.office.narkive.com/a5kXwA4E/ - person Ricardo; 19.10.2017