Repository navigation
WindowMark v0.5.3
三件事。
不再需要安装 VC++ 运行库
在全新安装的 Windows 10 上,WindowMarkSetup.exe 和 WindowMark.exe 双击直接报「找不到 VCRUNTIME140.dll / MSVCP140.dll / VCRUNTIME140_1.dll」。
原因是默认动态链接 C/C++ 运行库,这三个 DLL 得由系统提供,全新系统、LTSC、IoT 版上常常没有。用 dumpbin 核对过:0.4.1 到 0.5.2 每一个发布版都有这三项依赖——缺运行库的机器上哪个版本都起不来。
现在六个 exe 全部静态链接,dumpbin 确认已经没有 MSVCP140、VCRUNTIME140*,连 UCRT 的 api-ms-win-crt-* 也没有了。代价是体积:WindowMark.exe 537 KB → 761 KB。
0.5.2 及以前的版本仍然需要运行库,安装方法见仓库里的 WindowMark-依赖安装.md。
书签不再盖住右键菜单
资源管理器里右键,弹出的菜单被书签条压住了一块。
书签条是置顶窗口,而置顶窗口之间谁在上面,看谁最后一次被显示:右键时焦点晃一下,书签条隐藏再显示,就跳回了置顶层的最顶上。现在宿主窗口在前台时,书签条挪到置顶层的末尾——比所有普通窗口高,比右键菜单、输入法候选框、任务栏这些别的程序的置顶窗口低。稳态下不发任何 SetWindowPos。
装了 WGestures 这类软件后,所有边框都消失
用户报告,二分到 v0.4.8 正常、v0.4.9 起不正常。
WGestures 常驻一个铺满全屏、置顶、完全透明的窗口画手势轨迹——眼睛看不见,系统却说它「可见」。v0.4.9 起遮挡由 WindowMark 自己用矩形计算,这种窗口被当成一块不透明的板子,屏幕上所有边框被整圈裁光。
现在鼠标能穿过去的窗口不算遮挡物:
- 带
WS_EX_TRANSPARENT的分层窗口直接判定为可穿透 - 只靠透明像素让鼠标穿过去的,在窗口里取五个点做命中测试,任何一处接得住鼠标就仍然算遮挡
tracking.treat_as_topmost_classes里点名的窗口、被禁用的窗口,照旧算遮挡
没有装 WGestures 本身测,而是用 tools\check-transparent-overlay.py 造同类窗口,数屏幕上边框颜色的像素:
| 测试窗口 | 修复前 | 修复后 |
|---|---|---|
WS_EX_LAYERED + WS_EX_TRANSPARENT 的全屏透明窗口 |
22,868 → 0 | 100% 保住 |
只有 WS_EX_LAYERED、像素全透明 |
22,868 → 0 | 100% 保住 |
| 对照组:同样全屏透明,但正中一块接得住鼠标 | 裁光 | 照样裁光 |
对照组证明修复没有矫枉过正,也证明 WindowMark 确实对测试窗口做出了反应。
WindowMarkDiag.exe 同步:可穿透的窗口不再被报告成「挡住边框的窗口」。
安装:下载 WindowMark-v0.5.3-win64.zip,解压后运行 WindowMarkSetup.exe。不想安装就直接运行解压目录里的 WindowMark.exe。升级会保留现有配置。
完整变更见 CHANGELOG.md。