Ayase - 用键盘代替鼠标的小工具 (直接获取 UI Tree)

2021-08-11 10:38:40 +08:00
 JeffersonQin

Ayase

项目 repo:Github/Ayase@JeffersonQin

截图在 Github 上有( V2 不让我发链接(悲

Ayase 是一款旨在使用键盘对电脑进行控制的软件。其专门为<del>像我这样的懒人</del>打造。众所周知,在普通情况下,我们需要同时使用键盘鼠标对电脑进行控制,然而频繁的键盘与鼠标间的切换回让人身心俱疲,同时使得手腕关节持续疲劳,有害于人的身体健康。Ayase 可以通过搜索的方式精确定位屏幕上的 UI 元素,快速控制。

Features

关于 Accessibility 方面的开发以及速度优化的讨论,可以看我博客的几篇文章 (gyrojeff(dot)top)。最终我采用的实现方案是C++调用Win32API / uiautomation.h编译成dll动态链接库,在C# / WPF项目中通过P/Invoke进行调用。在大多数情况下,速度同比提升将近 80%.

这是我第一次正儿八经地写WPF / C++,所以如果有什么问题还请大家多提PR / Issues

Dependencies

使用方法

TODO

3488 次点击
所在节点    分享创造
42 条回复
qq316107934
2021-08-11 20:05:55 +08:00
@JeffersonQin #20 看完博客后要向楼主交代一个残酷的事实:博客文章比这个项目要更加吸引我😂,文章质量很高,封面也好看,已加入收藏夹
qq316107934
2021-08-11 20:06:20 +08:00
以及 Aayase 第一反应还以为是 YOASOBI 的 Producer (
JeffersonQin
2021-08-11 20:14:10 +08:00
@ q/q/3/1/6/1/0/7/9/3/4 草(蚌埠住了
以及貌似因为你的 id 是 qq 我注册未满 14 天回复不了🤣
jorneyr
2021-08-11 21:21:31 +08:00
@JeffersonQin 不错不错
20015jjw
2021-08-11 23:42:56 +08:00
思路不错
mac 上的 vimmotion 嘛
可惜我游戏机不用这些
jsq2627
2021-08-12 02:06:32 +08:00
以前工作相关接触过 UIA 领域,最后发现 https://github.com/FlaUI/FlaUI 对 UIA 的封装非常好用。
jsq2627
2021-08-12 02:25:22 +08:00
顺带一提,除了 System.Windows.Automation 和 COM,微软最近还在 winrt API 下也加入了一套 UI Automation 相关 API (虽然猜测底层和 COM 一样)
https://docs.microsoft.com/en-us/uwp/api/windows.ui.uiautomation.automationelement?view=winrt-20348

UI Automation 很多年没更新了,它的 IPC 架构导致性能非常差,比如 64 位比 32 位慢,猜测就是 IPC 层要做很多转换导致。微软最近也在做一些新的尝试:
https://news.ycombinator.com/item?id=24294070
imwangpan
2021-08-12 09:09:00 +08:00
想问一下楼主,将 Caps Lock 映射为 Ctrl 后,Alt + Caps Lock 还能触发 UI 识别吗?
JeffersonQin
2021-08-12 09:42:09 +08:00
@jsq2627 大感谢(我去了解下(不过我看了一下那个 repo,他的原理其实也就是 P/Invoke 调 win32api,然后层层分装,这个性能还是不太行(所以最后我选择了 cpp 写然后搞成 dll
JeffersonQin
2021-08-12 09:43:59 +08:00
@jsq2627 确实 也希望 UIA 这块能越做越好吧(我这次找资料网上的 demo 都是七八年前的了🤣
JeffersonQin
2021-08-12 09:44:33 +08:00
@imwangpan 如果你是说键盘做了个 hook 是没关系的, 我也是用 hook 的
sunxiaonian
2021-08-12 11:05:59 +08:00
能封装好收费吗?不收费不敢用了现在
JeffersonQin
2021-08-12 11:33:22 +08:00
@sunxiaonian 这么说吧 我马上高三了也没太多时间维护 所以就直接扔 github 了 之前发了一个 x86 的 release (需要.net core desktop 3.1.* x86 ) 感兴趣的话可以试一下(
november
2021-08-12 12:13:10 +08:00
还没用上,看了下 gif 图片,怎么感觉像是全局文本搜索?

对中文友好吗?我意思是说操作中文文本控件。
JeffersonQin
2021-08-12 12:19:04 +08:00
@november 中文的话支持拼音和拼音首字母搜索 可以看那个 edge 的例子 "搜索框" 我打了 "ss" 就跳出来了
expkzb
2021-08-12 21:16:05 +08:00
我看这个 ayase 有点眼熟,原来是我认识的女演员 ayase ren
JeffersonQin
2021-08-12 21:34:18 +08:00
@expkzb 嘛... 虽然我想的是 Mitsukasa Ayase (三司绫濑) (yuzusoft yyds 🤣
xml123
2021-08-15 10:41:41 +08:00
试用了一下感觉非常 nb,个人是非常想要这种用键盘取代鼠标功能的软件的,可惜一直没找到好用的。(对比同类型的 KeyMouse 和 hunt and peck )按键识别率很高(这种工具如果有识别不到的按钮,实用性就大打折扣了),至于触发方式是标签还是按键对应的文本我倒是觉得都可以。
不过似乎不支持资源管理器?也不像是权限的问题,用管理员权限启动也不行。焦点在资源管理器上时,会去标记任务栏上的 UI 元素,不太清楚是怎么回事。
主要的缺点就是整体的响应速度比较慢,能明显的看到按钮绘制的过程(按右下角弹出的计时,大概在 0.2~0.6s 这个量级,不知道在作者本人的电脑上的速度如何),不知道速度还能不能再优化。而且感觉不太稳定,使用时有卡死和崩溃的情况出现。另外好像也没有双击和右键的功能。(项目看上去还在初期,一些还不能自定义的东西就不一一提了)
PS:看到 ayase 都没人联想到俺妹了吗(
JeffersonQin
2021-08-15 17:22:21 +08:00
@xml123 其实是这样的,建议使用管理员运行。关于 explorer 的问题,您说的是对的,这是一个已知 issue,我正在修复。现在我的识别原理里是检测 foreground 窗口句柄,通过句柄获取 process ID,再通过 process ID 获取 UIA 中的第一个窗口元素。然而问题就出在了这里。explorer 有若干个窗口,一般就会获取 taskbar (底下的任务栏)。接下来准备直接通过 Hwnd 来获取 UIA 元素,相关 API 已经确认过了。谢谢支持哇(求 star (雾
JeffersonQin
2021-08-15 17:23:09 +08:00
@xml123 以及关于绘制,这估计就是 wpf 的极限了(悲)( wpf 本身就是用 direct x 绘制的,并非 GDI+

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/795014

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX