如何用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
相关产品推荐
相关产品推荐

