我们知道,个人计算机最早的输入方式是CLI命令行,GUI和鼠标是后来的事。然而,键盘终归是理论效率更高的交互方式。人们为双手不用离开键盘来干鼠标的事情做出过不少产品设计,比如小红点。那么,软件上有哪些实现方式呢?
操作页面元素
访问键
微软的推荐设计规范的内容。 微软的learn文档
一般表现为单击alt时主菜单控件(有时包括子控件)的名称旁大写字母出现下划线,按下对应键即可触发控件。一般alt+字母快捷键也有效。
一般同时会有方向键导航,即左右切换主菜单选中,上下切换子菜单选中,左右收起展开菜单等。
不过用法多样(不够规范),比如有时候单击alt后才出现字母,比如有的字母是悬浮在控件上的
FluentSearch
这个全功能搜索软件致力于……搜索
屏幕搜索会给屏幕上的控件设置字母快捷键
它另外还有个应用内搜索,实用性欠佳,不过配合讲述人模式做无障碍设计倒是挺好的。
无障碍设计
对于Web无障碍设计来说,完备的无鼠标操作也是很重要的一部分。
国内前些年无障碍设计被提上日程,也有了些规范文档,比如无障碍说明_上海市人民政府规定了快捷键的设计。
另外,通过语音操作控件也经常附带在语音播报器/屏幕阅读器里,尤其是移动端。更远的还有其他创新交互方式,就和本文无关了,这里不再赘述。无障碍设计是个很大的话题。
模拟鼠标
模拟鼠标的移动、点击等行为
Windows的“使鼠标更易于使用”
将数字小键盘改为鼠标键。
AutoHotKey
这么通用又简单的方式,不写个小脚本怎么行。
还原前文的数字键模拟鼠标键:
; 设置基本移动速度,加速和减速倍数
baseSpeed := 10
acceleration := 3
deceleration := 0.5
; 当按下数字键时,实现光标移动
0::MoveCursor(0, baseSpeed)
1::MoveCursor(-baseSpeed, baseSpeed)
2::MoveCursor(0, baseSpeed)
3::MoveCursor(baseSpeed, baseSpeed)
4::MoveCursor(-baseSpeed, 0)
6::MoveCursor(baseSpeed, 0)
7::MoveCursor(-baseSpeed, -baseSpeed)
8::MoveCursor(0, -baseSpeed)
9::MoveCursor(baseSpeed, -baseSpeed)
; 当按下 Ctrl + 数字键时,实现加速光标移动
^0::MoveCursor(0, baseSpeed * acceleration)
^1::MoveCursor(-baseSpeed * acceleration, baseSpeed * acceleration)
^2::MoveCursor(0, baseSpeed * acceleration)
^3::MoveCursor(baseSpeed * acceleration, baseSpeed * acceleration)
^4::MoveCursor(-baseSpeed * acceleration, 0)
^6::MoveCursor(baseSpeed * acceleration, 0)
^7::MoveCursor(-baseSpeed * acceleration, -baseSpeed * acceleration)
^8::MoveCursor(0, -baseSpeed * acceleration)
^9::MoveCursor(baseSpeed * acceleration, -baseSpeed * acceleration)
; 当按下 Shift + 数字键时,实现减速光标移动
+0::MoveCursor(0, baseSpeed * deceleration)
+1::MoveCursor(-baseSpeed * deceleration, baseSpeed * deceleration)
+2::MoveCursor(0, baseSpeed * deceleration)
+3::MoveCursor(baseSpeed * deceleration, baseSpeed * deceleration)
+4::MoveCursor(-baseSpeed * deceleration, 0)
+6::MoveCursor(baseSpeed * deceleration, 0)
+7::MoveCursor(-baseSpeed * deceleration, -baseSpeed * deceleration)
+8::MoveCursor(0, -baseSpeed * deceleration)
+9::MoveCursor(baseSpeed * deceleration, -baseSpeed * deceleration)
; 移动光标的函数
MoveCursor(x, y) {
MouseMove, x, y, 0, R
return
}
由于我把笔记本键盘禁用了懒得再启用,没法(虽然可以改)测试数字小键盘,不过应该直接在每行数字前面加个"Numpad"就行。
方向键版本:
; 设置每次按键移动的像素值
pixelAmount := 10
largePixelAmount := 200
; 当按下 Alt+方向键 时,实现光标在屏幕上按像素移动
!Left::
MouseMove, -%pixelAmount%, 0, 0, R
return
!Right::
MouseMove, %pixelAmount%, 0, 0, R
return
!Up::
MouseMove, 0, -%pixelAmount%, 0, R
return
!Down::
MouseMove, 0, %pixelAmount%, 0, R
return
; 当按下 Ctrl+Alt+方向键 时,实现光标在屏幕上移动200个像素
^!Left::
MouseMove, -%largePixelAmount%, 0, 0, R
return
^!Right::
MouseMove, %largePixelAmount%, 0, 0, R
return
^!Up::
MouseMove, 0, -%largePixelAmount%, 0, R
return
^!Down::
MouseMove, 0, %largePixelAmount%, 0, R
return
Quicker
要在quicker实现上面这种,要么动作写成持续运行在后面循环监听,要么快捷键里每个都设置一下,这不能接受。相对的,我只设置了键盘代替左右键单击:Ctrl+"[“和”]“分别模拟左右键单击,Capslock因为需要拦截原本的大小写功能,单纯快捷键不能实现,得先设置常用辅助功能-按键映射。
放动作里了
当然了,ahk写起来也很简单,只是懒得用。