Skip to content
VarustekiPublic

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

WinLoop —— Headshot 菜单样式,右上扇区高亮

WinLoop

适用于 Windows 平台的快捷窗口管理工具 - 按住鼠标中键,快速管理窗口! (本项目代码完全用AI编写) Version .NET Platform

✨ 功能亮点

🎯 一键操作

只需按住鼠标中键,移动鼠标选择操作,松开即可完成窗口管理 - 无需记忆复杂的键盘快捷键!

🎨 4 种菜单样式

  • 圆环(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)
  • 支持开机自启动
  • 最小化到系统托盘

🏯 悬空寺(XuanKongSi)覆盖层

  • 双击触发键显示:支持三组触发键:左右 Alt / 左右 Shift / 左右 Ctrl
  • 按 ESC 收起:不会因为点击覆盖层而收起
  • 展示内容可配置:图片 / 文字(支持 Markdown)/ 网页(URL)
  • 图片预览:设置页可直接看到当前生效的图片,宽度跟随窗口自适应; 未选图时展示随包分发的默认键位图

🚀 快速开始

安装

  1. 下载最新安装包(release/WinLoop_V0.2-YYYYMMDDHHMM.exe)
  2. 安装并运行 WinLoop
  3. 程序将在系统托盘运行

(可选)如果你需要免安装版本,可使用 build/V0.2-YYYYMMDDHHMM/ 目录下的发布产物。

时间戳精度为分钟(yyyyMMddHHmm)——同一分钟内重复构建会复用同一目录。

基本使用

  1. 显示菜单:按住鼠标中键约 0.2 秒
  2. 选择操作:移动鼠标到目标方向(扇区会高亮为蓝色)。 高亮只看方向、不看距离——指针移出菜单图形之外(甚至屏幕另一角)也照样保持高亮; 只有指针正好落在圆心、方向无定义时才不高亮
  3. 执行操作:松开中键完成操作

打开设置

  • 双击系统托盘图标
  • 或右键托盘图标 → 选择"设置"

🎯 默认操作布局

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 说明每份文件的来源与归档原因。

🗺️ 开发路线图

✅ V0.1

  • 设置窗口(菜单样式、操作配置、杂项设置)
  • Loop 风格环形菜单(白色轮廓 + 蓝色高亮)
  • 全局鼠标钩子(中键按下/释放检测)
  • 窗口管理操作(13 种操作,V0.2 扩充至 16 种,2026-10 精简为 14 种,2026-10-21 新增「窗口居中」为 15 种)
  • 系统托盘集成(双击/右键菜单)
  • 开机自启动(注册表方式)
  • 配置持久化(JSON 格式)
  • 触发时长可配置(实时生效)
  • 悬空寺(XuanKongSi)覆盖层(图片 / Markdown 文字)
  • 自定义悬空寺触发键(左右 Alt / 左右 Shift / 左右 Ctrl)

✅ V0.2 (当前版本)

  • 目标窗口锁定:中键按下瞬间锁定窗口,菜单弹出后不再误操作其它窗口
  • 性能优化:移除分屏时的 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

🔮 V0.3+ (未来)

  • 手势识别
  • 快捷键支持
  • 主题系统
  • 插件系统

🙏 致谢

参考项目

  • Loop - 功能设计和交互灵感来源
  • WGestures - Windows 平台鼠标钩子技术参考

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages