# 按键列表(键盘, 鼠标和操纵杆)

## 目录

- 鼠标
  - 常规按键
  - 高级按键
  - 滚轮
- 键盘
  - 常规按键
  - 光标控制按键
  - 数字键盘
  - 功能键
  - 修饰键
  - 多媒体键
  - 其他按键
- 操纵杆
- 手持遥控
- 特殊按键
- CapsLock 和 IME

## 鼠标

### 常规按键

名称 | 描述
--- | ---
LButton | Send 中使用的是鼠标左键, 热键中使用的是鼠标主键. 换句话说, 如果用户通过系统设置调换了按钮, `LButton::` 是通过点击鼠标 右 键来物理激活的, 而 `Send {LButton}` 的执行与物理点击 左 键相同. 要始终执行逻辑上的左键单击, 请使用 `Click Left` 或 `Send {Click Left}`.
RButton | Send 中使用的是鼠标右键, 热键中使用的是鼠标副键. 换句话说, 如果用户通过系统设置调换了按钮, `RButton::` 是通过点击鼠标 左 键来物理激活的, 而 `Send {RButton}` 的执行与物理点击 右 键相同. 要始终执行逻辑上的右键单击, 请使用 `Click Right` 或 `Send {Click Right}`.
MButton | 鼠标中键或滚轮

### 高级按键

名称 | 描述
--- | ---
XButton1 | 鼠标的第四个按键. 一般和 Browser_Back 执行相同功能.
XButton2 | 鼠标的第五个按键. 一般和 Browser_Forward 执行相同功能.

### 滚轮

名称 | 描述
--- | ---
WheelDown | 向下转动鼠标滚轮(朝向您的方向).
WheelUp | 向上转动鼠标滚轮(远离您的方向).
WheelLeft WheelRight | [v1.0.48+]: 向左或向右滚动. 需要 Windows Vista 或更高版本. 这些可以在带第二个滚轮或支持左右滚动的鼠标(但不是所有) 中作为热键. 在某些情况下, 必须使用与鼠标捆绑在一起的软件来控制这些功能. 无论使用哪种鼠标, Send 和 Click 都可以用于在支持它的程序中水平滚动.

## 键盘

注意: 字母和数字按键的名称和单个字母或数字相同. 例如: b 表示 `B`, 而 5 表示 `5`.

虽然任何单个字符都可以用作键名, 但其含义(SC 扫描码或 VK 虚拟键码) 取决于当前的键盘布局. 此外, 根据具体情况, 某些特殊字符可能需要转义或用大括号括起来. [v1.1.27+]: 字母 a-z 或 A-Z 可以用来指代相应的虚拟键码(通常是 vk41-vk5A), 即使它们不包含在当前的键盘布局中.

### 常规按键

名称 | 描述
--- | ---
CapsLock | `CapsLock`(大小写锁定键) 注意: Windows IME 可能会干扰 CapsLock 的检测和功能; 有关详情, 请参阅 CapsLock 和 IME.
Space | `Space`(空格键)
Tab | `Tab`(Tab 键)
Enter | `Enter`(回车键)
Return | 不推荐: 使用同义词 `Enter` 来减少歧义.
Escape(或 Esc) | `Esc`(退出键)
Backspace(或 BS) | `Backspace`(退格键). 当 `Ctrl` 被按住时, `ScrollLock` 产生 `CtrlBreak` 的按键代码, 但可以通过扫描码将其与 `Pause` 区分开来.

### 光标控制

名称 | 描述
--- | ---
ScrollLock | `ScrollLock`(滚动锁定键)
Delete(或 Del) | `Del`(删除键)
Insert(或 Ins) | `Ins`(插入改写切换键)
Home | `Home`
End | `End`
PgUp | `PgUp`(向上翻页键)
PgDn | `PgDn`(向下翻页键)
Up | `↑`(向上方向键)
Down | `↓`(向下方向键)
Left | `←`(向左方向键)
Right | `→`(向右方向键)

### 数字键

由于系统行为, 根据 `NumLock` 是 ON(开) 还是 OFF(关), 以下用斜杠分隔的键识别为不同的按键. 如果 `NumLock` 为 OFF 但 `Shift` 按下, 系统将临时释放 `Shift` 并且就像 `NumLock` 为 ON 状态一样.

名称 | 描述
--- | ---
Numpad0 / NumpadIns | `0` / `Ins`
Numpad1 / NumpadEnd | `1` / `End`
Numpad2 / NumpadDown | `2` / `↓`
Numpad3 / NumpadPgDn | `3` / `PgDn`
Numpad4 / NumpadLeft | `4` / `←`
Numpad5 / NumpadClear | `5` / 通常什么都不做
Numpad6 / NumpadRight | `6` / `→`
Numpad7 / NumpadHome | `7` / `Home`
Numpad8 / NumpadUp | `8` / `↑`
Numpad9 / NumpadPgUp | `9` / `PgUp`
NumpadDot / NumpadDel | `.` / `Del`
NumLock | `NumLock`(数字锁定键). 当 `Ctrl` 被按住时, `NumLock` 产生 `Pause` 的按键代码, 所以在热键中使用 `^Pause` 来代替 `^NumLock`.
NumpadDiv | `/`(除号)
NumpadMult | `*`(乘号)
NumpadAdd | `+`(加号)
NumpadSub | `-`(减号)
NumpadEnter | `Enter`

### 功能键

名称 | 描述
--- | ---
F1 - F24 | 在大多数键盘顶部的 12 个或更多的功能键.

### 修饰符键

名称 | 描述
--- | ---
LWin | 左边的 `Win`. 对应的热键前缀为 `<#`.
RWin | 右边的 `Win`. 对应的热键前缀为 `>#`. 注意: 与 `Ctrl`/`Alt`/`Shift` 不同, 没有一般的/中性的"Win"键, 因为操作系统不支持. 然而, 带有 `#` 修饰符的热键可以触发由任一 `Win` 触发.
Control(或 Ctrl) | `Ctrl`. 单独作为热键(`Control::`) 时它在弹起时触发, 不过如果加上颚化符前缀可以改变这种情况. 对应的热键前缀为 `^`.
Alt | `Alt`. 单独作为热键(`Alt::`) 时它在弹起时触发, 不过如果加上颚化符前缀可以改变这种情况. 对应的热键前缀为 `!`.
Shift | `Shift`. 单独作为热键(`Shift::`) 时它在弹起时触发, 不过如果加上颚化符前缀可以改变这种情况. 对应的热键前缀为 `+`.
LControl(或 LCtrl) | 左 `Ctrl`. 对应的热键前缀为 `<^`.
RControl(或 RCtrl) | 右 `Ctrl`. 对应的热键前缀为 `>^`.
LShift | 左 `Shift`. 对应的热键前缀为 `<+`.
RShift | 右 `Shift`. 对应的热键前缀为 `>+`.
LAlt | 左 `Alt`. 对应的热键前缀为 `<!`.
RAlt | 右 `Alt`. 对应的热键前缀为 `>!`. 注意: 如果您的键盘布局存在 AltGr 而不是 RAlt, 那么您完全可以根据这里描述的那样通过 `<^>!` 把它作为热键前缀使用. 此外, `LControl & RAlt::` 可以把 AltGr 自身设置成热键.

### 多媒体键

下面列出的每个按键的功能可以通过修改 Windows 注册表进行替换. 这个表格中显示的是在 Windows 系统的大多数版本中每个按键的默认功能.

名称 | 描述
--- | ---
Browser_Back | 后退
Browser_Forward | 前进
Browser_Refresh | 刷新
Browser_Stop | 停止
Browser_Search | 搜索
Browser_Favorites | 收藏夹
Browser_Home | 主页
Volume_Mute | 静音
Volume_Down | 调低音量
Volume_Up | 增加音量
Media_Next | 下一首
Media_Prev | 上一首
Media_Stop | 停止
Media_Play_Pause | 播放/暂停
Launch_Mail | 打开默认的电子邮件程序
Launch_Media | 打开默认的媒体播放器
Launch_App1 | 打开我的电脑
Launch_App2 | 打开计算器

### 其他按键

名称 | 描述
--- | ---
AppsKey | `Menu`. 这是调用右键上下文菜单的按键.
PrintScreen | `PrtScr`(截屏键)
CtrlBreak | `Ctrl`+`Pause` 或 `Ctrl`+`ScrollLock`
Pause | `Pause`(暂停键) 或 `Ctrl`+`NumLock`. 当 `Ctrl` 被按住时, `Pause` 产生 `CtrlBreak` 的按键代码, 而 `NumLock` 产生 `Pause` 的按键代码, 所以在热键中使用 `^CtrlBreak` 来代替 `^Pause`.
Break | 不推荐: 使用同义词 `Pause` 来代替.
Help | `Help`(帮助键). 此键可能在大多数键盘上不存在. 它通常和 `F1` 不同.
Sleep | `Sleep`(休眠键). 注意在一些键盘上的 sleep 键可能不是休眠功能.
SCnnn | 请在 nnn 中指定按键的扫描码. 识别上面没有提到的罕见的按键. 请参阅特殊按键了解详情.
VKnn | 请在 nn 中指定十六进制的虚拟按键码. 这种极少用的方法还可以避免某些类型的热键需要安装键盘钩子. 例如, 后面的热键不使用键盘钩子, 但副作用是它会在按下 `Home` 或 NumpadHome 的 其中一个 时触发:
    ^VK24::MsgBox 您按下 Home 或 NumpadHome 键的同时按住了 Control 键.
已知限制: 强制使用键盘钩子的 VK 热键, 例如 `*VK24` 或 `~VK24`, 只会触发其中一个热键, 而不会触发两者(例如触发 NumpadHome 但不触发 `Home`). 关于 VKnn 方法的更多细节, 请参阅特殊按键. 警告: 只有 Send, GetKeyName(), GetKeyVK(), GetKeySC() 和 #MenuMaskKey 支持 VKnn 和 SCnnn 组合使用. [v1.1.27+]: 无效后缀的存在阻止了 VKnn 被识别. 例如, 在 v1.1.27+ 中, `vk1Bsc001::` 会引发错误, 但是 `sc001` 在以前的版本中是被忽略的(没有效果).

## Joystick

Joy1 到 Joy32: 操纵杆的按钮. 要辅助判断您操纵杆的按钮编号, 请使用此测试脚本. 请注意这里不支持热键前缀符, 例如 ^(control) 和 +(shift) (尽管可以使用 GetKeyState() 作为替代方法). 还必须注意, 如果活动窗口设计对操纵杆按钮进行检测, 那么操纵杆按钮按下时总是会 "传递" 给它.

尽管下列操纵杆控制器的名称不能设为热键, 但它们可以用于 GetKeyState():

- JoyX, JoyY 和 JoyZ: 操纵杆的 X(水平), Y(垂直) 和 Z(高度/深度) 轴.
- JoyR: 操纵杆的方向舵或第 4 轴.
- JoyU 和 JoyV: 操纵杆的第 5 和第 6 轴.
- JoyPOV: 视点(帽) 控制器.
- JoyName: 操纵杆或其驱动的名称.
- JoyButtons: 操纵杆支持的按钮数(不总是准确的).
- JoyAxes: 操纵杆支持的轴数.
- JoyInfo: 提供由零个或多个后面的字母组成的字符串, 这些字母表示操纵杆的功能: Z(有 Z 轴), R(有 R 轴), U(有 U 轴), V(有 V 轴), P(有 POV 控制器), D(POV 控制器有少数离散的/不同的设置), C(POV 控制器是连续的/良好的). 示例字符串: ZRUVPD

多个操纵杆: 如果计算机上有多个操纵杆并且您想使用第一个外的其他操纵杆, 那么请在控制器名称的前面加上操纵杆的编号(最大为 16). 例如, 2joy1 表示第二个操纵杆的首个按钮.

注意: 如果您在使用脚本识别您的操纵杆时遇到问题, 曾有人报告说尽管只有一个操纵杆却需要指定大于 1 的操纵杆编号. 不清楚这种方法是如何得到的或是否正常, 不过请尝试在操纵杆测试脚本中使用操纵杆编号也许可以帮助确定这种方法是否适合您的系统.

另见:

- 操纵杆重映射: 使用操纵杆发送键击和鼠标点击的方法.
- 操纵杆到鼠标的映射脚本: 把操纵杆作为鼠标使用.

## 手持遥控

通过 WinLIRC 客户端脚本响应手持遥控器的信号.

## 特殊按键

如果您的键盘或鼠标含有前面没有列出的按键, 那么使用下列步骤后您仍可能把它设为热键.

1. 确保至少有一个使用键盘钩子的脚本正在运行. 打开脚本的主窗口并在菜单栏中选择 "View->Key history" 后您可以判断脚本是否使用了键盘钩子.
2. 双击脚本的托盘图标来打开其主窗口.
3. 按下您键盘上的其中一个 "神秘按键".
4. 选择菜单项 "View->Key history"
5. 向下滚动到页面的底部. 在底部附近的某个地方可以看到您按键的按下和弹起事件. 注: 一些按键不生成事件, 因此这里看不到它们的事件. 如果是这种情况, 那么您不能直接把此特殊按键设为热键, 因为您的键盘驱动或硬件在很低的的层面处理它, AutoHotkey 无法访问. 有关可能的解决方案, 请参阅下文.
6. 如果检测到了您的按键, 请记下列表中第二列的 3 位十六进制值(例如 159).
7. 要把此键定义为热键, 请参照此例:

       SC159:: ; 把 159 替换为您按键的值.
       MsgBox, %A_ThisHotkey% was pressed.
       return

反向: 要把其他键重映射 为 "神秘按键", 请参照此例:

    ; 把 159 替换为上面找到的值. 把 FF(如果需要) 替换为
    ; 按键的虚拟键, 它可以在按键历史页面的首列找到.
    #c::Send {vkFFsc159} ; 有关详情, 请参阅 Send {vkXXscYYY}.

可选的解决方案: 如果您的按键或鼠标按钮没有在按键历史页面检测到, 那么下面的其中一种方法可能有帮助:

1. 重新配置您鼠标或键盘的附带软件(有时可以在控制面板或开始菜单中访问) 来让 "神秘按键" 发送其他的键击. 然后可以在脚本中把这样的键击设置为热键. 例如, 如果您配置神秘按键来发送 `Ctrl`+`F1`, 然后在脚本中通过使用 `^F1::` 您可以把这个按键间接的设置为热键.

2. 试试 AHKHID. 你还可以尝试以 `RawInput*`, `USB HID` 或 `AHKHID` 作为关键字在论坛进行搜索.

3. 下面是最后的手段, 通常应该在其他所有方法都无效时才去尝试. 这是由于成功的机会很小且可能会引起难以取消的不必要的副作用:
   禁用或移除您键盘或鼠标的附带软件, 或者让它使用更标准的驱动, 例如操作系统内置的那个. 这里假设您特殊的键盘或鼠标使用自己的驱动并且您不使用其自带驱动和软件提供的功能.

## CapsLock 和 IME

Windows IME 的某些配置(如 日文输入与英文键盘) 使用 CapsLock 来切换模式. 在这种情况下, CapsLock 被 IME 压制, 并且无法被 AutoHotkey 检测. 不过, `Alt`+`CapsLock`, `Ctrl`+`CapsLock` 和 `Shift`+`CapsLock` 等快捷键可以通过变通的方法禁用. 具体来说, 发送松开按键来修改 IME 的状态, 但通过给键盘钩子发送信号来抑制该事件, 从而防止任何其他影响. 可以使用以下函数来实现这一目的:

    ; 需要 AutoHotkey v1.1.26+, 并且必须安装键盘钩子.
    #InstallKeybdHook
    SendSuppressedKeyUp(key) {
        DllCall("keybd_event"
            , "char", GetKeyVK(key)
            , "char", GetKeySC(key)
            , "uint", KEYEVENTF_KEYUP := 0x2
            , "uptr", KEY_BLOCK_THIS := 0xFFC3D450)
    }

将函数复制到脚本中或保存为 SendSuppressedKeyUp.ahk 放入函数库, 可以按照以下方式使用该函数:

    ; 禁止 IME 的 Alt+key 快捷键.
    ~LAlt::SendSuppressedKeyUp("LAlt")

    ; 测试热键:
    !CapsLock::MsgBox % A_ThisHotkey

    ; 重映射 CapsLock 为 LCtrl 以与 IME 兼容的方式.
    *CapsLock::
        Send {Blind}{LCtrl DownR}
        SendSuppressedKeyUp("LCtrl")
        return
    *CapsLock up::
        Send {Blind}{LCtrl Up}
        return

dftg