用于“监听”办公应用程序的NET代码(获取用户提出的事件)

时间:2009-05-21 10:01:44

标签: .net automation ms-office office-2007

我即将重建电子学习申请。 但现在我想将这个新版本提升到一个新的水平。

所以这个场景:用户打开我的应用程序。然后,他/她选择接受最常见的MS Office应用程序(Word,Excel,Outlook等)之一的培训。

我的应用程序会向用户提供有关操作的说明:创建新文档,键入一些文本,将其粗体显示,插入图片等。 如果操作正确,用户将获得积分。如果没有,请记下。

但是(总有一个但是)让我完成这个我必须能够“看到”用户正在做什么。我正在使用NET(2.0 - C#或VB,无所谓)。 任何人都可以告诉如何做到这一点? 我需要处理打开的Office应用程序或启动一个新的应用程序,然后我必须倾听并评估用户所做的一切。如果用户做错了我还需要向Office应用程序发送说明并为他执行此操作的/她的

这可能吗?有没有人有一些关于如何做到这一点或类似的代码示例?

提前致谢

PS:我真的不想让Office添加来实现这个目标!

编辑:我不想进入VBA的原因是我想确保这可以重复使用,以帮助用户在未来使用其他应用程序。所以我想要一些方法来创建一个应用程序的监听器并解码用户与它的交互。

2 个答案:

答案 0 :(得分:2)

Office的自动化API是一个COM API。您可以从托管(.NET)代码中调用它,但这只会增加一个额外的层并使事情变得更加复杂。我使用VB / VBA和C#完成了大量的Office自动化工作,虽然我喜欢C#作为一种语言,但我不得不说以这种方式驱动Office要困难得多。 许多。 (很容易让它在你的机器上运行,至少一次 - 但不要让你这个愚弄你。)

API确实允许您捕获某些事件,例如菜单选择,命令栏按钮单击,窗口激活,文档打开/关闭等。您还可以捕获理论上用于理解的“选择已更改”事件用户正在做什么。但是,有很多直接操作任务,用户可以执行,你将无法捕获(例如拖放,调整图片等),为了你的目的,我会说'd是一个大问题。

我不得不说我非常怀疑你能否做到你的建议 - 至少,不足以使它无缝化。我认为,鉴于您的用户群,它必须非常防弹。

对不起。 : - (

答案 1 :(得分:1)

实际上有一个Windows钩子设计用于基于计算机的训练应用程序,称为WH_CBT,它在窗口被激活,最小化,移动,调整大小,执行命令,鼠标/键盘事件等时提供通知。

我不会骗你,但挂钩是一个相当复杂的话题,但从.NET来说肯定是平易近人的。查看以下MSDN文章,该文章解释了如何在.NET中使用消息挂钩,然后查看后面的两个链接,以获取有关WH_CBT的更多信息。

Cutting Edge: Windows Hooks in the .NET Framework

MSDN Library: SetWindowsHookEx Function

MSDN Library: CBTProc Function