[开源推荐] 为了在键盘上吃泡面,作者维护超 10 年的键盘锁 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
vladelaina
V2EX    分享发现

[开源推荐] 为了在键盘上吃泡面,作者维护超 10 年的键盘锁

  •  
  •   vladelaina 15 小时 3 分钟前 1182 次点击

     class=

    https://github.com/Nigh/I-wanna-clean-keyboard

    第一眼看到它时,我以为又是哪个大厂出的新玩具。那深色模式的磨砂质感,配合流动的背景粒子,简直太对我们这种“颜值即正义”的程序员胃口了!

    但是仅1.3MB?这未免有点太过于离谱了吧!?

    但当我习惯性地去扒源码想看看是什么神仙架构时,我整个人都愣住了。

    这玩意居然是用 AutoHotKey 写的?!WHAT?!

    image|375x99, 100% image|495x499, 50%

    在我的刻板印象里,AHK 这种语言通常只配拥有 Win98 风格的灰色方框按钮,虽然实用但真的丑到没朋友

    像我是用它来写快捷键的,真的还能写出这样的离谱的效果? image|690x191

    这个项目的作者简直是个“疯子”(绝对的褒义

    翻看它的 main.ahk ,底层逻辑极其老练。作者并没有依赖高层的封装,而是直接定义了底层的回调函数,通过 CallNextHookEx 来处理钩子链。看这一段干净利落的键盘拦截逻辑:

    KeyboardProc(nCode, wParam, lParam){ global if (nCode >= 0){ return 1 } return CallNextHookEx(0, nCode, wParam, lParam) } 

    简单粗暴的 return 1 ,直接在系统底层截断了键盘信号,干净利落。

    2025-12-20_11-45-21_pixian_ai|346x331, 75%

    让我感到震撼的,是它的 UI 实现。作者完全不屑于用 AHK 那简陋的原生 GUI ,而是反手引入了 Neutron 框架,直接在 AHK 里跑了一个 Webview2?!:

    neutron := NeutronWindow().Load(path) .Opt("-Resize") .OnEvent("Close", (neutron) => ExitProc()) .Show("w" winW " h" winH, "iwck") 

    打开它的 html 文件夹,我仿佛走进了一个前端大佬(好像大佬还会写底层!)的炫技现场。为了实现锁屏时那个灵动的粒子漂浮效果,作者纯手写了整整一套 CSS 动画。

    看看这段定义粒子运动轨迹的 keyframes ,那种上升、旋转、渐隐的动态美感,注意!这全是一行行 CSS 堆出来的(那个时候还没有 AI)

    @keyframes animate { 0% { transform: translateY(0) rotate(0deg); opacity: 1; border-radius: 25%; } 100% { transform: translateY(-500px) rotate(540deg); opacity: 0; border-radius: 45%; } } 

    这种感觉怎么形容呢?就像是为了吃顿饺子,特意去造了个顶级醋厂。这种极致的“降维打击”,这种为了“在键盘上吃泡面”这么一个微小的痛点,不惜动用全栈技术去雕琢的劲头。

    image|561x459, 75%

    作为开发者,我们太容易忽视“人”的需求了。我们总想着怎么把性能再压榨 10%,却忘了有时候用户只是想在追番的时候,能放心地把泡面碗搁在键盘上;或者防止自家的猫主子跳上桌子,顺脚把你刚写完还没存的代码删个精光(别问我怎么知道的)。

    image|131x129

    它就像是“绝对领域”展开一样,当你点下那个精致的锁定按钮,屏幕上的粒子开始流转,现实世界的物理误触就被隔绝在外。没有复杂的配置,没有厚重的依赖,只有纯粹的“好用”加“好看

    image|497x370

    这个项目最早的版本可以追溯到 2014 年,那个时候就连 GitHub 都还没发布呢十年! 在这个技术栈半年一换的时代,维护一个“键盘锁”十年,这本身就是一种属于极客的纯粹浪漫

    640|240x240

    如果你也是个经常需要在狭窄桌面上“生存”的开发者,或者家里有一只喜欢在键盘上取暖的猫主子,我强烈建议你试试这个工具。不仅仅是为了好用,更是为了感受那份在代码字里行间流露出的、属于我们程序员独有的极致追求。

    image|522x500

    9 条回复    2025-12-20 23:36:00 +08:00
    Hansah
        1
    Hansah  
       14 小时 5 分钟前
    这二次元太甜了,我扛不住,抱歉
    dasi
        2
    dasi  
       12 小时 44 分钟前 via Android
    一秒猜出是 ahk ,你也来试试吧
    vladelaina
        3
    vladelaina  
    OP
       12 小时 20 分钟前
    @Hansah hhhh,嘿~
    vladelaina
        4
    vladelaina  
    OP
       12 小时 20 分钟前
    @dasi 佬,一起哦~
    undeflife
        5
    undeflife  
       10 小时 39 分钟前
    > 2014 年,那个时候就连 GitHub 都还没发布呢

    说得我一愣,怀疑自己记忆错乱了,实际上 github 08 年就上线了
    vladelaina
        6
    vladelaina  
    OP
       10 小时 29 分钟前
    @undeflife !!!啊,啊,啊这啊这,感谢佬的提醒
    dimlau
        7
    dimlau  
       7 小时 44 分钟前
    在用这个
    lonelykid
        8
    lonelykid  
       7 小时 31 分钟前
    一直在用 KeyFreeze ,就是有时候会不知不觉莫名其妙地退出。
    cheese
        9
    cheese  
       5 小时 42 分钟前
    三模键盘,我擦键盘会直接关开关
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     837 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 21:18 PVG 05:18 LAX 13:18 JFK 16:18
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86