有没有办法使用.NET中的UI Automation API跟踪控件的屏幕坐标?
我可以找到它曾经的位置,但是一旦我掌握了控制权,我需要在屏幕上的位置发生变化时收到通知。这可能吗?
答案 0 :(得分:2)
我建议您将AccEvent SDK工具指向您感兴趣的UI,以查看控件移动时生成的UIA事件。不同的UI框架可能会引发不同的事件,有时可能无法准确预测您将有机会响应的事件。
例如,我刚刚运行了AccEvent并告诉它在我调整控制面板大小时告诉我控制面板UI下面引发的每个事件。下面的屏幕截图显示了为UIA元素的BoundingRectangle属性引发了UIA PropertyChanged事件的桶加载,以及一些StructureChanged事件。
根据您的具体情况,您可能需要监听在控件本身以及包含它的窗口上引发的事件。例如,假设我想知道Run dlg中的Browse按钮何时移动。如果我拖动窗口,我没有得到“浏览”按钮引发的事件,但我确实收到很多事件,说“运行dlg”窗口本身正在移动,(如下面的屏幕截图所示)。如果窗口正在移动,那么我知道浏览按钮在屏幕上的位置也在变化。
因此,一旦您使用AccEvent了解引发了哪些事件,您就可以编写UIA客户端代码来处理这些事件并实现目标。 AccEvent是一个UIA客户端应用程序,因此AccEvent中显示的任何事件也是您自己的UIA客户端代码可以做出的反应。
我在UI Automation events stop being received after a while monitoring an application and then restart after some time处小心处理了UIA事件处理程序需要处理的地方。
谢谢,
盖