2015-10-05 64 views
1

有没有一种方法可以使用.NET中的UI自动化API跟踪控件的屏幕坐标?使用UI自动化获取控件移动的通知

我可以找出它曾经在哪里,但是一旦我掌握了控制权,如果它在屏幕上的位置发生变化,我需要得到通知。这可能吗?

+0

是的,这是可能的。 https://msdn.microsoft.com/en-us/library/windows/desktop/ee671220(v=vs.85).aspx –

回答

2

我建议您将AccEvent SDK工具指向您感兴趣的用户界面,以查看控件移动时生成的UIA事件。不同的UI框架可能会引发不同的事件,有时可能无法准确预测您将有机会回应的事件。

例如,我刚运行AccEvent并告诉它告诉我有关调整控制面板时在控制面板用户界面下引发的每个事件。下面的屏幕截图显示了针对UIA元素的BoundingRectangle属性以及一些StructureChanged事件引发了UIA PropertyChanged事件的桶负载。

enter image description here

根据您的情况,您可能需要侦听事件包含它的窗口上都提出控件本身也。例如,假设我想知道Run dlg中的Browse按钮何时移动。如果我拖动窗口,我没有收到Browse按钮引发的事件,但是我收到很多事件表明Run dlg窗口本身正在移动(如下面的屏幕截图所示)。如果窗口正在移动,那么我知道浏览按钮在屏幕上的位置也在变化。

enter image description here

所以,一旦你使用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事件处理程序的地方。

感谢,

盖伊