Skip to content

Latest commit

 

History

History
141 lines (117 loc) · 6.68 KB

README_zh-cn.md

File metadata and controls

141 lines (117 loc) · 6.68 KB

Ayase

Ayase是一款旨在使用键盘对电脑进行控制的软件。其专门为像我这样的懒人, 盲人打造。众所周知,在普通情况下,我们需要同时使用键盘鼠标对电脑进行控制,然而频繁的键盘与鼠标间的切换回让人身心俱疲,同时使得手腕关节持续疲劳,有害于人的身体健康。同时,对于盲人朋友们,使用屏幕阅读器固然可以很好地使用电脑,然而大多数情况下其却不能“指哪打哪”,即不能对目标控件进行即刻控制,大多情况下需要等待或快进到需要控制的元素,而Ayase可以通过搜索的方式精确定位,快速控制。

截图

使用Ayase操作网易云音乐UWP:

netease-demo

使用Ayase网上冲浪:

surf-internet-demo

关于命名

我永远喜欢三司零奶(绫濑)

https://zh.moegirl.org.cn/三司绫濑

Features

  • 支持高DPI,多显示器不同DPI,跨屏幕显示
  • 支持Chrome-based Apps (e.g. Github Desktop)
  • 支持Electron Apps (e.g. Visual Studio Code)
  • 支持WinForms, WPF, UWP (e.g. 网易云UWP)
  • 支持腾讯等多家公司的自研UI框架 (e.g. 腾讯的微信、QQ)
  • 页面元素高速读取
  • 支持拼音、拼音首字母搜索 (e.g. 网易云 → wyy / wangyiyun)
  • 忽略大小写

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

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

关于项目结构

.
├── Ayase                                   # Ayase Project
│   ├── AccessibilityBridge                 # P/Invoke bridge for .dll
│   │   ├── GNativeIUIAutomationManager.cs
│   │   └── GNativeUIElement.cs
│   ├── App.xaml
│   ├── App.xaml.cs                         # Entrance
│   ├── AssemblyInfo.cs
│   ├── AutomationLib                       # 大部分已经不用了,是替代方案
│   │   ├── GAutomationManager.cs
│   │   ├── GIUIAutomationManager.cs
│   │   ├── GMSAAManager.cs
│   │   ├── GRawUIManager.cs
│   │   ├── GUIElement.cs
│   │   └── Wrapper                         # 用到的Win32API的封装
│   │       ├── ObjectIdentifiers.cs
│   │       ├── RECT.cs
│   │       ├── ReferenceIdentifiers.cs
│   │       └── Win32API.cs
│   ├── Ayase.csproj
│   ├── Ayase.csproj.user
│   ├── HotkeyLib                           # 全局热键封装
│   │   ├── GHotKey.cs
│   │   ├── GKeybdEvent.cs
│   │   └── VirtualKeys.cs
│   ├── MouseLib                            # 鼠标控制封装
│   │   └── GMouse.cs
│   ├── Properties
│   │   └── launchSettings.json
│   ├── ScreenLib                           # 屏幕信息封装
│   │   └── PrimaryScreen.cs
│   ├── ThreadLib                           # 私有线程池实现
│   │   └── GThreadPool.cs
│   └── UI                                  # UI
│       ├── FormMaskWindow.xaml
│       ├── FormMaskWindow.xaml.cs
│       ├── MaskWindow.cs
│       ├── NotationLabel.cs
│       ├── ReuseWindow.cs
│       ├── ScreenMaskWindow.xaml
│       ├── ScreenMaskWindow.xaml.cs
│       ├── SearchWindow.xaml
│       ├── SearchWindow.xaml.cs
│       ├── SettingsWindow.xaml
│       ├── SettingsWindow.xaml.cs
│       └── WindowManager.cs                # 窗口管理调度
├── Ayase.Accessibility                     # dll project
│   ├── Ayase.Accessibility.vcxproj
│   ├── Ayase.Accessibility.vcxproj.filters
│   ├── Ayase.Accessibility.vcxproj.user
│   ├── GConstant.h                         # 定义的一些常数
│   ├── GIUIAutomationManager.cpp           # 主要实现
│   ├── GIUIAutomationManager.h
│   ├── GUIElement.cpp                      # 数据结构封装
│   ├── GUIElement.h
│   ├── dllmain.cpp
│   ├── framework.h
│   ├── pch.cpp
│   └── pch.h
└── Ayase.sln

生成目录结构:

.
├── ...
├── Ayase.Accessibility.dll
└── <.net target>
    ├── ...
    └── Ayase.exe

Dependencies

  • Microsoft.Toolkit.Uwp.Notifications
  • Notifications.Wpf
  • ToolGood.Words

使用方法

  • 开始UI识别:Alt + CapLocks (我们会自动还原CapLocks状态)
  • 退出识别:Esc
  • 下一个元素:Tab
  • 上一个元素:Shift + Tab
  • 鼠标点击当前选中的UI元素:Enter
  • 鼠标移动到当前选中的UI元素:Shift + Enter

TODO

  • 增加语音模块
  • 增加设置功能
  • 使用AWSD进行方向操作
  • 纯控制鼠标模式