ВСТО Ленты и Интероп - PullRequest
5 голосов
/ 18 июля 2011

Можно ли обрабатывать события нажатия кнопки на пользовательской кнопке ленты из другого приложения с помощью взаимодействия?

Итак, если я создал надстройку приложения Word 2010, которая создает настраиваемую вкладку с несколькими кнопками, а затем я создаю экземпляр приложения Word из приложения форм C # win с помощью взаимодействия, как мне тогда выполнить подключение к события нажатия кнопки на моей настраиваемой ленте из приложения выигрышных форм? В Word 2003 я мог получить доступ к кнопкам через коллекцию CommandBars, а затем просто подключиться к событию click.

После некоторого дальнейшего чтения, я думаю, что я пытаюсь сделать, это выяснить, как получить доступ к объектной модели ленты с помощью взаимодействия. Это возможно?

[редактировать]

Для всех, кто заинтересован. Когда я писал этот вопрос, я знал о другом способе решения моей проблемы, но это означало много дополнительной работы по изменению моей существующей реализации для обновления с Office 2003 на Office 2010, и поэтому я надеялся, что будет отсутствовать доступ к объекту ленты модель вне надстройки VSTO.

Мое решение состоит в том, чтобы использовать IpcChannel для вызовов из надстройки vsto в мое приложение win-forms. Таким образом, мое приложение win-forms инициализирует экземпляр Word, а затем открывает канал сервера. В надстройке vsto я обрабатываю Application.DocumentOpen, и, если документ принадлежит моему приложению, я открываю клиентский канал для своего приложения. Затем я могу перезвонить моему приложению win-forms из надстройки vsto с помощью общих интерфейсов.

Хотя эта техника работает, у нее есть некоторые недостатки. Если вызовы через канал ipc являются синхронными, то мое приложение не может коснуться слова объекта, потому что возникает тупик. Выполнение асинхронных вызовов создает другие проблемы, но я обнаружил, что могу заблокировать окно Word с помощью модального диалогового окна без блокировки.

Хотя это не точный ответ на мой первоначальный вопрос, это альтернатива, и поэтому я подумал, что поделюсь этим с кем-либо еще, кто имеет эту проблему.

Если кто-нибудь знает, как получить доступ к объектной модели ленты за пределами VSTO, мне все равно будет интересно узнать, как это сделать.

1 Ответ

1 голос
/ 13 сентября 2011

Редактировать: Я наконец обнаружил проект code.msdn.microsoft.com , который включает в себя собственные манипуляции с лентой C #.Используйте это вместо любого бизнеса VBA.

Исходное сообщение:

Вам не нужен VSTO для программного доступа к ленте.Посетите Word Articles для краткого примера Word VBA.

Я уверен, что есть способ добиться того же в C #, но я еще не реализовал его.Если я найду один, я обязательно поделюсь.( Ранее я предоставил ответ , содержащий обходной путь C # -VBA.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...