【发布时间】:2011-07-18 03:04:08
【问题描述】:
是否可以使用互操作处理来自另一个应用程序的自定义功能区按钮上的按钮单击事件?
因此,如果我创建了一个 Word 2010 应用程序加载项,它创建了一个带有多个按钮的自定义选项卡,然后我使用互操作从 C# win forms 应用程序实例化了一个 Word 应用程序,那么我将如何连接到win表单应用程序中我的自定义功能区上的按钮单击事件?使用 Word 2003,我可以通过 CommandBars 集合访问按钮,然后简单地连接到 click 事件。
经过进一步阅读,我想我想做的是找出如何使用互操作访问功能区对象模型。这可能吗?
[编辑]
对于任何有兴趣的人。当我写这个问题时,我知道另一种方法来解决我的问题,但这意味着需要大量额外的工作来改变我现有的实现以从 Office 2003 升级到 Office 2010,所以我希望可以访问 Ribbon 对象VSTO 加载项之外的模型。
我的解决方案是使用 IpcChannel 从 vsto 插件调用我的 win-forms 应用程序。所以我的 win-forms 应用程序初始化 Word 实例,然后打开一个服务器通道。在 vsto 加载项中,我处理 Application.DocumentOpen,如果文档归我的应用程序所有,我会打开一个客户端通道到我的应用程序。然后,我可以通过使用共享接口从 vsto 插件调用我的 win-forms 应用程序。
虽然这种技术有效,但它确实有一些缺点。如果通过 ipc 通道的调用是同步的,那么我的应用程序将无法触及单词 object,因为发生了死锁。进行异步调用会引入其他问题,但我发现我可以使用模式对话框阻止 Word 窗口而不会导致死锁。
虽然这不是对我最初问题的确切答案,但它是一种替代方法,所以我想我会与其他遇到此问题的人分享。
如果有人知道如何在 VSTO 之外访问 Ribbon 对象模型,我仍然有兴趣知道如何。
【问题讨论】:
-
我也在寻找一种通过互操作访问功能区的方法,不幸的是我不得不放弃。看来您确实需要 vsto 才能访问功能区...
-
由于 Word 是 WPF 而功能区不是“真正的窗口”,您甚至找不到手动附加的窗口句柄:(
-
您应该将您的解决方案发布为实际并接受它