项目 repo:Github/Ayase@JeffersonQin
截图在 Github 上有( V2 不让我发链接(悲
Ayase 是一款旨在使用键盘对电脑进行控制的软件。其专门为<del>像我这样的懒人</del>打造。众所周知,在普通情况下,我们需要同时使用键盘和鼠标对电脑进行控制,然而频繁的键盘与鼠标间的切换回让人身心俱疲,同时使得手腕关节持续疲劳,有害于人的身体健康。Ayase 可以通过搜索的方式精确定位屏幕上的 UI 元素,快速控制。
关于 Accessibility 方面的开发以及速度优化的讨论,可以看我博客的几篇文章 (gyrojeff(dot)top)。最终我采用的实现方案是C++
调用Win32API / uiautomation.h
编译成dll
动态链接库,在C# / WPF
项目中通过P/Invoke
进行调用。在大多数情况下,速度同比提升将近 80%.
这是我第一次正儿八经地写WPF / C++
,所以如果有什么问题还请大家多提PR / Issues
Microsoft.Toolkit.Uwp.Notifications
Notifications.Wpf
ToolGood.Words
Alt + CapLocks
(我们会自动还原CapLocks
状态)Esc
Tab
Shift + Tab
Enter
Shift + Enter
AWSD
进行方向操作前面发了一个release(事情有点多一开始忘记了
这里说明一下:由于win32api的鬼畜原因(<del>其实是我也不知道为什么</del>),32位版本会比64位版本效率高很多。所以这次第一个版本只给出了32位binary。以后我可能会为64为版本做一个bridge(因为win32api那块我是用cpp写的,编译的dll)。
1
JeffersonQin OP # 截图
使用 Ayase 操作网易云音乐 UWP: cdn.jsdelivr.net/gh/JeffersonQin/Ayase@latest/imgs/netease-music.gif 使用 Ayase 网上冲浪: cdn.jsdelivr.net/gh/JeffersonQin/Ayase@latest/imgs/surf-internet.gif |
2
Namoe 2021-08-11 12:11:41 +08:00
请问有 release 版本吗,build 有点折磨
|
3
PainAndLove 2021-08-11 13:15:38 +08:00
mac 能用吗
|
4
internelp 2021-08-11 13:46:23 +08:00
🐂
|
5
JeffersonQin OP @Namoe 我马上去 github 上发个 release,稍等(都忘了这茬了🤣
|
6
JeffersonQin OP @PainAndLove 不能 这个是用 win32api 实现的主要功能,不过 mac 也有相应的 accessibility 接口,可以了解一下 applescript ( osascript )以及 Inspector 工具。我现在不用 mac 了,以前用了很多年,玩过这方面的东西。
|
7
gauzung 2021-08-11 14:43:01 +08:00
|
8
JeffersonQin OP @gauzung 这个工具当初我想到做这个东西的时候其实朋友安利过我。但是我最终考虑下来觉得他还是不够“intuitive”,现在的话是“看到什么就搜什么”,个人认为更加符合直觉。而且如果我用这种模式,大多数情况下我其实只需要加上 alt 键就可以了。不过我觉得这个模式以后可能也可以加入(说实话感觉也挺有意思的
|
9
gauzung 2021-08-11 14:52:38 +08:00
@JeffersonQin #8 多谢,关注中
|
10
mmmao 2021-08-11 15:00:38 +08:00
感觉挺方便的
|
11
AoEiuV020 2021-08-11 15:37:29 +08:00
主要问题还是使用场景,日常使用的话,没谁日常使用没有鼠标吧,而有鼠标的情况这种软件有没什么场合能比鼠标更方便,没有的话感觉就很鸡肋了,体验一下就没有然后了,
|
12
yuancoder 2021-08-11 15:38:44 +08:00
费手指
|
13
JeffersonQin OP @AoEiuV020 嘛 还是个人喜好问题吧(
|
14
jorneyr 2021-08-11 17:06:21 +08:00
对 DirectUi 的界面支持怎么样?
|
15
JeffersonQin OP @jorneyr 可以给个例子嘛(我去测试下
|
16
jorneyr 2021-08-11 18:18:34 +08:00
@JeffersonQin 好像迅雷,VS Studio 都是,或者 WPF 之类开发的界面程序。
|
17
qq316107934 2021-08-11 18:23:42 +08:00
大概无障碍服务使用者的福音。
好奇是咋拿到 Electron 和 WPF 开发的 UI Tree 的,只知道传统的 Win32 控件绘制可以靠遍历子句柄,但是我前面提到的那俩是自己做的渲染,只能拿到一整个 Webkit 或者 Window 句柄。 |
18
pabupa 2021-08-11 18:30:04 +08:00
帅!!!!!!!!!!
|
19
JeffersonQin OP @jorneyr 我测试了一下:迅雷, Visual Studio, Visual Studio Code, VMWare Workstation, QQ, 微信, Adobe Acrobat, 任务管理器 这几个都是可以的
|
20
JeffersonQin OP 可以搜一下 uiautomation . h , 我是用这个 api 做的除此之外还可以考虑 MSAA,不过我测试下来这个效果会差很多速度也慢很多,而且本身要也要比 uiautomation 老很多了。我博客上有具体的记录:gyrojeff 点 top (置顶的几篇文章后面的十几篇就是
|
21
qq316107934 2021-08-11 20:05:55 +08:00
@JeffersonQin #20 看完博客后要向楼主交代一个残酷的事实:博客文章比这个项目要更加吸引我😂,文章质量很高,封面也好看,已加入收藏夹
|
22
qq316107934 2021-08-11 20:06:20 +08:00 1
以及 Aayase 第一反应还以为是 YOASOBI 的 Producer (
|
23
JeffersonQin OP @ q/q/3/1/6/1/0/7/9/3/4 草(蚌埠住了
以及貌似因为你的 id 是 qq 我注册未满 14 天回复不了🤣 |
24
jorneyr 2021-08-11 21:21:31 +08:00
@JeffersonQin 不错不错
|
25
20015jjw 2021-08-11 23:42:56 +08:00 via Android
思路不错
mac 上的 vimmotion 嘛 可惜我游戏机不用这些 |
26
jsq2627 2021-08-12 02:06:32 +08:00
以前工作相关接触过 UIA 领域,最后发现 https://github.com/FlaUI/FlaUI 对 UIA 的封装非常好用。
|
27
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 |
28
imwangpan 2021-08-12 09:09:00 +08:00
想问一下楼主,将 Caps Lock 映射为 Ctrl 后,Alt + Caps Lock 还能触发 UI 识别吗?
|
29
JeffersonQin OP @jsq2627 大感谢(我去了解下(不过我看了一下那个 repo,他的原理其实也就是 P/Invoke 调 win32api,然后层层分装,这个性能还是不太行(所以最后我选择了 cpp 写然后搞成 dll
|
30
JeffersonQin OP @jsq2627 确实 也希望 UIA 这块能越做越好吧(我这次找资料网上的 demo 都是七八年前的了🤣
|
31
JeffersonQin OP @imwangpan 如果你是说键盘做了个 hook 是没关系的, 我也是用 hook 的
|
32
sunxiaonian 2021-08-12 11:05:59 +08:00 via iPhone
能封装好收费吗?不收费不敢用了现在
|
33
JeffersonQin OP @sunxiaonian 这么说吧 我马上高三了也没太多时间维护 所以就直接扔 github 了 之前发了一个 x86 的 release (需要.net core desktop 3.1.* x86 ) 感兴趣的话可以试一下(
|
34
november 2021-08-12 12:13:10 +08:00
还没用上,看了下 gif 图片,怎么感觉像是全局文本搜索?
对中文友好吗?我意思是说操作中文文本控件。 |
35
JeffersonQin OP @november 中文的话支持拼音和拼音首字母搜索 可以看那个 edge 的例子 "搜索框" 我打了 "ss" 就跳出来了
|
36
expkzb 2021-08-12 21:16:05 +08:00
我看这个 ayase 有点眼熟,原来是我认识的女演员 ayase ren
|
37
JeffersonQin OP @expkzb 嘛... 虽然我想的是 Mitsukasa Ayase (三司绫濑) (yuzusoft yyds 🤣
|
38
xml123 2021-08-15 10:41:41 +08:00
试用了一下感觉非常 nb,个人是非常想要这种用键盘取代鼠标功能的软件的,可惜一直没找到好用的。(对比同类型的 KeyMouse 和 hunt and peck )按键识别率很高(这种工具如果有识别不到的按钮,实用性就大打折扣了),至于触发方式是标签还是按键对应的文本我倒是觉得都可以。
不过似乎不支持资源管理器?也不像是权限的问题,用管理员权限启动也不行。焦点在资源管理器上时,会去标记任务栏上的 UI 元素,不太清楚是怎么回事。 主要的缺点就是整体的响应速度比较慢,能明显的看到按钮绘制的过程(按右下角弹出的计时,大概在 0.2~0.6s 这个量级,不知道在作者本人的电脑上的速度如何),不知道速度还能不能再优化。而且感觉不太稳定,使用时有卡死和崩溃的情况出现。另外好像也没有双击和右键的功能。(项目看上去还在初期,一些还不能自定义的东西就不一一提了) PS:看到 ayase 都没人联想到俺妹了吗( |
39
JeffersonQin OP @xml123 其实是这样的,建议使用管理员运行。关于 explorer 的问题,您说的是对的,这是一个已知 issue,我正在修复。现在我的识别原理里是检测 foreground 窗口句柄,通过句柄获取 process ID,再通过 process ID 获取 UIA 中的第一个窗口元素。然而问题就出在了这里。explorer 有若干个窗口,一般就会获取 taskbar (底下的任务栏)。接下来准备直接通过 Hwnd 来获取 UIA 元素,相关 API 已经确认过了。谢谢支持哇(求 star (雾
|
40
JeffersonQin OP @xml123 以及关于绘制,这估计就是 wpf 的极限了(悲)( wpf 本身就是用 direct x 绘制的,并非 GDI+
|
41
bianz103 2021-10-05 20:22:53 +08:00 via iPhone
请问识别控件树用的什么方法?
|