Autohotkey - 如何检测应用程序中的所有输入区域/复选框?

时间:2017-09-03 15:11:43

标签: screen-scraping autohotkey

有没有办法检测应用程序中的输入区域,如文本框和复选框?我想用一个数字标记每个输入区域,这样我就可以使用键盘在AHK的输入字段之间跳转。

例如:一旦激活了脚本并且活动窗口是Google Chrome,Chrome就可以将其地址栏标记为#1。当我按下" 1"时,光标将指向该区域。

我基本上试图为那些键盘不太友好的应用程序创建一个解决方法。

2 个答案:

答案 0 :(得分:1)

大多数Windows应用程序使用标准的Windows元素。 对于这些...

https://autohotkey.com/docs/commands/WinGet.htm - 使用ControlList参数获取所有标准控件的列表。 对于那些:

https://autohotkey.com/docs/commands/ControlGet.htm - 可以获得控件类型,

https://autohotkey.com/docs/commands/ControlGetPos.htm - 可以获得控件的位置和尺寸。

有些也可以通过COM控制:https://gist.github.com/kheybot/7026077#automation-of-office-applications

有时可以使用标准流(STDIN,STDOUT,STDERR,LPTn,PRN,NUL)直接与命令行和控制台程序通信,或者您可以使用COM或WSH与显示程序的终端进行通信: https://gist.github.com/kheybot/7026077#interact-with-command-line

这对于许多遗留数据录入计划非常重要。

不幸的是,浏览器(例如Chrome)无法使用这些重量级组件,因为页面上可能有太多,但是还有其他选项可以与它们通信,例如COM,DDE等。与DOM沟通: https://gist.github.com/kheybot/7026077#browser-automation

对于网络浏览器,我倾向于采用混合方法,将Web浏览器的输入区域(地址栏等)的AHK处理与Greasemonkey / Tampermonkey脚本相结合来处理网页本身内的输入字段 - 使用DOM的Javascript将能够比任何屏幕抓取软件更好地处理输入区域。还可以使用像Selenium这样的功能测试套件实现自动化,并使用浏览器的插件功能编写扩展来处理其UI。

这意味着你现在有两个编程问题,当然......

Java应用程序,Flash应用程序,HTML5应用程序,一些图形设计软件以及几乎所有的计算机游戏基本上只是图形,无法从外部识别控件。

对于这些,您必须使用基本的屏幕抓取技术:http://www.autohotkey.com/docs/commands/ImageSearch.htmhttp://www.autohotkey.com/docs/commands/PixelSearch.htm来识别特定区域,这些区域只能通过单独编程特定控件才能完成。

通用检测的一个选项是使用能够检测阴影(阴影,按钮组件等)的内容,并允许您在这两种方式之间进行选项卡和发送单击。不幸的是,现代的平面设计意味着它不会一直有效,所以你也可以尝试寻找平面颜色的矩形......除了有时它们有弯曲的角落。因为平面设计师讨厌人。

此时,你会希望看到你所拥有的是分形复杂性的无限狂欢。

您可以制作一个简单的ControlGet解决方案,它不适用于您经常使用的许多应用程序......或者您可以创建一个针对许多应用程序单独定位的混合方法,同时还尝试使用通用解决方案对于无法识别的应用程序。

如果您是为了自己的使用而创建这个,我说的目标是让它与您知道并定期使用的应用程序一起使用,这应该足够了。

如果您将其作为辅助功能软件编写供其他人使用,我会说要为每个应用程序配置用户配置:让他们控制他们想要点击的输入元素,以及因为自动检测永远不会完美,并且很少会选择理想的解决方案。

答案 1 :(得分:0)

答案是肯定的,如果复选框的数量及其在应用程序中的位置是固定的,并且您知道在哪台机器上进行自动化。

请研究ImageSearch如何从截图中找到它们。

如果您知道窗口中复选框的X / Y位置,您还可以使用PixelGetColor检查支票是否可见。

您还应该使用随附的AutoIt Spy检查您的应用程序。该程序向您显示它在应用程序窗口中可以看到的内容。

要获取标签,请检查Gui命令。如果你让gui透明并且不给焦点,你可以在应用程序的顶部写标签。