【发布时间】:2014-07-20 03:46:48
【问题描述】:
我正在使用 C#/.NET 开发一个 MS Office(Excel、Word、PowerPoint 和 Outlook)插件,它可以跟踪和记录一些事件,当它发生为 DocumentOpen、DocumentContentChange..etc 然而,经过几天的搜索,当宏在 Excel 工作簿、Word 文档等上运行时,我无法找到一种方法(事件)来获得通知
困难的方法是尝试捕获用户可以遵循的所有可能的路径来运行宏,使用 Mouse & Keyboard Hooking Win API,它们是:
- 使用“宏”对话框(使用纯 Win API 访问窗口): OnClick,如果这是 ActiveWindow,并且“运行”按钮有 重点,读取“宏名称:”标签下的文本框中的值,但是 我发现这种方法非常复杂,因为在某些情况下 喜欢:用户按 ENTER 键,焦点不在“运行”按钮上 或者如果用户双击运行宏的宏列表中的某个项目..
按下组合键: 例如,宏具有与之关联的 Ctrl+F8 键。
单击一个形状(主要是 excel):检查此形状是否附加了宏。
我可以看到这些方法非常有限。
你有更好的建议吗?
【问题讨论】:
-
您考虑过事件程序吗?它们自动运行,也可能通过代码触发其他宏,所以我认为实际上无法检测到哪个宏在何时运行......
-
能否也分享一下为什么需要访问调用栈的原因?如果您以某种方式获得了这些信息,您将如何处理它?
-
别担心 vba4all,这不是某种黑客行为!正如我所说,它是为客户提供的 Office COM 插件,几周后,我们决定跳过此功能并专注于其他功能。谢谢您的 cmets