外接的键盘没有Fn。。。也没有调音量的键😅于是想自己弄一个
方法一:修改注册表键盘映射
新建记事本文件打开,粘贴如下内容:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
"Scancode Map"=hex:00,00,00,00,00,00,00,00,04,00,00,00,20,E0,3b,00,2E,E0,3c,00,30,E0,3d,00,00,00,00,00
修改文件名后缀为.reg,双击运行会在注册表的HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout路径下新建Scancode Map,重启电脑后即可生效。
以上代码的内容为:F1静音或开启,F2降低音量,F3提高音量(注意生效之后原先和F1F2F3有关的其他快捷键就失效了)
映射数目是4是因为还要加上用作结尾的00,00,00,00,以此类推如果要修改4个键那应该写05,00,00,00
之后的格式为:(映射之后的扫描码)XX,XX,(原扫描码)XX,XX,最后以00,00,00,00结束
其他键位的扫描码如下:
如果想取消该映射,将"Scancode Map"=hex:后的内容删除再运行,再重启即可。
也可以直接Win+R输入regedit打开注册表,打开对应路径,把Scancode Map删了再重启。
方法二:自定义快捷键
方法一相当于把键盘上的键直接改为映射后的键,所以如果原先有其他软件的快捷键为ctrl+F1之类的组合,也都会被覆盖。
如果不满足要求,可以像这样自定义快捷键:
#include <iostream>
#include <Windows.h>
using namespace std;
const int SLEEP_DURATION = 32;
bool pressing(int vKey) {
return GetAsyncKeyState(vKey) >> 15;
}
void pressDown(int key) {
if (key == 1) {
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0); // 鼠标左键按下
} else if (key == 2) {
mouse_event(MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0);
} else if (key == 4) {
mouse_event(MOUSEEVENTF_MIDDLEDOWN, 0, 0, 0, 0);
} else {
keybd_event(key, 0, 0, 0);
}
}
void pressUp(int key) {
if (key == 1) {
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
} else if (key == 2) {
mouse_event(MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0);
} else if (key == 4) {
mouse_event(MOUSEEVENTF_MIDDLEUP, 0, 0, 0, 0);
} else {
keybd_event(key, 0, 2, 0);
}
}
void press(int key) {
pressDown(key);
Sleep(SLEEP_DURATION);
pressUp(key);
}
int main() {
while (1) {
if (pressing(VK_MENU)) { // 按住ALT
if (pressing(VK_DIVIDE)) { // 同时按住小键盘除号
press(VK_VOLUME_MUTE); // 静音或开启
} else if (pressing(VK_SUBTRACT)) { // 小键盘减号
press(VK_VOLUME_DOWN); // 降低音量
} else if (pressing(VK_ADD)) { // 小键盘加号
press(VK_VOLUME_UP); // 提高音量
}
}
Sleep(SLEEP_DURATION);
}
return 0;
}
运行后即可按ALT+小键盘除号静音或开启,ALT+小键盘减号降低音量,ALT+小键盘加号提高音量,然后编写脚本开机自启挂后台:
set obj = getobject("winmgmts:\\.\root\cimv2")
set v = obj.execquery("select ProcessID from win32_process where name='VK_VOLUME.exe'")
if v.Count > 0 then
for each i in v
i.terminate()
next
end if
dir = "D:\FileRecv\batFolder\"
CreateObject("wscript.shell").run dir + "VK_VOLUME.exe", 0
dir为编译后可执行文件的目录,文件命名为VK_VOLUME.exe,建议右键属性设为管理员运行,否则在游戏内可能不会生效。
把该脚本命名为XXX.vbs,放到C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp路径下,即可开机自启。(第一次可以手动双击运行不用重启)
该脚本可能被360等杀毒软件认为是不必要的开机启动文件,注意别误删就行。