我正在开发 VS2008 中的 C# .NET 应用程序,以自动在另一个 3rd 方应用程序上填写表单(无法访问源代码)。我的应用程序使用 UIAutomationClient 类来执行诸如关注或选择表单上的元素之类的事情。我遇到的问题是我需要处理的一些对象只有在它们有焦点时才可见。例如,如果当前活动元素是列表,我只能从列表中选择一个项目。我的解决方法是发送“标签”,直到我正在寻找的元素存在(有时表单上有数百个元素)。从技术上讲,它是可行的……但是必须有一种更优雅的方式来使元素可见。
同样,我使用 UISpy、Inspector 和 Spy++(32 或 64)来帮助识别对象,并且它们只能在它们处于活动状态时识别某些元素。一旦他们失去焦点,他们就不再出现在树中。我认为这是因为这些应用程序很可能是使用相同的 HWND 搜索方法开发的。
我的问题是,UIAutomation 可以识别这些非活动对象吗?是否有一个钩子或替代类可以暴露它们并务实地识别它们?
谢谢,