Skip to content

WindowMark v0.4.10

Choose a tag to compare

@yakoye yakoye released this 09 Sep 08:07
· 48 commits to main since this release

v0.4.9 之后的三处收尾。

边框不再压在任务栏上

窗口贴着工作区底边(半屏吸附,或者手动拖到贴边)时,边框往外那两像素正好落在任务栏
那条上。实测:窗口内五像素命中 12 个采样点,窗口外命中 6 个。

跨屏那种越界本来就没有——画布只覆盖本监视器,越界的部分根本没地方落笔。压任务栏挡不住,
因为画布覆盖的是整块监视器,含任务栏那一条。

接法上有个坑值得记:不能把夹取后的矩形直接当成边框环的外矩形。圆角的路径以它为
基准算半径和位置,改了弧就错位。外矩形保持不动,只把可见范围限制在夹取后的矩形里——
弧还是原来那条,只是压出去的那截不画。

修完实测:窗口外从 6 个采样点降到 0,窗口内仍是 12,边框本身完好。

重装会把开机自启动弄丢

现象是重启电脑之后 WindowMark 没起来。查下去两边对不上:Run 键里没有启动命令了,而
StartupApproved\Run 里那条「已批准」还留着。

两段代码合起来造成的:卸载器关掉自启动(真卸载之后不该开机启动一个已经不存在的程序,
这是对的),而安装器读「当前状态」来决定装完要不要开——升级是「先卸载再安装」,安装器
读到的正是卸载刚清空的那个状态。每升级一次就关掉一次,直到某次重启才暴露。

如果你之前升级过 WindowMark,开机自启动很可能已经被关掉了。 装上这一版之后,在托盘
菜单里重新勾一次「开机启动」即可;此后升级不会再弄丢。

顺带修了关闭路径的残缺:只删 Run 键的值,不删批准记录,留下的正是「批准了一个不存在
的启动项」这种状态——查「为什么开机没启动」的人会先看到那条已批准,以为一切正常。

锁屏时挂起

锁屏期间 GetForegroundWindow() 返回 LockApp.exe,它会以前台窗口的身份混进快照,边框
就画到锁屏界面上去了;解锁后还要等下一个事件才恢复。而且锁屏后台仍会有窗口在动(播放器、
定时刷新的面板),每一次都白重画一遍谁也看不见的东西。

收到 WTS_SESSION_LOCK 停画并把画布擦干净,WTS_SESSION_UNLOCK 时重新取一次快照。
实测锁定时擦掉 99.92%,解锁后精确回到原值。

诊断工具:删掉失效的,改造还有用的

overlay 重构之后「每个窗口一个边框窗口」那个模型没有了,靠它工作的七个工具全部失效——
它们查的是 WindowMark.WindowBorder 这个已经不存在的窗口类。删掉,check-maximized.py
改用像素判据重写:不再问「这个窗口有没有配对的边框窗口」,直接去看那几条线画出来没有。

包里带的工具换了一批,都是能帮你自己解决具体症状的:

工具 用途
measure_shadow_auto.bat 量窗口矩形比可见部分大多少,--apply 直接写进配置
measure-gap.py 量边框缺口对不对得上遮挡,--all 扫全桌面
diagnose-window.py 某个窗口为什么没边框、被谁盖了
inspect-corner.py 逐像素看圆角画成什么样
watch-line-over.py 守着抓「边框画到了上层窗口身上」

升级直接覆盖安装,配置不受影响。