适用于 Windows 平台的快捷窗口管理工具 - 按住鼠标中键,快速管理窗口!
(本项目代码完全用AI编写)
只需按住鼠标中键,移动鼠标选择操作,松开即可完成窗口管理 - 无需记忆复杂的键盘快捷键!
- 圆环(BasicRadial):圆环底色 + 蓝色高亮选中,简洁直观
- Headshot(CSHeadshotOctagon):八角星造型的硬朗布局 —— 默认样式
- 蜘蛛网(SpiderWeb):多层同心环 + 放射线
- 八卦(Bagua):八卦图形风格
命名说明:设置页上的样式项
Headshot取自 CS 的爆头图标, 早期文档里叫「八角星」—— 指同一个样式,造型仍是八角星。
共 15 种动作,设置页的下拉框按四组显示(组头不可选):
- 窗口状态:最小化、最大化、回到桌面 (Win+D)、窗口居中、关闭窗口
- 半屏:左/右/上/下 半屏
- 四分屏:左上/左下/右上/右下 四个象限
- 三分之二屏:左/右 2/3 屏幕(适合多任务)
旧版的「最大化/还原切换」「窗口置顶切换」两个动作已移除。
尺寸类 / 位置类动作带开关语义(半屏 / 四分屏 / 三分之二屏 / 窗口居中,共 11 个): 第一次按当前逻辑触发;对同一个窗口再次选择同一个菜单时,还原该窗口在 第一次触发前的尺寸、位置和窗口状态(原窗口是最大化/最小化的,还原后仍是 最大化/最小化,不只是摆回矩形)。「窗口居中」只挪位置、不改尺寸。 每个动作各自记原点,互不干扰。
系统分屏改道:操作配置页底部有「修饰键」设置项(默认左 Alt)。 触发动作时按住该修饰键,且动作是左/右半屏或四象限这类 Windows 自带分屏 能表达的(Win+方向键,Win10/11 通用),则改走系统原生分屏——用上系统 分屏的后续特性(分屏后继续 Win+方向调整、跨显示器跟随等)。其余动作 (上下半屏、三分之二、居中、窗口状态类)无等价系统按键,按住修饰键也走 WinLoop 原逻辑。
- 自定义每个扇区的操作(点击扇区选择)
- 调整菜单大小、颜色
- 颜色选择器:点击色块弹出取色窗口,RGB / HSV / HSL / HEX 四格式互转,切换格式不漂移
- 可配置触发延时(默认 200ms)
- 支持开机自启动
- 最小化到系统托盘
- 双击触发键显示:支持三组触发键:左右 Alt / 左右 Shift / 左右 Ctrl
- 按 ESC 收起:不会因为点击覆盖层而收起
- 展示内容可配置:图片 / 文字(支持 Markdown)/ 网页(URL)
- 图片预览:设置页可直接看到当前生效的图片,宽度跟随窗口自适应; 未选图时展示随包分发的默认键位图
- 下载最新安装包(
release/WinLoop_V0.2-YYYYMMDDHHMM.exe) - 安装并运行
WinLoop - 程序将在系统托盘运行
(可选)如果你需要免安装版本,可使用 build/V0.2-YYYYMMDDHHMM/ 目录下的发布产物。
时间戳精度为分钟(
yyyyMMddHHmm)——同一分钟内重复构建会复用同一目录。
- 显示菜单:按住鼠标中键约 0.2 秒
- 选择操作:移动鼠标到目标方向(扇区会高亮为蓝色)。 高亮只看方向、不看距离——指针移出菜单图形之外(甚至屏幕另一角)也照样保持高亮; 只有指针正好落在圆心、方向无定义时才不高亮
- 执行操作:松开中键完成操作
- 双击系统托盘图标
- 或右键托盘图标 → 选择"设置"
BasicRadialMenu 的 8 个扇区从 12 点钟方向开始,按顺时针编号为 Position1 ~ Position8。
默认映射(可在设置中修改):
| 方向 | 扇区 | 默认动作 |
|---|---|---|
| ↑ | Position1 | 最大化 |
| ↗ | Position2 | 右上 1/4 |
| → | Position3 | 右 2/3 |
| ↘ | Position4 | 回到桌面 |
| ↓ | Position5 | 最小化 |
| ↙ | Position6 | 左下 1/4 |
| ← | Position7 | 左 2/3 |
| ↖ | Position8 | 左上 1/4 |
- Windows 10 / 11 (64位)
- .NET Core 3.1 Runtime
- 带中键的鼠标
- Visual Studio 2019+ 或 VS Code
- .NET Core 3.1 SDK
# 开发版本编译
dotnet build WinLoop\WinLoop.csproj -c Debug
# 正式构建(产出可双击运行的 exe + 自动打开产物目录)
.\job-build.ps1
# 输出: ./build/V0.2-{yyyyMMddHHmm}/
# 打包安装程序(需要 Inno Setup;找不到时降级出免安装 zip)
.\job-pack.ps1
# 输出: ./release/WinLoop_V0.2-{yyyyMMddHHmm}.exe
# 找不到 ISCC 时降级为 ./release/WinLoop_V0.2-{yyyyMMddHHmm}_portable.zip
⚠️ 打包前先清WinLoop\bin和WinLoop\obj,否则增量构建会把上一版 残留的 dll 一起带进产物,体积会异常膨胀(曾出现 dll 涨到 34MB)。
底层脚本 build.ps1 / release.ps1 只负责干活、不打开目录;
日常用上层的 job-build.ps1 / job-pack.ps1 即可。
发布产物自带两个自检开关,用于验证「编译通过但运行时才暴露」的问题:
# 字体自检:验证内嵌字体能否解析、字重是否落到不同字面
# 注意:参数是【日志文件路径】
.\build\latest\WinLoop.exe --fontcheck .\fontcheck.txt
# 设置窗口自检:构造窗口、逐页截图、断言布局与控件尺寸
# 注意:参数是【输出目录】,报告写在 <目录>\report.txt
.\build\latest\WinLoop.exe --settingscheck .\probe-out\sc这两个自检必须挂在 WinLoop.exe 上,不能用外部探针程序 ——
pack://application:,,, 的解析基准是入口程序集,外部探针永远解析不到。
WinLoop/
├── WinLoop.sln # 解决方案文件
├── WinLoop/ # 主项目
│ ├── App.xaml.cs # 应用入口、系统托盘、自检开关分发
│ ├── AssemblyInfo.cs # 程序集元数据
│ ├── app.manifest # Per-Monitor V2 DPI 感知声明
│ ├── Config/
│ │ └── ConfigManager.cs # JSON 配置读写
│ ├── Menus/ # 菜单样式实现
│ │ ├── RadialMenu.cs # 菜单基类(含 DrawnRadius 契约)
│ │ ├── BasicRadialMenu.cs # 圆环
│ │ ├── CSHeadshotMenu.cs # Headshot(八角星造型)
│ │ ├── CSHeadshotLayers.cs # Headshot 图层数据
│ │ ├── CSHeadshotPathData.cs # Headshot 路径数据
│ │ ├── SpiderWebMenu.cs # 蜘蛛网
│ │ ├── BaguaMenu.cs # 八卦
│ │ └── RadialMenuFactory.cs # 按配置创建菜单实例
│ ├── Models/
│ │ ├── AppConfig.cs # 配置数据结构
│ │ └── SizingScale.cs # 本屏 DPI 缩放比(仅供设置面板换算显示)
│ ├── UI/
│ │ ├── MenuOverlayWindow.xaml # 菜单覆盖层
│ │ ├── MenuPreviewWindow.xaml # 菜单样式预览窗(贴在主窗口界外的衍生窗)
│ │ ├── XuanKongSiOverlayWindow.xaml # 悬空寺覆盖层
│ │ ├── SettingsWindow.xaml # 设置窗口(左导航 4 页)
│ │ ├── ColorPickerWindow.xaml # 颜色选择器
│ │ ├── FontSelfCheck.cs # --fontcheck 实现
│ │ └── SettingsSelfCheck.cs # --settingscheck 实现
│ ├── SystemIntegration/ # 系统集成
│ │ ├── MouseHookService.cs # 全局鼠标钩子
│ │ ├── KeyboardHookService.cs # 全局键盘钩子(悬空寺双击检测)
│ │ ├── WindowManagementService.cs # 窗口操作(含 DWM 可见外框查询)
│ │ └── AutoStartManager.cs # 开机自启
│ └── Resources/
│ ├── Fonts/ # 内嵌字体(Noto Sans SC Regular/Medium)
│ ├── XuanKongSi/ # 悬空寺键位图(4 套双拼方案)
│ ├── skull.xaml # 骷髅图形资源(Headshot 第 ③ 层)
│ ├── appIcon.ico # exe / 窗口图标(16~256,10 档)
│ └── trayIcon.ico # 托盘图标(16~48,5 档)
├── Tools/ # 开发期小工具(不随包分发)
│ ├── CpTest/ # 颜色选择器真值测试
│ ├── ConfigTester/ # 配置读写测试
│ ├── ShowSettings/ # 单独打开设置窗口
│ ├── MenuShot/ MenuProbe/ # 菜单截图与探针
│ ├── IconGen/ # 图标生成(已归档到 docs/archive/icon-source)
│ └── ExplorerFocus/ # 把资源管理器窗口拉到最前
├── job-build.ps1 / job-pack.ps1 # 作业脚本(构建/打包 + 打开目录)
├── build.ps1 / release.ps1 # 底层构建/打包脚本
├── open-artifact.ps1 # 打开产物目录的共用工具
├── build/ # 构建输出(带时间戳,保留历史)
├── release/ # 安装包输出
└── probe-out/ # 临时探针输出(可删)
设置窗口共 4 页(左侧纵向导航):菜单样式 / 操作配置 / 悬空寺 / 杂项设置。 「菜单样式」页的效果预览由
MenuPreviewWindow承担 —— 它贴在主窗口右侧界外, 紧贴可见边缘、不抢焦点。
| 文档 | 说明 |
|---|---|
| 产品需求文档 (PRD) | 功能定位、设置项与默认值、版本改动记录 |
| 技术设计文档 | 架构、核心模块、关键问题解决方案、构建部署 |
非项目必需的开发过程产物(旧文件备份、方案对比稿等)统一归档在 docs/archive/,
目录内附 README.md 说明每份文件的来源与归档原因。
- 设置窗口(菜单样式、操作配置、杂项设置)
- Loop 风格环形菜单(白色轮廓 + 蓝色高亮)
- 全局鼠标钩子(中键按下/释放检测)
- 窗口管理操作(13 种操作,V0.2 扩充至 16 种,2026-10 精简为 14 种,2026-10-21 新增「窗口居中」为 15 种)
- 系统托盘集成(双击/右键菜单)
- 开机自启动(注册表方式)
- 配置持久化(JSON 格式)
- 触发时长可配置(实时生效)
- 悬空寺(XuanKongSi)覆盖层(图片 / Markdown 文字)
- 自定义悬空寺触发键(左右 Alt / 左右 Shift / 左右 Ctrl)
- 目标窗口锁定:中键按下瞬间锁定窗口,菜单弹出后不再误操作其它窗口
- 性能优化:移除分屏时的 50ms 阻塞等待
- 多显示器 / 高 DPI 支持:Per-Monitor V2 DPI 感知 + 物理像素坐标统一
- 鼠标跟随优化:由 16ms 轮询改为钩子事件推送
- 菜单动画:弹出缩放淡入 / 收起淡出
- 更多窗口操作:关闭窗口(最大化还原切换 / 窗口置顶切换已于 2026-10 移除)
- 恢复 4 种菜单样式:圆环 / Headshot / 蜘蛛网 / 八卦
- 代码清理:移除约 500 行不可达代码
- 内嵌字体:打包 Noto Sans SC,界面渲染不依赖目标机器已装字体
- 颜色选择器:独立取色窗口,RGB / HSV / HSL / HEX 互转
- 设置窗口改版:固定尺寸 + PixPin 行流版式
- 色值框隐藏化:色值改由色块按钮直接显示
- 输入框统一等宽:宽度令牌收进统一样式,行内单位提示移除
- 悬空寺图片预览:宽度自适应、等比缩放,默认图也展示
- 运行时自检:
--fontcheck/--settingscheck - 程序图标 / 托盘图标:八角星主图 + 中蓝圆角底,多尺寸 ICO
- 默认样式改为 Headshot,设置页该项显示名由「八角星」改为
Headshot - 构建脚本内置缓存清理:不再需要手工删
bin/obj
- 手势识别
- 快捷键支持
- 主题系统
- 插件系统
