Capsicain | Windows 下更底层的键盘布局、键位映射工具

一款开源的键盘重映射工具,由于是通过驱动拦截来修改键盘事件,所以需要安装目录下的 install-interception\install-interception.exe 驱动(闭源的,但开发者嗅探过未发现异常)。

最近又找到一个 ctrl2cap 驱动源码,就是微软官网那个。有兴趣可以折腾下,感觉好复杂,玩不过来。

下载

特点

这里抄下官方的,翻译有点生硬

  • 哪里都可以生效。类似可编程键盘
  • 可以重映射任何键盘发出的键位(Fn、亮度这类不行)
  • 几乎一切都可通过配置文件设置
    • 9 个独立配置,通过 esc + <1-9> 即时切换,无需重启
    • 支持模块化,在配置文件中添加 INCLUDE moduleXY
  • 修饰符重映射
    • 如: FJ 映射为 ShiftCapsLock 映射为 MOD9LCtrl 映射为 ReturnAlt>Shift>Ctrl>Alt 间互换
    • 只要发送了 scancode,你就可以重映射
  • 强大的修饰符组合
    • 可以在一行规则内使用 15 个修饰符来作组合键
    • 组合支持修饰符状态判断,如:按下、未按下、抬起、正常按下抬起
  • 简单,快捷的键位映射
    • esc + R 重新加载配置文件
  • Dead key 系统让指定键发送特殊字符,如:äççéñtèd
  • Sequences (宏)可在两键间添加延迟
    • 实时录制按键记录,回放
    • 只在内存中存储、混淆的秘密宏
  • 快!不臃肿的 c/c++ 代码。一个 exe 一个 dll 一个 ini。只读取自己文件夹内的东西,不写入任何东西。
  • 可以跟 autohotkey 联动

为什么不用 XX ?

官方回答

  • autohotkey 是不错,但它运行在用户空间,且不论何时当软件从更底层获取键时总会失效,如:虚拟机、RDP 全屏时、安全盒中、游戏。还有它使用带有多个修饰符的组合时会有限制。
  • Windows Keyboard Layout Creator 是更加可靠,但只支持基本的键位重映射,而且每次修改都要重启才生效。
  • Karabiner 只限苹果
  • Tmk / Qmk with Hasu’s Usb-to-Usb stick 很酷,但不支持笔记本键盘

缺点

使用

配置文件:capsicain.ini,文件内自带大量配置根据需要自行修改即可。

配置样式有好几种

这是我个人的

win caps 互换,按下 caps(物理键 win) 时切换大小写状态和键盘布局

配置时用得上的快捷键

  • esc + r 重载配置
  • esc + d debug 模式
  • esc + t 隐藏到托盘或显示

windows 11 22h2 开机自启设置

win + r 输入 shell:startup 回车,在目录中新建快捷图标,右键修改属性中的

  • 目标为 conhost.exe 目录\capsicain.exe
  • 起始位置为所在目录
2 Likes

看了下相当于是把qmk固件类似的功能从硬件做到了驱动层?功能很强大,值得研究一下。
另外搜了一下,这篇好像是全网第一篇介绍这个项目的中文文章,感谢楼主分享。

需要提醒一下,项目本身虽然是开源的,但引用了另一个商业项目的闭源驱动用于拦截键盘事件(按作者本人的说法,该项目已经存在很久了,而且经过嗅探也没发现问题)。和另一个帖子里用到的驱动其实是同一个:

1 Like

谢谢分享
似乎能解决 AHK 的一个顽疾,热键时常无法生效或独占失败
先马住,什么时间研究一下

按键映射也推荐 kanata,也是驱动拦截,不过作者把普通版本、驱动拦截版本、可调用外部 cmd 版本全分开了,下载的时候注意一下

1 Like

我的电脑有三个键盘(笔记本自身键盘,外接键盘和一个20多按键的小键盘),怎么让配置可以只只驱动小键盘的??

看楼上的回复,AutoHotInterception——把你的笔记本键盘/闲置键盘/单手键盘…用起来~

再次更新:需求不高的我,根据 Interception/samples/caps2esc at master · oblitum/Interception · GitHub 这个模板,打包了个 caps2win,没任何图标,舒服 :melting_face:

更新:重新下个 dll 就好了:rofl:,发现官方没有提供隐藏界面的功能,打扰了
这个怎么用啊 :rofl:,执行 kanata_wintercept.exe --cfg kanata.kbd 没有任何反馈,也没有生效,系统是 windows 11 22h2
配置如下:

(defcfg)

(defsrc caps lmet)

(deflayer test lmet caps)

文件都有
图片

楼上那个和顶楼的不是同一个玩意吧

都是基于同一个驱动开发的,只是方向不一样

这个我之前也折腾过,能识别不同的设备,但并不是能够从底层改按键映射,在应用软件内部修改快捷键识别的还是原本的那个键值。

什么软件?我现在用的自己打包的,识别是改了之后的。最近又找到一个 ctrl2cap 驱动源码,就是微软官网那个。有兴趣可以折腾下,感觉好复杂

:rofl:刚看到。

隐藏的话可以用rbtray,或者CommandTrayHost,后者比较复杂,不过可以同时管理多个终端任务,还可以分配快捷键快速显示隐藏。

kanata我用着还是很舒服的,功能比较多,配置也比较友好,还跨平台。

请教一下, 您是在什么平台使用的 kanata, 我目前使用的 windows , 按照要求下载这两个文件

双击 kanata.exe 后出现一个控制窗口 (下图所示), 这个窗口也不会消失, 也没有实现配置的功能

windows的,这个程序没有ui,命令行只是用来查看输出的,直接用文本编辑器或者 vscode 更改 kananta.kbd ,里面写的是配置。
例如这个最小配置:

(defcfg)

(defsrc a b c)

(deflayer start 1 2 3)

把 abc 映射到 123。

def cfg 是定义配置,里面写一些设置,可以留空但是要有这个条目。
def src 是定义源按键,在这里写需要拦截的按键。
de flayer 是定义按键层,除了start是名字,后面的项要和scr的项数量一致。层可以有多个,第一个层会被当作默认层启用。

还有很多功能可以看文档

文档按键名字从82行开始。

经过反复的尝试,终于成功的食用上了,感谢楼主!

看了半天文档用上了,比ahk配置稍微麻烦一点,分享成果

GLOBAL StartInTraybar
[CONFIG_1]
REWIRE Caps MOD9 Caps
COMBO W [^^^& .... ....] > key(UP)
COMBO A [^^^& .... ....] > key(LEFT)
COMBO S [^^^& .... ....] > key(DOWN)
COMBO D [^^^& .... ....] > key(RIGHT)
COMBO Q [^^^& .... ....] > key(HOME)
COMBO E [^^^& .... ....] > key(END)

说是可以定义某一键盘生效的,但是实际测试只有第一个触发的键盘有效

我也发现了,对我问题不大~就一个键盘+一个被识别成键盘的鼠标

这个怎么实现的?我现在的问题是它不支持鼠标,但是我鼠标也有映射需求

才发现这个 CommandTrayHost,之前为了隐藏 aria2 窗口自己写了个小工具。看来是重复造轮子了 :rofl:
2023-01-08_20h55m12s_MassiGra