全局按钮点击工具的思路

所谓太阳底下无新事。一点小想法不知道是否已经有人在做或者做出来了。
之前发过一个帖子讨论键盘党摒弃鼠标的思路。后来简单做了一下,发现点击的成本还是很高,需要很多下才能准确定位到需要的位置上。
有一些工具,比如按键精灵之类,可以通过匹配图像来实现特定按钮的点击。但屏幕上的界面千差万别,想直接实现vimium这种开启两个字母点击按钮的功能靠枚举还是不太现实的。
我在想,可否使用机器学习,建立模型并训练来实现桌面上可点击对象的识别,然后实现全局的可点击对象的标记和模拟点击。我觉得这种模型的训练,应该比识别猫猫狗狗简单一些吧。
当然,记快捷键是传统思路,可不同的软件快捷键有差异,需要一定得时间训练和适应,不如这种“可视化的”具有的优势。

标准控件很容易.

不过现在很多软件并不是win32标准控件. 比如 迅雷的UI是自己的引擎. QQ也是 . 大量的QT、java程序, 都不是。

至于视觉分析或者图片分析, 这个理论上可以。尽管也会有一些视觉欺骗, 比如最常见的国产软件卸载对话框。

image

不如索性在屏幕上画格子(

1 Like

那还不如用鼠标呢

我觉得这种模型的训练,应该比识别猫猫狗狗简单一些吧

我觉得难多了,猫狗好歹有很多特征,你说的这个完全没有。我轻松就想出一个困难场景:如何处理软件的截图?截图看着和实际软件一样,但是无法点击

机器学习+图像识别不是万能的

你不如考虑用眼球跟踪技术,类似于鼠标的直观,但是不需要手操作

太密太稀都没效率,分多次也是增加太多点击成本。如果能直接到位,不是更好么?

这个我之前也考虑过,最后采用的是自制的指环电磁笔配合小型的数位板使用:

通过电磁指环,相当于给屏幕上安装了无数个按钮。

可以用相当于按一个按键的成本实现点击屏幕任意处(眼睛不用离开屏幕)。

搭配分离式的键盘使用效果更佳,把小数位板放在键盘中间。

想起来美团技术团队的一篇文章:

终端新玩法:技术栈无关的剧本式引导 - 美团技术团队 (meituan.com)

在引导过程中,需要对关键路径上目标区域设置高亮效果。在技术栈无关的前提下,基本思路是线下截取目标区域,线上运行时全屏截图,通过图像匹配算法,查找目标区域在全屏截图中的位置,从而获得该区域坐标,
经过理论研究与实践试点,最终我们采用的是传统 CV(Computer Vision)+ AI 的解决方案,大部分场景可以基于传统 CV 的角点特征检测和匹配得到结果,未命中的则继续通过深度学习网络的检测和跟踪来获取结果。

觉得这个场景挺好,大厂做这种东西,一点点效率提升就能产生巨大的效益,所以驱动力足,这个是面向个人软件用户达不到的啊。我提的这个想法,只是人家的一一个小步骤而已。只是人家不屑于去做吧。

无句柄窗口自动点击这个很容易解决,
用 aardio 写个屏幕找字并点击的例子:

import mouse;
import string.ocrLite;
import string.ocrLite.defaultModels;

var ocr = string.ocrLite();
var ocrResult = ocr.detectScreen();
var x,y = ocrResult.findPoint("要查找的按钮文本",0.1);
mouse.moveTo(x,y,true);

运行效果( 鼠标是屏幕找字,然后自动移过去的,操作速度比人工快 ):

screenshots

我之前基于这个做过比较复很杂的程序,非常好用。
现代软件界面都很简洁,找图不如找字效果好,只是判断按钮位置容易出错,因为用户可能安装了同一软件的不同版本,软件界面有不同的状态或主题,导致同一按钮出现在不同位置。可以识别屏幕上的文字,就好象自动化软件有了眼睛,可以找到该点的按钮,也可以通过屏幕找字判断操作进度。

image
遇到这种“奥林匹克级的智力题”,OCR恐怕要瘫痪…

1 Like

没有必要上升到机器学习的程度。
传统的图像识别是有机会的——虽然java/qt之类的窗口不能获取控件的句柄,但是仍然可以获取窗口尺寸和位置。
下一步就是版面分析,模拟ocr的过程切分ui为疑似按钮的块,疑似阅读区域,然后对文字和图形匹配一下就可以了。

其实常用的UI库也没有很多个,, 大不了做个适配应该就可以了吧,

用OCR的话,, 感觉还是挺不划算的

这个方向的软件我基本上都试用过,但是基本上没有体验特别好的,原因主要有两点,第一就如楼上所说,不是所有的按纽都是标准控件,所以要是有识别不到的按钮,实用性就大打折扣了;第二则是桌面应用支持的鼠标操作比网页要复杂的多,除了单机,还有双击、右键、拖动等,用键盘模拟起来也比较复杂。
楼上提到的图片识别倒是我没想过的新思路,但是也会有别的问题,这种软件的性能也十分重要,要是每次识别都延迟个0.几秒甚至更久,体验也是很差的,所以我觉得这种方法也不太可行。

fluentsearch楼主有试过了吗?

image

1 Like

我试试看

补充个刚从 DecoHack周刊看到的

不过不支持windows

补充个ahk脚本

https://www.autohotkey.com/boards/viewtopic.php?f=28&t=19698

第二个链接是上面的增强版。
第二个链接的自带说明
LabelControl_vZz