Skip to content

Repository files navigation

ZPin

Version Platform Python License

Windows 截图标注 + 贴图工具(Snipaste 式)。 Python + PySide6 + Win32(ctypes), 单文件绿色版,无需安装。

当前版本:1.2.0(版本号唯一来源在 defaults.pyVERSION)。

功能特性

  • 截图:全局快捷键/托盘发起,多屏混合 DPI 支持;悬停自动吸附界面元素 (UIA:按钮/编辑框/链接/图片/列表项/选项卡…,元素过大时回退整窗),窗口矩形取 DWM 可见边界、不多出一圈隐形边框;UIA 查询期间遮罩窗自动让出命中测试, 慢 provider 自动熔断不卡交互;吸附建议框挖空透出真实画面。 框选/移动/缩放时边与角自动对齐屏幕和其它窗口的边、中线(红色参考线,可关)。
  • 放大镜与取色:拖动边角/手柄调整时自动出现 10 倍放大镜(像素网格 + 中心红框 + 坐标色值信息条,贴边自动翻转);按 Alt 随时召唤/收起;截图时随时按 C 复制光标处颜色(#RRGGBB,画面顶部弹绿色提示)。
  • 框选:按住拖拽自由框选、单击即吸附;Space 切换自由框选/吸附模式; Tab(未框选时)轮换检测层级 自动→仅窗口→仅元素;框选后 8 角/边手柄缩放、 选区外自动扩选、方向键微调(Shift 加速)、Ctrl+方向 沿该侧扩选Tab(已框选)循环手柄;工具栏首位的「移动」工具让你随时恢复框内拖动。
  • 标注:移动、画笔、荧光笔、直线、箭头、矩形、椭圆、标注气泡、文本、马赛克、 序号标记(自动递增,撤销/擦除后新序号补位)、橡皮擦(对象级擦除, 悬停红框预览将被擦除的图形);12 色板 + 自定义色 + 三档粗细;撤销/重做(Ctrl+Z/Y)。 荧光笔/橡皮擦/气泡标注/序号标记收进 ⋮ 菜单(点 ⋮ 再点一次即收起),悬停图标弹中文气泡。 已画图形可二次编辑:不选工具时点中即选中,可整体拖动、拖端点改形状、 换颜色/粗细、Del 删除(均可撤销);文本/气泡字号跟随「粗细」档位。 移动选区时已画标注跟着框走(Snipaste 语义);文字/气泡输入框随内容自适应大小。
  • 多种出口:Enter 复制;工具栏「贴图」把截图钉到桌面;「保存」一键存到默认目录 (气泡回执路径),「另存为」自行选位置。写盘在后台线程,保存瞬间不卡界面。
  • 贴图:置顶无边框窗口;光标锚点滚轮缩放(≥100% 最近邻、<100% 平滑、<50% 缩略图); 不透明度/边框/阴影/发光;旋转/翻转/灰度;贴图分组;双击贴图 = 隐藏
  • 托盘:分组菜单 + 贴剪贴板图片 + 截图历史(重贴/复制/另存为)+ 贴图组管理。
  • 帮助:托盘 → 帮助,左列分类导航 + 右侧内容,键位实时读配置(改键即同步)。
  • 设置:常规/界面/截图/贴图/输出/快捷键/关于七页;热键即时注册、冲突标红; 文件名模板实时预览;每页可独立恢复默认。

默认快捷键

动作 默认键
全屏截图 Ctrl+Shift+A
框选截图 Ctrl+Shift+X
隐藏/显示全部贴图 Ctrl+Shift+H
切换到下一组 Ctrl+Shift+G

默认键避开了 F1/F3、Alt+L 等常被系统/驱动/其它工具占用的组合。 从旧版本升级时,启动会自动把未被用户修改过的旧默认键迁移到上表组合。 在 设置 → 快捷键 里修改键位后立即生效:托盘菜单右侧的快捷键提示、 帮助窗口里的键位表都会同步显示新键(无需重启)。

选区内的快捷键:Enter 复制、双击 复制、Ctrl+S 快速保存、Ctrl+C 复制、Ctrl+Z/Y 撤销/重做、 Del 删除选中的标注图形、方向键微调(Shift 加速、Ctrl+方向 扩选、Tab 循环手柄)、 Alt 召唤放大镜、C 复制光标处色值、Space 切换自由框选/吸附、Esc 取消。

截图交互说明

  • 全屏截图(Ctrl+Shift+A / 托盘「全屏截图」)= 一键截取全屏:不进选区界面,抓屏后 直接复制到剪贴板(同样进截图历史,可再取)。
  • 框选截图(Ctrl+Shift+X / 托盘「框选截图」)= 框选
    • 进入截图后光标始终可见(十字准星),鼠标在哪就从哪开始框选。
    • 按住左键拖动 = 自由框选(边和角自动对齐屏幕与其它窗口的边、中线, 命中时画红色参考线,可在 设置 → 截图 关闭);
    • 单击 = 吸附选中光标下的界面元素或窗口(悬停时轮廓高亮),随后 Enter 或双击才完成截取;什么都不点直接 Enter = 截取当前吸附到的目标。
    • Space 随时切换「吸附模式」与「纯自由框选」;Tab(未框选时)轮换检测层级。
    • 框选完成后:拖动 8 个角/边手柄调整大小(自动出现放大镜);按住选区内拖动可整体 移动选区(已画标注跟着框走);鼠标移到选框外单击/拖动 = 自动扩选。
    • 工具栏首位是移动工具:选了标注工具后框内变画图,点「移动」即可恢复框内拖动。
  • 截图历史 = 兜底:每次截图都进历史(托盘 → 截图历史),每条可「重贴 / 复制 / 另存为」——剪贴板被别的内容覆盖后也能随时找回重新复制。
  • 托盘「停用全局快捷键」:点一次禁用全部全局热键(托盘图标变为琥珀底、菜单文字变为 「启用全局快捷键」),再点恢复;状态持久化,重启后保持。

画质与性能设计

  • 零隐式缩放:抓图画布 = 物理虚拟桌面,每屏按自己的原生像素 1:1 贴入, 缩放倍率恒为 1——混合 DPI 下副屏不会被上采样发糊。
  • 裁剪逐字节无损:非整数逻辑坐标框选,成品与源图逐字节一致 (出现第 3 种颜色就意味着做了插值)。
  • 标注按矢量几何直接烘焙在物理像素上,边带抗锯齿过渡,成品尺寸不变。 PNG / BMP 与剪贴板全程无损;JPEG 默认质量 95(实测整屏 PSNR 45.7dB, 体积仅 0.45MB,质量 75 只有 35.1dB 且文字边缘有彩噪;旧配置自动迁移)。
  • 响应:截图链路实测约 40ms(抓图约 36ms);写盘在后台线程,主线程零阻塞。
  • 内存:每次截图完成后原图立刻交工作线程压成 PNG(1080p 整屏约 8MB → 0.7MB); 空闲 1 分钟后补压 + 裁剪工作集(可在 设置 → 常规 关闭)。马赛克底图首次使用才生成, 条数与字节双预算控制历史占用(设置 → 常规)。

快速开始

要求:Windows 10/11,Python 3.12+。

git clone https://github.com/<you>/ZPin.git
cd ZPin
python -m venv .venv
.venv\Scripts\python -m pip install PySide6-Essentials
.venv\Scripts\python main.py

运行回归测试(离屏执行,不弹窗口):

.venv\Scripts\python tests\test_all.py

打包

build.bat        打包 dist\ZPin.exe
build.bat run    打包后自动启动

依赖 .venv(PySide6-Essentials + pyinstaller);可选 tools\upx-* 压缩。 打包时排除未使用的 Qt 模块以缩小体积。脚本只负责打包,不会修改系统设置。

配置与日志

  • 配置文件:%LOCALAPPDATA%\ZPin\config.ini(启动时自动滚动备份为 config.ini.bak
  • 日志:同目录 zpin.log(启动分段计时、热键注册、未捕获异常都落在这里)
  • 开机自启:HKCU Run 键(不要求管理员);托盘「停用快捷键」状态同样持久化

目录结构

main.py            入口 + App 装配类(日志/单实例/托盘/热键/子系统接线/截图分发)
config.py          配置读写与版本迁移
defaults.py        默认配置唯一事实来源 + 软件版本号(VERSION)
capture.py         多屏抓图:画布=物理虚拟桌面,每屏原生像素 1:1 + DesktopMap 分段坐标换算
overlay.py         选区覆盖层 + 跨屏状态机(吸附/放大镜/参考线/检测层级/绘制调度)
uia.py             UI Automation 界面元素吸附(纯 ctypes;慢 provider 自动熔断)
controller.py      标注控制器(工具状态机/文字编辑/标注跟移)
engine.py          标注引擎(对象栈 + 撤销/重做 + 马赛克底图按需生成)
shapes.py          标注形状(线/箭头/矩形/椭圆/画笔/荧光笔/马赛克/文本/气泡/序号;可二次编辑)
toolbar.py         截图标注工具条(SVG 图标 + 手绘圆角面板 + ⋮ 菜单 + 中文气泡)
text_edit.py       原地文本编辑器(框体随内容自适应)
pin_window.py      贴图窗口(缩放/旋转/翻转/灰度/透明度/右键全项菜单)
pins.py            贴图管理(组结构/全局显隐/切组)
history.py         截图历史(条数 + 字节双预算;截图后即压 + 空闲补压)
output.py          文件名模板与保存(快速保存 / 另存为,写盘在后台线程)
prefs/             设置(dialog/pages/key_edit)
help_dialog.py     帮助窗口(左侧分类导航 + 右侧内容,键位实时读配置)
winapi.py          Win32 边界(可见窗口矩形 = DWM 扩展边框 + 虚拟桌面裁剪)
hotkey.py tray.py memtrim.py startup.py app_icon.py
tests/test_all.py  全量回归测试(离屏运行,覆盖吸附/标注/保存/帮助/设置等)
assets/            app_icon.ico(打包用)

图标

唯一来源是 app_icon.py 里的 SVG 模板(渐变玻璃蓝底 + 取景框角标 + Z; 停用快捷键时整底变琥珀、描边变深蓝)。build.bat 打包前会重新生成 assets\app_icon.ico;想单独导出:

.venv\Scripts\python -c "import app_icon; app_icon.write_ico('assets/app_icon.ico')"

许可

MIT © 2026 xinghui79

About

Windows 截图 + 标注 + 贴图工具(Snipaste 风格,PySide6 + Win32,单文件免安装)| Snipaste-style screenshot annotation & pin tool for Windows

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages