MS Office自动化:macros运行时获取通知(事件)

我正在开发一个使用C#/ .NET的MS Office(Excel,Word,PowerPoint和Outlook)加载项,它跟踪和logging一些事件,当DocumentOpen,DocumentContentChange..etc发生时,但是经过几天的search,当macros在Excel工作簿,Word文档等上运行时,无法find方法(事件)来得到通知

困难的方法是尝试捕捉所有可能的path,用户可以使用鼠标和键盘挂接Win API来运行macros,它们是:

  1. 使用“macros”对话框(使用纯粹的Win API访问窗口): OnClick,如果这是ActiveWindow,并且“运行”button具有焦点,则读取文本框中“macros名称:”标签下的值,但是我发现这种方法是非常复杂的,因为有一些情况下,如:用户按ENTER键和焦点不在“运行”button或如果用户双击运行macros的macros列表中的项目..
  2. 按下组合键:例如一个macros有一个Ctrl + F8键与之相关联。

  3. 点击一个形状(主要是excel):检查这个形状是否附有一个macros。

我可以看到这些方法非常有限。

你有更好的build议吗?

我这样做的方法是在macros运行时将数据存储在数据库的表中。 这样的代码是在macros中,你可以肯定,如果macros运行,数据将在数据库中。