将闲置键盘设置为自定义键盘 一键复制/粘贴/撤回/重做/打开软件/切换窗口/切换歌曲

一台电脑连接俩键盘,一个键盘正常使用,另一个键盘试试自定义一下吧!

一、获取键盘的硬件 ID(Windows 系统)

  1. 按下Win + X,选择设备管理器
  2. 在设备管理器中展开键盘选项,会看到已连接的键盘设备(可能显示为 "标准键盘""HID 键盘设备" 等)。
  3. 右键点击其中一个键盘,选择属性 → 切换到详细信息 选项卡 → 在 "属性" 下拉菜单中选择硬件 ID
  4. 此时会显示该键盘的硬件 ID(格式通常为HID\VID_XXXX&PID_XXXX&REV_XXXXUSB\VID_XXXX&PID_XXXX),复制该 ID(可右键选择 "复制值")。
  5. 对另一个键盘重复上述操作,分别记录两个键盘的硬件 ID(记为 ID1 和 ID2,对应键盘 A 和键盘 B)。

二、编写 AutoHotkey 脚本

AutoHotkey 的RawInput功能可实现按设备 ID 区分输入设备,以下是具体脚本模板及说明:

  1. 先确保已安装 AutoHotkey(建议下载最新版,官网:https://www.autohotkey.com/)。
  2. 新建文本文档,将后缀改为.ahk(如DoubleKeyboard.ahk),用记事本打开并写入以下脚本:
bash 复制代码
#Persistent
#SingleInstance Force

; 定义两个键盘的硬件ID(替换为你实际获取的ID,可只保留VID和PID部分,简化匹配)
KeyBoardID1 := "VID_1234&PID_5678"  ; 键盘A的硬件ID(可截取VID和PID部分,无需完整)
KeyBoardID2 := "VID_9ABC&PID_DEF0"  ; 键盘B的硬件ID

; 初始化RawInput
RawInput_Init()

; 监听键盘输入事件
OnMessage(0x00FF, "RawInput_Event")  ; 0x00FF是自定义消息,也可使用其他未占用消息号

return

; RawInput初始化函数
RawInput_Init() {
    global hRawInput
    VarSetCapacity(RAWINPUTDEVICE, 8)
    NumPut(1, RAWINPUTDEVICE, 0, "UShort")  ; USHORT usUsagePage; 1=通用桌面控件
    NumPut(6, RAWINPUTDEVICE, 2, "UShort")  ; USHORT usUsage; 6=键盘
    NumPut(0x100, RAWINPUTDEVICE, 4, "UInt") ; DWORD dwFlags; 0x100=RIDEV_INPUTSINK
    NumPut(WinExist("A"), RAWINPUTDEVICE, 8, "Ptr") ; HWND hWndTarget; 绑定到当前脚本窗口
    if (!RegisterRawInputDevices(&RAWINPUTDEVICE, 1, 8)) {
        MsgBox, 注册RawInput失败!
        ExitApp
    }
}

; RawInput事件处理函数
RawInput_Event(wParam, lParam) {
    global KeyBoardID1, KeyBoardID2
    VarSetCapacity(RAWINPUTHEADER, 16)
    nSize := VarSetCapacity(RAWINPUT, 0)
    if (GetRawInputData(lParam, 0x10000003, &RAWINPUT, &nSize, 16) = -1)  ; 0x10000003=RID_INPUT
        return
    hDevice := NumGet(RAWINPUTHEADER, 0, "Ptr")
    if (!hDevice)
        return
    ; 获取设备名称(包含硬件ID信息)
    VarSetCapacity(szDevice, 256)
    if (GetRawInputDeviceInfo(hDevice, 0x20000000, &szDevice, &nSize) = -1)  ; 0x20000000=RIDI_DEVICENAME
        return
    DeviceName := StrGet(&szDevice, nSize, "UTF-16")
    ; 匹配硬件ID
    if (InStr(DeviceName, KeyBoardID1)) {
        ; 处理键盘A的按键
        ProcessKey(RAWINPUT, "A")
    } else if (InStr(DeviceName, KeyBoardID2)) {
        ; 处理键盘B的按键
        ProcessKey(RAWINPUT, "B")
    }
}

; 按键处理函数
ProcessKey(RAWINPUT, KeyBoardType) {
    if (NumGet(RAWINPUT, 0, "UShort") = 1) {  ; 确认是键盘输入
        KeyFlags := NumGet(RAWINPUT, 10, "UShort")  ; 按键状态(0=按下,1=释放,2=重复)
        KeyCode := NumGet(RAWINPUT, 12, "UShort")  ; 虚拟键码
        if (KeyFlags = 0) {  ; 仅处理按键按下事件
            if (KeyCode = 0x70) {  ; F1键的虚拟键码为0x70
                if (KeyBoardType = "A") {
                    Run, explorer.exe "https://www.baidu.com"  ; 键盘A的F1打开浏览器(百度)
                } else if (KeyBoardType = "B") {
                    Run, notepad.exe  ; 键盘B的F1打开记事本
                }
            }
            ; 可添加其他按键处理,例如:
            ; if (KeyCode = 0x71) { ; F2键
            ;     if (KeyBoardType = "A") {
            ;         ; 键盘A的F2功能
            ;     }
            ; }
        }
    }
}

; 调用系统API的声明(需放在脚本开头或函数外)
RegisterRawInputDevices(pRawInputDevice, nNumDevices, cbSize) {
    return DllCall("User32.dll\RegisterRawInputDevices", "Ptr", pRawInputDevice, "UInt", nNumDevices, "UInt", cbSize)
}
GetRawInputData(hRawInput, uiCommand, pData, pcbSize, cbSizeHeader) {
    return DllCall("User32.dll\GetRawInputData", "Ptr", hRawInput, "UInt", uiCommand, "Ptr", pData, "Ptr", pcbSize, "UInt", cbSizeHeader)
}
GetRawInputDeviceInfo(hDevice, uiCommand, pData, pcbSize) {
    return DllCall("User32.dll\GetRawInputDeviceInfoW", "Ptr", hDevice, "UInt", uiCommand, "Ptr", pData, "Ptr", pcbSize)
}

三、脚本修改说明

  1. 硬件 ID 简化 :脚本中KeyBoardID1KeyBoardID2可只保留VID_XXXX&PID_XXXX部分(例如设备管理器中硬件 ID 为HID\VID_04F3&PID_0103&REV_0100,则截取VID_04F3&PID_0103),避免因完整 ID 过长导致匹配失败。
  2. 按键虚拟键码 :脚本中0x70是 F1 键的虚拟键码,其他按键的虚拟键码可参考 AutoHotkey 官方文档(虚拟键码表),例如 F2 为0x71、Enter 为0x0D、Ctrl 为0x11等。
  3. 功能自定义 :将Run, explorer.exe "https://www.baidu.com"Run, notepad.exe替换为你需要的功能,例如:
    • 打开软件:Run, "C:\Program Files\Microsoft Office\root\Office16\WINWORD.EXE"(打开 Word)。
    • 快捷键操作:Send, ^c(模拟 Ctrl+C 复制)。
    • 执行命令:Run, cmd /c echo "Hello World"(执行 CMD 命令)。

四、运行与测试脚本

  1. 保存.ahk脚本文件后,双击运行(需已安装 AutoHotkey,脚本图标会出现在系统托盘)。
  2. 分别用键盘 A 和键盘 B 按下 F1 键,测试是否分别打开浏览器和记事本。
  3. 若脚本未生效,可检查:
    • 硬件 ID 是否正确(可尝试在脚本中保留完整硬件 ID,或调整匹配的字符串片段)。
    • AutoHotkey 是否为管理员权限运行(右键脚本→"以管理员身份运行")。
    • 键盘是否为 USB/HID 标准键盘(部分特殊键盘可能不支持 RawInput 直接识别,可尝试更换 USB 端口)。

五、进阶优化

  1. 多按键扩展 :在ProcessKey函数中添加更多KeyCode判断,实现多个按键的自定义功能。
  2. 按键释放处理 :若需处理按键释放事件,可将KeyFlags = 1的条件加入判断。
  3. 脚本暂停 / 退出 :在脚本中添加热键(如Esc::ExitApp),按下 Esc 键退出脚本,方便调试。
相关推荐
Ankie Wan17 小时前
windows技巧:通过cmd禁止鼠标,键盘灯唤醒电脑。
windows·计算机外设·电脑
Chennnng19 小时前
键盘参数选购
前端·css·计算机外设
WF_YL2 天前
将键盘的某个按键换成其他的组合键快捷键,比如我不常用SCRLK键,将SCRLK键换成CTRL+C
计算机外设
就叫飞六吧3 天前
鼠标滚轮检测py脚本
计算机外设
HoneyMoose4 天前
体验一下科大讯飞的语音输入键盘
计算机外设
KL132881526934 天前
显示器除了卓威还有泰坦,耳机除了飓风还有VSG
游戏·计算机外设·耳机
ACP广源盛139246256735 天前
GSV2231G@ACP#产品参数规格解析与应用分享
嵌入式硬件·计算机外设·音视频
Jwest20215 天前
工业显示器在淬火机床中的应用
计算机外设
TESmart碲视6 天前
2025年 顶级8K DP KVM切换器双PC双显示器解决方案
计算机外设