爱意满满的作品展示区。
geelaw

关闭 Windows 11 窗口圆角边框(无需修改系统文件/管理员权限)

  •  3
     
  •   geelaw ·
    GeeLaw · 3 days ago · 1588 views

    一个简单的 Windows API 小练手:

    1. 注册 Windows 事件钩子,对每个新窗口禁用圆角;
    2. 对每个当前存在的窗口禁用圆角。

    单个 .cc 文件,排除注释和空行仅 41 行,古法编程。

    https://github.com/GeeLaw/DisableRoundCorners

    11 replies    2026-08-10 10:51:27 +08:00
    loading
        1
    loading  
       3 days ago
    挂钩子,那很消耗资源了。
    chutsetien
        2
    chutsetien  
       3 days ago
    哈哈,难得见到同样超级厌恶圆角的人。

    不过其实这个已经有人做过了,参: https://github.com/valinet/Win11DisableRoundedCorners
    geelaw
        3
    geelaw  
    OP
       3 days ago
    @loading #1 是不会注入其他进程的钩子,而且只监听很少的事件、反应很快,测试没有发现性能问题。

    @chutsetien #2 我知道那个方案的存在,但是那个方案需要管理员权限且会修改系统文件,这很可能导致自动更新挂掉,然后你会发现 DWM 起不来可能导致超时后蓝屏等等一系列问题……
    chutsetien
        4
    chutsetien  
       3 days ago
    @geelaw 倒不是那样,而是每次 CU 之后都得重新执行一次。
    fairytale
        5
    fairytale  
       3 days ago via Android
    有没有 win98 主题/doge
    loading
        6
    loading  
       3 days ago
    为了方便测试,我让 ai 帮改了个 python3 版本的,按 Esc 退出并还原。

    直接 python3 xx.py 即可。
    还是有点圆角,不是 win8/10 的直角。

    https://gist.github.com/YCF/d336cf50ec0e28a9a2902aa23c774d74
    geelaw
        7
    geelaw  
    OP
       3 days ago
    @loading #6 “不是直角”的原因单纯是 AI 写出来的是乱七八糟的:

    - EVENT_OBJECT_SHOW 是 0x8002 ,而 0x8003 是 _HIDE
    - EVENT_OBJECT_UNCLOAKED 是 0x8018
    - DWMWCP_DONOTROUND 是 1 ,而 3 是 DWMWCP_ROUNDSMALL
    - DWMWCP_ROUNDDEFAULT 不存在,正确的名字是 DWMWCP_DEFAULT ,这个数是 0
    - 处理所有当前窗口的回调里面过滤莫名其妙,尤其是取消设置的时候,无论窗口是否最小化都应该重设
    - if not hooks 语义错误,因为 hooks 是列表,只要安装了一个就会认为成功
    - 取消设置的逻辑错误,一般地,没有办法取消,因为每个进程自己也可能调用 DSWA 来控制自己的窗口要怎么圆角
    loading
        8
    loading  
       3 days ago   ❤️ 1
    @geelaw #7 按你的意见修改了,确实是直角,ai 确实啥也不是哈。

    直角看着舒服多了,感谢。

    btw:gist 也更新了。
    Need4more
        9
    Need4more  
       3 days ago via iPhone
    支持 gcc 编译吗,vs 还是太重了对于一个小程序
    loading
        10
    loading  
       2 days ago
    @Need4more #9 这就是我为啥贴了个 python 的出来,毕竟为了一时好奇装 vs 太重了。
    当然,op 不提供 exe 也是正确的。
    geelaw
        11
    geelaw  
    OP
       2 days ago
    @Need4more #9 任何以 Win32 为受支持目标的应该都可以,试了一下 mingw-w64 gcc 15.2.0 (Compiler Explorer / Godbolt) 的 SDK 比较旧,把 EVENT_OBJECT_UNCLOAKED 替换为 0x8018 之后是可以的编译成功的。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1068 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 18:44 · PVG 02:44 · LAX 11:44 · JFK 14:44
    ♥ Do have faith in what you're doing.