键盘操作
单例类 Keyboard 控制键盘操作。
字段
键盘按键
Keyboard 类中定义了下面罗列的键位常量。需要注意,这些常量并不代表字母或特定的字符串,而代表键盘上的键位。
每个键盘按键均对应一个扫描码(scan code)。扫描码被操作系统获取后,根据操作系统中的键盘布局设置(如中国大陆地区采用的美式键盘布局)解释为相应的虚拟按键(virtual key)。例如,按下美式 QWERTY 布局键盘上的 Q 键后,键盘向操作系统发送一个扫描码,若操作系统的键盘布局为法国 AZERTY 布局,则这个扫描码会被映射到虚拟按键 A。因此,键盘上的“按键名称”并不代表真实的按键,而是对应于某一个扫描码,按下某个特定按键,都会向操作系统发送这个扫描码。对该扫描码的解释方法由操作系统确定。
在罗列下面的键位常量时,遵循美式 QWERTY 键盘布局进行说明,并假定用户的操作系统虚拟按键布局同为美式 QWERTY 键盘布局。
功能区
键盘功能区包含 ESC 键及 F1 ~ F24。
| 字段 | 值 | 说明 |
|---|---|---|
Keyboard.ESCAPE |
"escape" |
转义键 ESC |
Keyboard.F1 |
"f1" |
功能键 F1 |
Keyboard.F2 |
"f2" |
功能键 F2 |
Keyboard.F3 |
"f3" |
功能键 F3 |
Keyboard.F4 |
"f4" |
功能键 F4 |
Keyboard.F5 |
"f5" |
功能键 F5 |
Keyboard.F6 |
"f6" |
功能键 F6 |
Keyboard.F7 |
"f7" |
功能键 F7 |
Keyboard.F8 |
"f8" |
功能键 F8 |
Keyboard.F9 |
"f9" |
功能键 F9 |
Keyboard.F10 |
"f10" |
功能键 F10 |
Keyboard.F11 |
"f11" |
功能键 F11 |
Keyboard.F12 |
"f12" |
功能键 F12 |
Keyboard.F13 |
"f13" |
功能键 F13 |
Keyboard.F14 |
"f14" |
功能键 F14 |
Keyboard.F15 |
"f15" |
功能键 F15 |
Keyboard.F16 |
"f16" |
功能键 F16 |
Keyboard.F17 |
"f17" |
功能键 F17 |
Keyboard.F18 |
"f18" |
功能键 F18 |
Keyboard.F19 |
"f19" |
功能键 F19 |
Keyboard.F20 |
"f20" |
功能键 F20 |
Keyboard.F21 |
"f21" |
功能键 F21 |
Keyboard.F22 |
"f22" |
功能键 F22 |
Keyboard.F23 |
"f23" |
功能键 F23 |
Keyboard.F24 |
"f24" |
功能键 F24 |
现代键盘上基本见不到 F13 ~ F24,但操作系统中仍为其保留了对应键码。
主区
| 字段 | 值 | 说明 |
|---|---|---|
Keyboard.BACKQUOTE |
"tilde" |
< 或 ~ |
Keyboard.ONE |
"1" |
1 或 ! |
Keyboard.TWO |
"2" |
2 或 @ |
Keyboard.THREE |
"3" |
3 或 # |
Keyboard.FOUR |
"4" |
4 或 $ |
Keyboard.FIVE |
"5" |
5 或 % |
Keyboard.SIX |
"6" |
6 或 ^ |
Keyboard.SEVEN |
"7" |
7 或 & |
Keyboard.EIGHT |
"8" |
8 或 * |
Keyboard.NINE |
"9" |
9 或 ( |
Keyboard.ZERO |
"0" |
0 或 ) |
Keyboard.MINUS |
"minus" |
- 或 _ |
Keyboard.EQUAL |
"equal" |
= 或 + |
Keyboard.BACKSPACE |
"backspace" |
退格键 BACKSPACE |
严谨地说,“tilde” 指波浪 “~”,“backquote” 则指反引号 “`”。“”
| 字段 | 值 | 说明 |
|---|---|---|
Keyboard.TAB |
"tab" |
制表键 TAB |
Keyboard.Q |
"q" |
q 或 Q |
Keyboard.W |
"w" |
w 或 W |
Keyboard.E |
"e" |
e 或 E |
Keyboard.R |
"r" |
r 或 R |
Keyboard.T |
"t" |
t 或 T |
Keyboard.Y |
"y" |
y 或 Y |
Keyboard.U |
"u" |
u 或 U |
Keyboard.I |
"i" |
i 或 I |
Keyboard.O |
"o" |
o 或 O |
Keyboard.P |
"p" |
p 或 P |
Keyboard.LEFT_BRACKET |
"lbracket" |
[ 或 { |
Keyboard.RIGHT_BRACKET |
"rbracket" |
] 或 } |
Keyboard.BACKSLASH |
"backslash" |
\ 或 | |
| 字段 | 值 | 说明 |
|---|---|---|
Keyboard.CAPS_LOCK |
"capslock" |
大写锁定、解锁键 CAPS LOCK |
Keyboard.A |
"a" |
a 或 A |
Keyboard.S |
"s" |
s 或 S |
Keyboard.D |
"d" |
d 或 D |
Keyboard.F |
"f" |
f 或 F |
Keyboard.G |
"g" |
g 或 G |
Keyboard.H |
"h" |
h 或 H |
Keyboard.J |
"j" |
j 或 J |
Keyboard.K |
"k" |
k 或 K |
Keyboard.L |
"l" |
l 或 L |
Keyboard.SEMICOLON |
"semicolon" |
; 或 : |
Keyboard.QUOTE |
"quote" |
’ 或 " |
Keyboard.ENTER |
"enter" |
回车键 ENTER |
| 字段 | 值 | 说明 |
|---|---|---|
Keyboard.LEFT_SHIFT |
"lshift" |
左侧 SHIFT 键 |
Keyboard.NON_US_BACKSLASH |
"non_us_slash" |
\ 或 | |
Keyboard.Z |
"z" |
z 或 Z |
Keyboard.X |
"x" |
x 或 X |
Keyboard.C |
"c" |
c 或 C |
Keyboard.V |
"v" |
v 或 V |
Keyboard.B |
"b" |
b 或 B |
Keyboard.N |
"n" |
n 或 N |
Keyboard.M |
"m" |
m 或 M |
Keyboard.COMMA |
"comma" |
, 或 < |
Keyboard.PERIOD |
"period" |
. 或 > |
Keyboard.SLASH |
"slash" |
/ 或 ? |
Keyboard.RIGHT_SHIFT |
"rshift" |
右侧 SHIFT 键 |
对于非标准的美式 QWERTY 键盘布局,左侧 SHIFT 键右侧有时会存在一个反斜线键,即上表中的
Keyboard.NON_US_BACKSLASH。
| 字段 | 值 | 说明 |
|---|---|---|
Keyboard.LEFT_CTRL |
"lctrl" |
右侧 CTRL 键 |
Keyboard.LEFT_WIN |
"lgui" |
左侧 Windows 徽标键 |
Keyboard.LEFT_ALT |
"lalt" |
左侧 ALT 键 |
Keyboard.SPACE |
"spacebar" |
空格键 SPACE |
Keyboard.RIGHT_ALT |
"ralt" |
右侧 ALT 键 |
Keyboard.RIGHT_WIN |
"rgui" |
右侧 Windows 徽标键 |
Keyboard.APPS |
"appkey" |
应用程序键 |
Keyboard.RIGHT_CTRL |
"rctrl" |
右侧 CTRL 键 |
控制区
| 字段 | 值 | 说明 |
|---|---|---|
Keyboard.PRINT_SCREEN |
"printscreen" |
截屏键 PRINT SCREEN |
Keyboard.SCROL_LLOCK |
"scrolllock" |
滚动锁定、解锁键 SCROLL LOCK |
Keyboard.PAUSE_BREAK |
"pause" |
暂停、断点键 PAUSE/BREAK |
| 字段 | 值 | 说明 |
|---|---|---|
Keyboard.INSERT |
"insert" |
插入键 INSERT |
Keyboard.DELETE |
"delete" |
删除键 DELETE |
Keyboard.HOME |
"home" |
返回页首键 HOME |
Keyboard.END |
"end" |
返回页尾键 END |
Keyboard.PAGE_UP |
"pageup" |
向上翻页键 PAGE UP |
Keyboard.PAGE_DOWN |
"pagedown" |
向下翻页键 PAGE DOWN |
| 字段 | 值 | 说明 |
|---|---|---|
Keyboard.UP |
"up" |
向上键 ↑ |
Keyboard.LEFT |
"left" |
向左键 ← |
Keyboard.DOWN |
"down" |
向下键 ↓ |
Keyboard.RIGHT |
"right" |
向右键 → |
数字区
| 字段 | 值 | 说明 |
|---|---|---|
Keyboard.NUM_LOCK |
"numlock" |
数字锁定、解锁 NUM LOCK |
Keyboard.DIVIDE |
"numslash" |
除法键 / |
Keyboard.MULTIPLY |
"numstar" |
乘法键 * |
Keyboard.NUM_MINUS |
"numminus" |
减法键 - |
Keyboard.NUM_SEVEN |
"num7" |
数字键 7 或 HOME |
Keyboard.NUM_EIGHT |
"num8" |
数字键 8 或 ↑ |
Keyboard.NUM_NINE |
"num9" |
数字键 9 或 PAGE UP |
Keyboard.NUM_PLUS |
"numplus" |
加法键 + |
Keyboard.NUM_FOUR |
"num4" |
数字键 4 或 ← |
Keyboard.NUM_FIVE |
"num5" |
数字键 5 |
Keyboard.NUM_SIX |
"num6" |
数字键 6 或 → |
Keyboard.NUM_ONE |
"num1" |
数字键 1 或 END |
Keyboard.NUM_TWO |
"num2" |
数字键 2 或 ↓ |
Keyboard.NUM_THREE |
"num3" |
数字键 3 或 PAGE DOWN |
Keyboard.NUM_ZERO |
"num0" |
数字键 0 或 INSERT |
Keyboard.NUM_PERIOD |
"numperiod" |
小数点键 . 或数字区删除键 |
Keyboard.NUM_ENTER |
"numenter" |
回车键 ENTER |
unreleased
说明:已通过 press 按下,但未通过 release 或 reset 弹起的按键,类型为 { string | boolean |nil }。当某个按键通过 press 按下,则在此表中该按键状态被记录为 true;后续若通过 release 弹起,则记录为 nil。
frozen
说明:键盘是否处于冻结状态,类型为 boolean。
注解:冻结状态下,Keyboard 提供的除 reset 外所有键盘操作接口失效。
方法
freeze
说明:冻结键盘,冻结后所有的键盘操作(reset 除外)将被忽略。
原型:Keyboard:freeze()
unfreeze
说明:与 freeze 相对,解除键盘冻结状态。
原型:Keyboard:unfreeze()
is_frozen
说明:判断键盘是否冻结。
原型:Keyboard:is_frozen()
返回:若处于冻结状态,返回 true;否则,返回 false。
is_key_name_valid
说明:判断给定的按键名称是否有效(即在 键盘按键 列出的键位中)。
原型:Keyboard:is_key_name_valid(key_name)
key_name:待检查的按键名称,类型为any。
返回:若按键有效,返回 true;否则,返回 false。
press
说明:按下一个或多个按键。
原型:Keyboard:press(key, delay, precise)
key:需要按下的按键或按键列表,类型为string | string[]。可以为单个按键(如:Keyboard.ESCAPE),也可以为若干按键形成的列表,如{ Keyboard.A, Keyboard.B, Keyboard.C }。delay:按下按键后的延迟时间,类型为integer | nil,单位为毫秒,缺省值为50。precise:延迟时间是否需要精确定时,类型为boolean | nil。
注解:调用该接口按下某个按键后,将在 unreleased 表中记录按下的按键。
release
说明:弹起一个或多个按键。
原型:Keyboard:release(key, delay, precise)
key:需要弹起的按键或按键列表,类型为string | string[]。可以为单个按键(如:Keyboard.ESCAPE),也可以为若干按键形成的列表,如{ Keyboard.A, Keyboard.B, Keyboard.C }。delay:弹起按键后的延迟时间,类型为integer | nil,单位为毫秒,缺省值为50。precise:延迟时间是否需要精确定时,类型为boolean | nil。
注解:调用该接口弹起某个按键后,将在 unreleased 表中移除(若存在)该按键。
click
说明:敲击(按下并弹起)某个按键。
原型:Keyboard:click(key, delay, precise)
key:需要敲击的按键或按键列表,类型为string | string[]。可以为单个按键(如:Keyboard.ESCAPE),也可以为若干按键形成的列表,如{ Keyboard.A, Keyboard.B, Keyboard.C }。delay:敲击按键后的延迟时间,类型为integer | nil,单位为毫秒,缺省值为50。precise:延迟时间是否需要精确定时,类型为boolean | nil。
click_several_times
说明:敲击(按下并弹起)指定按键若干次。
原型:Keyboard:click_several_times(key, times, interval, delay, precise)
key:需要敲击的按键或按键列表,类型为string | string[]。可以为单个按键(如:Keyboard.ESCAPE),也可以为若干按键形成的列表,如{ Keyboard.A, Keyboard.B, Keyboard.C }。times:重复次数,类型为integer | nil,缺省值为0。interval:敲击间隔时间,类型为integer | nil,单位为毫秒(最后一次敲击后不适用该间隔时间),缺省值为50。delay:敲击按键后的延迟时间,类型为integer | nil,单位为毫秒,缺省值为50。precise:延迟时间是否需要精确定时,类型为boolean | nil。
reset
说明:重置键盘,即弹起 unreleased 中记录的所有按键。
原型:Keyboard:reset()
注解:该接口不受 frozen 影响。
puts
说明:通过键盘输入由字母和数字构成的字符串。
原型:Keyboard:puts(s)
s:待输入的字符串,类型为string。
注解:s 中非字母和数字的内容将被忽略。
此接口未来会被改进为支持输入标点。
is_modifier_pressed
说明:判断修饰键是否被按下。
原型:Keyboard:is_modifier_pressed(modifier)
modifier:修饰键,包括Keyboard.LEFT_SHIFT、Keyboard.RIGHT_SHIFT、Keyboard.LEFT_CTRL、Keyboard.RIGHT_CTRL、Keyboard.LEFT_ALT、Keyboard.RIGHT_ALT。
返回:若指定的修饰键被按下,则返回 true;否则,返回 false。
注解:若不关心修饰键的左右之分,可使用下列值(注意:仅限此接口中使用)。
| 字段 | 值 | 说明 |
|---|---|---|
Keyboard.SHIFT |
"shift" |
SHIFT 键 |
Keyboard.CTRL |
"ctrl" |
CTRL 键 |
Keyboard.ALT |
"alt" |
ALT 键 |
资源回收
Keyboard 通过 Error 注册了灾难故障处理函数。在发生灾难错误导致程序无法继续运行时(需要保证顶层由 Error:catch 处理所有异常,另请参阅 错误处理),将通过 reset 弹起所有已通过 press 按下但未弹起的按键。