按键列表(键盘, 鼠标和控制器)

目录

鼠标

常规按钮

名称 描述
LButton 主鼠标按钮. 对应哪个物理按钮取决于系统设置; 默认情况下, 它是鼠标左键.
RButton 副鼠标按钮. 对应哪个物理按钮取决于系统设置; 默认情况下, 它是鼠标右键.
MButton 鼠标中键或滚轮

高级按钮

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

Wheel

名称 描述
WheelDown 向下转动鼠标滚轮(朝向您的方向).
WheelUp 向上转动鼠标滚轮(远离您的方向).
WheelLeft
WheelRight

向左或向右滚动.

这些键可以用作热键, 用于某些(但并非所有) 带第二个滚轮或支持左右滚动的鼠标. 在某些情况下, 必须通过鼠标的自带软件包控制这个功能. 不论鼠标如何特殊, SendClick 都能在支持它们的程序里水平滚动.

键盘

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

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

常规按键

名称 描述
CapsLock CapsLock(大小写锁定键)

注意: Windows IME 可能会干扰 CapsLock 的检测和功能; 有关详情, 请参阅 CapsLock 和 IME.

Space Space(空格键)
Tab Tab(Tab 键)
Enter Enter
Escape(或 Esc) Esc
Backspace(或 BS) Backspace

光标控制按键

名称 描述
ScrollLock ScrollLock(滚动锁定键). 当按住 Ctrl 键时, ScrollLock 键会产生 CtrlBreak 的键码, 但可以通过扫描码与 Pause 区别开来.
Delete(或 Del) Del
Insert(或 Ins) Ins
Home Home
End End
PgUp PgUp(向上翻页键)
PgDn PgDn(向下翻页键)
Up (上方向键)
Down (下方向键)
Left (左方向键)
Right (右方向键)

Numpad 按键

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

名称 描述
Numpad0 / NumpadIns0 / Ins
Numpad1 / NumpadEnd1 / End
Numpad2 / NumpadDown2 /
Numpad3 / NumpadPgDn3 / PgDn
Numpad4 / NumpadLeft4 /
Numpad5 / NumpadClear5 / 通常什么都不做
Numpad6 / NumpadRight6 /
Numpad7 / NumpadHome7 / Home
Numpad8 / NumpadUp8 /
Numpad9 / NumpadPgUp9 / PgUp
NumpadDot / NumpadDel. / Del
NumLock NumLock(数字锁定键). 当按住 Ctrl 键时, NumLock 键会产生 Pause 的键码, 所以请使用 Pause 来代替 ^Pause 作为热键.
NumpadDiv /(除号)
NumpadMult *(乘号)
NumpadAdd +(加号)
NumpadSub -(减号)
NumpadEnter Enter

功能键

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

修饰符键

名称 描述
LWin 左边的 Win. 对应 <# 热键前缀.
RWin

右边的 Win. 对应 ># 热键前缀.

注意:Ctrl/Alt/Shift 不同, 没有一般的/中性的 "Win", 因为操作系统不支持. 然而, 带有 # 修饰符的热键可以触发由任一 Win 键触发.

Control (或 Ctrl) Ctrl. 作为热键(Control::) 时在它弹起时触发, 不过如果加上波浪号前缀可以改变这种情况. 对应 ^ 热键前缀.
LControl (或 LCtrl) Ctrl. 对应 <^ 热键前缀.
RControl (或 RCtrl) Ctrl. 对应 >^ 热键前缀.
Shift Shift. 作为热键(Shift::) 时在它弹起时触发, 不过如果加上波浪号前缀可以改变这种情况. 对应 + 热键前缀.
LShift Shift. 对应 <+ 热键前缀.
RShift Shift. 对应 >+ 热键前缀.
Alt Alt. 作为热键(Alt::) 时在它弹起时触发, 不过如果加上波浪号前缀可以改变这种情况. 对应 ! 热键前缀.
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+PauseCtrl+ScrollLock
Pause Pause(暂停键) 或 Ctrl+NumLock. 当按住 Ctrl 键时, Pause 会产生 CtrlBreak 的键码, 而 NumLock 产生 Pause, 所以请使用 ^CtrlBreak 代替 ^Pause 来作为热键.
帮助 Help(帮助键). 此键可能在大多数键盘上不存在. 它通常和 F1 不同.
Sleep Sleep(休眠键). 注意在一些键盘上的 sleep 键可能不是休眠功能.
SCnnn 请在 nnn 中指定按键的扫描码. 识别上面没有提到的罕见的按键. 请参阅特殊按键了解详情.
VKnn

请在 nn 中指定十六进制的虚拟按键码. 这种极少用的方法还可以避免某些类型的热键需要安装键盘钩子. 例如, 后面的热键不使用键盘钩子, 但副作用是它会在按下 Home 或 NumpadHome 的 其中一个 时触发:

^VK24::MsgBox "You pressed Home or NumpadHome while holding down Control."

已知限制: 强制使用键盘钩子的 VK 热键, 例如 *VK24~VK24, 只会触发其中一个热键, 而不会触发两者(例如触发 NumpadHome 但不触发 Home). 关于 VKnn 方法的更多信息, 请参阅特殊按键.

警告: 只有 Send, GetKeyName, GetKeyVK, GetKeySCA_MenuMaskKey 支持 VKnn 和 SCnnn 组合使用. 如果在任何其他情况下组合使用(或存在任何其他无效后缀), 则不能识别按键. 例如, vk1Bsc001:: 引发一个错误.

游戏控制器(游戏手柄, 操纵杆等)

注意: 由于历史原因, 以下按钮和控件名称以 Joy 开头, 这代表操纵杆. 然而, 它们通常也适用于其他游戏控制器, 如游戏手柄或方向盘.

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

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

例如, 当使用 Xbox Wireless/360 控制器时, JoyX/JoyY 是左摇杆, JoyR/JoyU 是右摇杆, JoyZ 是左右触发器, 而 JoyPOV 是方向键(D-pad).

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

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

另请参阅:

手持遥控

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

特殊按键

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

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

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

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

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

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

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

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

CapsLock 和 IME

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

; 必须安装键盘钩子.
InstallKeybdHook
SendSuppressedKeyUp(key) {
    DllCall("keybd_event"
        , "char", GetKeyVK(key)
        , "char", GetKeySC(key)
        , "uint", KEYEVENTF_KEYUP := 0x2
        , "uptr", KEY_BLOCK_THIS := 0xFFC3D450)
}

将该函数复制到脚本中或保存为库文件夹中的 SendSuppressedKeyUp.ahk, 并在脚本中加入 #Include <SendSuppressedKeyUp>, 可以按照以下方式使用:

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

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

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