博源

博采广纳

使用 autohotkey 利用键盘上的无用功能键

我也是刚刚才接触,并不会一些高端操作,只是把今晚做的事记录下来而已。

主要内容就是使用 autohotkey 将键盘上长期未使用的三个功能键映射为播放、暂停、和下一曲。

前言

因为购买的是所谓商务轻薄本,然后功能键区域就用了三个按键做投影、接听电话、免提等功能,并且还得配合配套的软件才能实现相应的功能,对我来说就比较鸡肋了,倒是媒体控制的三大按键我倒是很缺,所以就一直在找方法更改这三个按键的功能。
于是就找到了 autohotkey 这个强大的软件。
官方网站

获取三个按键的键值

废话

这三个按键是无法直接查看到对应的键值的,自然就无法使用按键映射。
最开始找的的方法是使用 C++ 的 _getch() 函数。因为目前只会一点 C++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

#include <conio.h>
#include <iostream>

using namespace std;

void main()
{
int ch;
cout<<"type in"<<endl;
while (1)
{
if (_kbhit()) // 如果有按键按下,则_kbhit()函数返回真
{
ch = _getch(); // 使用_getch() 函数获取按下的键值
if(ch==27)
break;

else
{
cout << "the key code is:"<<ch<<endl;
} // 当按下 ESC 时循环,ESC 键的键值时 27.
}
}

}

但是这个方法有有一个问题是对一些全局的按键无法返回键值,例如 windows 键之类的,这三个按键也没能正确返回键值,于是就只有另找他法。最后在 autohotkey 的文档里找到了解决方案。

这个方法就是利用 autohotkey 的 #InstallKeybdHook

使用键盘钩子监视键击是为了激活不受 RegisterHotkey(这是操作系统内置的功能) 支持的热字串和键盘热键. 它还支持其他一些功能, 例如 Input 命令.

简单来说就是监视键盘动作的一个钩子 (hook)

使用方法

  1. 下载安装 AuotoHotKey

  2. 新建一个 ahk 脚本文件。
    桌面右键新建 autohotkey 脚本(在哪里新建是无所谓的),右键编辑脚本,加上 #InstallKeybdHook 然后再在后面所以写一个映射,(这个不影响这一步的结果,只要不报错。)例如我的脚本:

1
2
3
4
5
6
7
8
#NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases.
; #Warn ; Enable warnings to assist with detecting common errors.
SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.
#InstallKeybdHook
^j::
Send, My First Script
Return
  1. 获取键值,运行成功后会在任务栏有图标,双击打开主界面,按下 ctrl+k 查看按键历史模式,按下需要查看键值的按键,按下 F5 刷新列表,即出现对应键值。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
       VK  SC	Type	Up/Dn	Elapsed	Key		Window
    -------------------------------------------------------------------------------------------------------------
    A4 038 d 18.95 LAlt C:\Users\zheng\Desktop\New AutoHotkey Script.ahk - AutoHotkey v1.1.30.03
    7E 066 d 0.00 F15
    B3 122 i d 0.00 Media_Play_Pause
    5B 15B d 0.00 LWin
    A4 038 u 0.13 LAlt
    7E 066 u 0.00 F15
    B3 122 i u 0.00 Media_Play_Pause
    5B 15B u 0.00 LWin
    74 03F d 7.03 F5
    Press [F5] to refresh.

例如我的提示信息。因为已做了映射,所以会有按下 F15 然后 执行 Media_play_pause 。注意自己辨别哪一个是自己想要的键值。记下对应的 SC ,(如果按键比较特殊,有特别的命名,也可以直接用名字,例如这个 F15 )

  1. 编写脚本
    (我目前还是菜鸟,只能说写的脚本能用)
    如果用 sc 就用这个格式
1
2
3
SC159:: ; 把 159 替换为您按键的值.
MsgBox, %A_ThisHotkey% was pressed.
return

我使用的是 ::注意没有空格

1
2
3
4
5
6
7
8
9
10
#NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases.
; #Warn ; Enable warnings to assist with detecting common errors.
SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.
F22::Media_Prev
return
F15::Media_Play_Pause
return
F14::Media_Next
return

(return 可省略)
有关 sendMSgbox 的更多内容,请参考官方文档

后言

这个方法据我测试,网易云的 exe 版本无法使用,而 uwp 版本没有问题,从 Microsoft store 下载的 Spotify 也可以正常使用。

关于媒体控制的三大键值分别是
Media_Next 下一首
Media_Prev 上一首
Media_Stop 停止
Media_Play_Pause 播放和暂停

更多常用按键参考 官方文档

Reference

documentation
Autohotkey
codeguru

题图

题图
甘城なつき 的 Pixiv 主页