Python修改windows键盘映射
新电脑环境的处理之一是修改键盘映射,主Ctrl键使用CapsLock
CapsLock改为LeftCtrl
RightCtrl改为CapsLock
LeftCtrl改为RightCtrl
原来使用KeybMap这个软件修改,由于自己修改的映射很少,改为通过python操作注册表实现
1 2 3 4 5 6 7 8 9 10 11 | import winreg mapVal = b '\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x1d\x00\x3A\x00\x3A\x00\x1D\xE0\x1D\xE0\x1D\x00\x00\x00\x00\x00' rootKey_Machine = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, r "SYSTEM\CurrentControlSet\Control" , 0 , access = winreg.KEY_ALL_ACCESS) rootkey_Machine_Keyboard = winreg.CreateKey(rootKey_Machine, "Keyboard Layout" ) #rootKey_User = winreg.OpenKey(winreg.HKEY_CURRENT_USER, r"System\CurrentControlSet\Control", 0, access=winreg.KEY_ALL_ACCESS) #rootkey_User_Keyboard = winreg.CreateKey(rootKey_User, "Keyboard Layout") winreg.SetValueEx(rootkey_Machine_Keyboard, "Scancode Map" , 0 , winreg.REG_BINARY, mapVal) print ( "Done" ) |
mapVal(二进制值定义)解释:
b'\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x1d\x00\x3A\x00\x3A\x00\x1D\xE0\x1D\xE0\x1D\x00\x00\x00\x00\x00'
红色部分:0-4:Header: Version Information与4-8:Header: Flags,都设置为0
绿色部分:Header: Number of Mappings,标记映射数量。比如这里做3个映射,总数就是03
蓝色部分:映射主体定义。AB写法,即当按下B键时,执行A动作,例如把CapsLock(3A)映射为LeftCtrl(1D),则是:1D 00 3A 00
注:LeftCtrl的键扫描码为1D,值表示为1D 00,RightCtrl的键扫描码为E0 1D,值表示为1D E0
灰色部分:收尾,Null Terminator (0x00000000)
关于注册表中键盘映射的定义,参考其他园丁的文章,或者:
问题:键盘映射写入到currentuser注册表下,不生效(之前使用KeybMap软件,应用当前用户也不生效)
附:
windows 键盘映射表 scancode.doc (live.com)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?