VSTO 功能区和互操作

发布于 2024-11-25 04:03:45 字数 880 浏览 1 评论 0原文

是否可以使用互操作处理来自另一个应用程序的自定义功能区按钮上的按钮单击事件?

因此,如果我创建了一个 Word 2010 应用程序加载项,它创建了一个带有多个按钮的自定义选项卡,然后我使用互操作从 C# win 表单应用程序实例化了一个 Word 应用程序,那么我将如何连接到按钮单击事件在 win 表单应用程序的我的自定义功能区上?使用 Word 2003,我可以通过 CommandBars 集合访问按钮,然后简单地连接到单击事件。

经过进一步阅读后,我想我想做的是找出如何使用互操作访问功能区对象模型。这可能吗?

[编辑]

对于任何有兴趣的人。当我写这个问题时,我知道解决我的问题的另一种方法,但这意味着需要大量额外的工作来更改我现有的实现以从 Office 2003 升级到 Office 2010,所以我希望能够访问 Ribbon 对象VSTO 外接程序外部的模型。

我的解决方案是使用 IpcChannel 从 vsto 加载项调用我的 win-forms 应用程序。因此,我的 win-forms 应用程序初始化 Word 实例,然后打开服务器通道。在 vsto 加载项中,我处理 Application.DocumentOpen,如果该文档归我的应用程序所有,我会打开一个到我的应用程序的客户端通道。然后,我可以通过使用共享接口从 vsto 加载项回调我的 win-forms 应用程序。

虽然这种技术有效,但它确实有一些缺点。如果通过 ipc 通道的调用是同步的,那么我的应用程序将无法触及单词对象,因为会发生死锁。进行异步调用会带来其他问题,但我发现我可以使用模式对话框阻止 Word 窗口,而不会导致死锁。

虽然这不是我原来问题的确切答案,但它是一种替代方案,所以我想我会与其他遇到此问题的人分享。

如果有人确实知道如何访问 VSTO 之外的 Ribbon 对象模型,我仍然有兴趣知道如何操作。

Is it possible to handle button click events on a custom ribbon button from another application using interop?

So if I've created a Word 2010 application add-in which creates a custom tab with several buttons and then I instantiate a Word application from a C# win forms application using interop, how would I then go about wiring up to the button click events on my custom ribbon from the win forms app? With Word 2003 I could access the buttons through the CommandBars collection and then simply wire up to the click event.

After some further reading, I guess what I'm trying to do is find out how to get access to the Ribbon object model using interop. Is this possible?

[Edit]

For anyone that's interested. When I wrote this question I knew of another way to solve my problem, but it means a lot of extra work changing my existing implementation to upgrade from Office 2003 to Office 2010, and so I was hoping there would be away to access the Ribbon object model outside of a VSTO add-in.

My solution is to use an IpcChannel to make calls from the vsto add-in to my win-forms application. So my win-forms application initialises the Word instance and then opens up a server channel. In the vsto add-in I handle Application.DocumentOpen and if the document is owned by my application I open a client channel to my application. I can then make calls back to my win-forms app from the vsto add-in through the use of shared interfaces.

While this technique works, it does have some draw backs. If the calls through the ipc channel are synchronous then my application can't touch the word object because a deadlock occurs. Making asynchronous calls introduces other problems, but I found that I could block the Word window with a modal dialog without ending up deadlocked.

While this isn't an exact answer to my original question, it is an alternative and so I thought I would share this with anyone else having this problem.

If anyone does know how to access the Ribbon object model outside of VSTO I would still be interested to know how.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

单调的奢华 2024-12-02 04:03:45

编辑:我终于发现了code.msdn.microsoft.com 项目 自动化 Office 功能区。使用它代替任何 VBA 业务。

原始帖子:


您不需要 VSTO 以编程方式访问功能区。请访问 Word 文章,获取简短的 Word VBA 示例。< /s>

我确信有一种方法可以在 C# 中完成相同的任务,但我还没有实现。如果我找到一个,我一定会分享。 (我之前贡献了一个答案包含 C#-VBA 解决方法。)

Edit: I finally discovered a code.msdn.microsoft.com project that incorporates native C# ribbon manipulation. Use that instead of any VBA business.

Original Post:


You don't need VSTO to access the ribbon programmatically. Visit Word Articles for a brief Word VBA example.

I'm certain there's a way to accomplish the same in C#, but I have yet to implement one. If I find one, I will be certain to share. (I previously contributed an answer that contains a C#-VBA workaround.)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文