我想制作一个应用程序,以拦截我应用程序的所有形式中的所有UI事件,并将其写入日志。这些数据可以比用于查看哪些控件最常用,按什么顺序等。问题是我希望自动发生这种情况,而无需修改现有类。

我制作了一个原型,该原型将方法附加到单击事件的所有控件中,但是如何对所有表单进行操作?在操纵事件时,反射需要目标对象,但是只能轻松访问启动表格。

有没有办法连接对象的构造函数?然后,我可以在新形式的所有事件中“注入”我的方法。也许还有另一种方法可以做到这一点。

提前致谢!

有帮助吗?

解决方案

您可以安装 消息过滤器.

消息过滤器是实现的对象 IMessageFilter. 。 Winforms打电话给您 PreFilterMessage 通过线程的消息循环的每个消息的方法。这足以监视整个应用程序上的用户输入(并为您提供操作)。

其他提示

在Windows API中,这是使用本地钩完成的(您可以使用 setWindowShookex 功能)。这是完成任务的正确方法。在C#中,您需要使用P/Invoke才能访问SetWindowShookex。

另一项任务是将HWND(Windows Hander)与相应的Winforms控件匹配。读 本文 对于如何执行此操作(通过WM_GetControlname消息)。

也看 这个问题 这是您的重复。

我想您将必须处理Win32的API消息。

这是教程形式下的一个小例子.

您应该能够实现自己想要的 消息过滤器 - 无需直接调用Win32-apis!

看到帮助 IMessageFilter 接口以获取更多信息。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top