You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python脚本将字符串转换为键盘HID按键码?

字符串转HID键盘码并写入/dev/hidg0的Python脚本

实现方案

HID键盘报告固定为8字节格式:

  • 第1字节:修饰键位掩码(比如左Shift对应0x02)
  • 第2字节:保留位(固定填0x00)
  • 第3-8字节:最多6个同时按下的按键码(未按下则填0x00)

下面是直接可用的脚本,包含基础字符映射、大小写处理,以及写入/dev/hidg0的逻辑:

import time

# 基础字符到HID按键码的映射(无需Shift组合)
CHAR_TO_HID = {
    'a': 0x04, 'b': 0x05, 'c': 0x06, 'd': 0x07, 'e': 0x08, 'f': 0x09,
    'g': 0x0a, 'h': 0x0b, 'i': 0x0c, 'j': 0x0d, 'k': 0x0e, 'l': 0x0f,
    'm': 0x10, 'n': 0x11, 'o': 0x12, 'p': 0x13, 'q': 0x14, 'r': 0x15,
    's': 0x16, 't': 0x17, 'u': 0x18, 'v': 0x19, 'w': 0x1a, 'x': 0x1b,
    'y': 0x1c, 'z': 0x1d, '1': 0x1e, '2': 0x1f, '3': 0x20, '4': 0x21,
    '5': 0x22, '6': 0x23, '7': 0x24, '8': 0x25, '9': 0x26, '0': 0x27,
    ' ': 0x2c, '-': 0x2d, '=': 0x2e, '[': 0x2f, ']': 0x30, '\\': 0x31,
    ';': 0x33, '\'': 0x34, '`': 0x35, ',': 0x36, '.': 0x37, '/': 0x38
}

# 需要Shift组合的字符映射
SHIFT_CHAR_TO_HID = {
    'A': 0x04, 'B': 0x05, 'C': 0x06, 'D': 0x07, 'E': 0x08, 'F': 0x09,
    'G': 0x0a, 'H': 0x0b, 'I': 0x0c, 'J': 0x0d, 'K': 0x0e, 'L': 0x0f,
    'M': 0x10, 'N': 0x11, 'O': 0x12, 'P': 0x13, 'Q': 0x14, 'R': 0x15,
    'S': 0x16, 'T': 0x17, 'U': 0x18, 'V': 0x19, 'W': 0x1a, 'X': 0x1b,
    'Y': 0x1c, 'Z': 0x1d, '!': 0x1e, '@': 0x1f, '#': 0x20, '$': 0x21,
    '%': 0x22, '^': 0x23, '&': 0x24, '*': 0x25, '(': 0x26, ')': 0x27,
    '_': 0x2d, '+': 0x2e, '{': 0x2f, '}': 0x30, '|': 0x31, ':': 0x33,
    '"': 0x34, '~': 0x35, '<': 0x36, '>': 0x37, '?': 0x38
}

def send_hid_report(report):
    """将HID报告写入/dev/hidg0"""
    with open('/dev/hidg0', 'wb') as hid_dev:
        hid_dev.write(report)
        hid_dev.flush()

def type_string(input_str):
    """将字符串转换为HID按键操作并发送"""
    for char in input_str:
        report = bytearray(8)  # 初始化空报告
        if char in CHAR_TO_HID:
            # 普通字符,无修饰键
            report[2] = CHAR_TO_HID[char]
        elif char in SHIFT_CHAR_TO_HID:
            # 需要Shift的字符,设置左Shift修饰键
            report[0] = 0x02
            report[2] = SHIFT_CHAR_TO_HID[char]
        else:
            # 未映射字符跳过
            print(f"未支持的字符: {char}")
            continue
        
        # 发送按下按键的报告
        send_hid_report(report)
        time.sleep(0.01)  # 模拟按键按下时长
        
        # 发送释放按键的报告(全0)
        send_hid_report(bytearray(8))
        time.sleep(0.01)

if __name__ == "__main__":
    test_str = "Hello World! 123"
    type_string(test_str)

关键说明

  • 映射表仅包含基础常用字符,如需扩展可根据标准HID码表补充
  • 每个字符必须发送按下和释放两次报告,否则系统会判定按键一直处于按住状态
  • /dev/hidg0需要读写权限,运行脚本时可能需要sudo
  • 休眠时间0.01s可根据实际场景调整,避免按键识别异常

内容的提问来源于stack exchange,提问作者NotAidan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 09:56:19