如何获得有关用户输入事件的反馈,从而可以突出显示窗口的输入区域并描述事件

时间:2018-12-11 18:29:37

标签: winapi pywin32 win32gui

如果这是重复的内容,请原谅我,但是我很难找到最好的方法甚至搜索这个问题。也请原谅冗长的文字墙。底部有一个tldr。我从最有可能是python应用程序开始,但是我的问题不是特定于python的。我的任务是构建基本上将成为Microsoft PSR工具的开源替代品的东西。

对于那些不熟悉PSR的人来说,首字母缩写词代表“问题步骤记录器”,它是自Vista以来内置在每个Windows版本中的小型应用程序。当您启动它时,它会在后台运行,并且可以拍摄一系列屏幕截图并构建一个XML文件。

每当有用户输入应用程序时,都会截取屏幕截图。例如,单击Enter提交内容的鼠标单击将触发屏幕截图。它生成的可选XML包含触发屏幕快照的操作的文本描述和屏幕快照文件名。

屏幕截图在两种方面有些特殊。第一,它们在图像中包含鼠标光标。我发现,通过按打印屏幕键将其隐藏在常规屏幕快照中。更重要的是,在屏幕截图中添加了发生输入的窗口区域的轮廓。例如,如果您单击资源管理器中的“后退”按钮,则屏幕截图中的“后退”按钮将包含在一个绿色矩形中。如果您在文本框中输入内容,则该屏幕截图将在绿色矩形中包含该文本框。

xml描述中的内容类似于“用户在进程explorer.exe的窗口[我的文档]中左键单击按钮[返回]”

我的假设是,有一些文档齐全的Windows API使我能够获取此信息。我知道这不是未公开的API,因为Sysinternals Process Explorer可以以与PSR相同的方式突出显示窗口组件。如果运行Process Explorer并将小目标拖动到资源管理器窗口顶部,您将看到我在说什么。我知道Sysinternals现在是Microsoft的一部分,但是它在被收购之前就具有此功能,因此并不是一些内部知识可以使他们的应用具有这种能力。

不幸的是,Process Explorer不是开源的,而且我无法找到具有相同功能的开源应用程序。我对如何解决此问题的猜测是观察特定类型的用户输入,例如鼠标单击和各种非字符键,例如tab,enter,f5等。在鼠标单击时获取光标位置,获得焦点窗口,找到窗口的位置和大小,找到各个窗口组件的位置,计算在单击时光标所在的组件,并使用有关窗口组件的位置和大小以及窗口的位置和大小的知识,和屏幕分辨率在屏幕截图上绘制一个矩形叠加层。

但是我不知道API调用什么会给我该信息,并且这个想法不会阻止按下Enter键触发提交之类的事情。因此,也许有一个API可以将回调附加到窗口的所有组件上,而当这些组件有输入时,这些回调只是向应用程序发出信号?

然后是此XML描述。它怎么知道“用户从进程explorer.exe左键单击窗口[我的文档]中的[返回]按钮”?这使我更倾向于将其作为某种回调,而这仅仅是随其传递的信息。

我真的不知道,也不知道在哪里看。因此,我在这里与您联系。有人知道我在寻找什么API吗?如果有人有使用此特定功能的经验,对我来说将是非常有用的,但是即使有人可以将我指向使用该功能的开源应用程序,也将非常有用,我可以通过查看来找出答案。在那里。

tldr;我需要知道什么Windows API允许Sysinternals Process Explorer和Windows PSR突出显示鼠标悬停在窗口上的组件。

非常感谢大家的帮助。

0 个答案:

没有答案