C# 检测事件/从现有商业应用程序检索数据
我正在尝试与一些已经存在的商业Windows软件进行非正式集成。目标是通过我们在机器上运行的服务检测屏幕上何时可以看到某个文本框和/或标签,然后从所述文本框/标签中抓取文本,并在服务中对其进行处理。这里没有我们可以利用的外部API 我的研究让我了解了拦截Windows消息的方法,但我读到了很多关于如何进行拦截的相互矛盾的信息(我以前从未尝试过)C# 检测事件/从现有商业应用程序检索数据,c#,.net,windows,winapi,automation,C#,.net,Windows,Winapi,Automation,我正在尝试与一些已经存在的商业Windows软件进行非正式集成。目标是通过我们在机器上运行的服务检测屏幕上何时可以看到某个文本框和/或标签,然后从所述文本框/标签中抓取文本,并在服务中对其进行处理。这里没有我们可以利用的外部API 我的研究让我了解了拦截Windows消息的方法,但我读到了很多关于如何进行拦截的相互矛盾的信息(我以前从未尝试过) 有什么好方法可以实现我的目标吗?第三方工具是可以接受的,但许可证必须允许分发到客户端站点。考虑到您只需要从某些控件获取文本,您可以使用类 您必须通过某些
有什么好方法可以实现我的目标吗?第三方工具是可以接受的,但许可证必须允许分发到客户端站点。考虑到您只需要从某些控件获取文本,您可以使用类 您必须通过某些属性(
AutomationIdProperty
或ClassNameProperty
)修改该文本框对应的AutomationElement
)
AutomationIdProperty
或ClassNameProperty
可以通过实用程序来确定
然后你就可以得到所需的
p.S.:WindowsAutomation有点重,所以您应该注意不要对该元素进行过于频繁的轮询,从而影响整体系统性能
p.S.1有时既不能使用
AutomationIdProperty
也不能使用ClassNameProperty
来查找元素。在这种情况下,您将不得不使用更复杂的条件,甚至需要手动在树上行走。谢谢。这正是我要找的信息!
var propCondition = new PropertyCondition(
AutomationElement.AutomationIdProperty, "uniqueTextBoxId", PropertyConditionFlags.IgnoreCase);
return AutomationElement.RootElement.FindFirst(
TreeScope.Element | TreeScope.Children,
propCondition);