检测事件/从现有商业应用程序检索数据

时间:2017-01-10 20:20:29

标签: c# .net windows winapi automation

我正在尝试与一些现有的商业Windows软件进行非正式集成。目标是通过我们在机器上运行的服务检测屏幕上何时显示某个文本框和/或标签,然后从所述框/标签中获取文本并在服务中对其执行某些操作。我们可以在这里使用外部API。

我的研究让我看到了拦截Windows消息的问题,但是我已经阅读了很多关于如何解决这个问题的相互矛盾的信息(我之前从未尝试过这个)。

有没有一个很好的方法来实现我的目标?第三方工具是可以接受的,但许可证必须允许分发到客户端站点。

1 个答案:

答案 0 :(得分:1)

考虑到您只需要从某个控件中获取文本,您可以使用System.Windows.Automation类。

某个属性(AutomationElementAutomationIdProperty)必须find该文本框对应ClassNameProperty

var propCondition = new PropertyCondition(
    AutomationElement.AutomationIdProperty, "uniqueTextBoxId", PropertyConditionFlags.IgnoreCase);

return AutomationElement.RootElement.FindFirst(
    TreeScope.Element | TreeScope.Children, 
    propCondition);
例如,可以使用Inspect实用程序确定

AutomationIdPropertyClassNameProperty

然后您就可以获得所需的text from AutomationElement

P.S。: WindowsAutomation有点重量级,因此您应该注意不要因为对该元素进行过于频繁的轮询而影响整体系统性能。

P.S.1 有时,AutomationIdPropertyClassNameProperty都不能用于查找元素。在这种情况下,您将不得不使用更复杂的条件,甚至手动走树。