{"id":44330090,"url":"https://github.com/humanfirework/flowwheel","last_synced_at":"2026-05-03T18:05:25.565Z","repository":{"id":337671778,"uuid":"1154678906","full_name":"humanfirework/FlowWheel","owner":"humanfirework","description":"Global Smooth Auto-Scrolling for Windows Windows 全局平滑自动滚屏工具（支持多屏协同滚动）","archived":false,"fork":false,"pushed_at":"2026-03-25T13:58:30.000Z","size":34535,"stargazers_count":38,"open_issues_count":1,"forks_count":3,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-26T16:38:49.661Z","etag":null,"topics":["beginner-friendly","csharp","windows","wpf"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/humanfirework.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-10T16:55:32.000Z","updated_at":"2026-03-26T10:04:04.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/humanfirework/FlowWheel","commit_stats":null,"previous_names":["humanfirework/flowwheel"],"tags_count":23,"template":false,"template_full_name":null,"purl":"pkg:github/humanfirework/FlowWheel","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/humanfirework%2FFlowWheel","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/humanfirework%2FFlowWheel/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/humanfirework%2FFlowWheel/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/humanfirework%2FFlowWheel/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/humanfirework","download_url":"https://codeload.github.com/humanfirework/FlowWheel/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/humanfirework%2FFlowWheel/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31313852,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-02T12:59:32.332Z","status":"ssl_error","status_checked_at":"2026-04-02T12:54:48.875Z","response_time":89,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["beginner-friendly","csharp","windows","wpf"],"created_at":"2026-02-11T09:09:32.236Z","updated_at":"2026-05-03T18:05:25.552Z","avatar_url":"https://github.com/humanfirework.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# FlowWheel\n\n\u003cdiv align=\"center\"\u003e\n\n \u003cimg src=\"https://github.com/humanfirework/FlowWheel/raw/main/Assets_for_GitHub_Readme/1.gif\" width=\"30%\" alt=\"Demo 1\" /\u003e\n \u003cimg src=\"https://github.com/humanfirework/FlowWheel/raw/main/Assets_for_GitHub_Readme/2.gif\" width=\"30%\" alt=\"Demo 2\" /\u003e\n \u003cimg src=\"https://github.com/humanfirework/FlowWheel/raw/main/Assets_for_GitHub_Readme/3.gif\" width=\"30%\" alt=\"Demo 3\" /\u003e\n\n \u003cbr\u003e\n\n [![License](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)\n [![Build Status](https://github.com/humanfirework/FlowWheel/actions/workflows/build.yml/badge.svg)](https://github.com/humanfirework/FlowWheel/actions)\n[![Version](https://img.shields.io/badge/version-1.7.5-green.svg)](https://github.com/humanfirework/FlowWheel/releases)\n\n中文 | [English](./README.en.md)\n\n\u003c/div\u003e\n\n---\n\n## 简介\n\n**FlowWheel** 是一款强大的 Windows 全局自动滚动工具，它将浏览器式的流畅滚屏体验带到了系统的每一个角落。与传统滚轮不同，FlowWheel 允许你通过鼠标拖拽来滚动任意内容，并配备基于物理的惯性滚动和先进的生产力功能。\n\n### 它能解决什么问题？\n\n想象一下阅读长篇文章、浏览代码文件或审阅文档时，无需不断移动滚轮的便利。FlowWheel 将你的鼠标变成了强大的导航工具：\n\n- **解放双手阅读**：激活自动滚屏，让内容自动流动\n- **精准控制**：自然地拖拽滚动，释放时带惯性滑行\n- **多窗口工作流**：滚动一个窗口时，保持另一个窗口的位置\n\n### 为什么选择 FlowWheel？\n\n| 功能 | 传统滚轮 | FlowWheel |\n|------|---------|-----------|\n| 滚动速度 | 恒定，需要转动滚轮 | 基于距离，直观控制 |\n| 长文档阅读 | 滚轮转动导致手臂疲劳 | 解放双手的阅读模式 |\n| 多窗口同步 | 手动滚动 | 自动同步滚动 |\n| 物理手感 | 无 | 惯性、抓取与抛掷 |\n| 自定义程度 | 有限 | 完全可定制曲线 |\n\n### v1.7.5 更新\n\n- **修复鼠标中键原生功能冲突**：采用「放行优先」策略，延时启动时中键按下不再拦截系统消息，快速点击中键可正常使用浏览器标签关闭、新标签页打开等原生功能；长按超过延时阈值后 FlowWheel 才接管\n- **启动延时、关闭即时**：中键按下后经过延时才激活 FlowWheel，但一旦激活后再次单击中键立即停止，无需额外等待\n- **快捷键冲突检测**：增强热键冲突检测，支持双向比较和鼠标键名匹配\n\n\n---\n\n## 核心功能\n\n### 基础滚动\n\n- **全局自动滚屏**：支持资源管理器、Word、IDE、Discord、浏览器、PDF 阅读器——几乎所有 Windows 应用\n- **距离速度控制**：从锚点拖拽越远，滚动越快——自然且直观\n- **惯性物理**：在移动时释放鼠标，让内容\"抛掷\"滑行\n- **防误触死区**：防止手部轻微颤抖导致的意外滚动\n\n### 高级模式\n\n- **阅读模式（提词器）**：**双击**鼠标中键或使用独立快捷键，激活解放双手的连续滚动\n  - 实时用滚轮调整速度\n  - 点击任意按钮立即停止\n- **多屏同步滚动**：在主屏滚动文档时，副屏的参考文档会同步跟随——非常适合代码比对、翻译对照\n- **轴锁定**：更喜欢垂直或水平滚动？启用轴锁定防止意外的方向变化\n\n### 自定义选项\n\n- **触发按键**：配置激活自动滚动的鼠标按钮或键盘快捷键\n  - 中键、XButton1、XButton2\n  - 键盘组合：Ctrl+Alt+F1、Shift+中键 等\n- **自定义热键**：设置全局快捷键（如 Ctrl+Alt+S）随时切换滚动\n- **阅读模式快捷键**：独立的快捷键激活阅读模式\n- **加速度曲线**：5 种预设曲线类型 + 完全可自定义曲线\n  - 线性：匀速增加\n  - 指数：快速起步，渐变减速\n  - 对数：慢速起步，快速加速\n  - S形：带拐点的 S 曲线\n  - 自定义：用控制点绘制你自己的曲线\n- **突破速度限制**：移除速度上限，支持极高滚动速度\n- **延时启动**：中键短按延迟触发，防止误操作\n- **应用配置**：为不同应用配置不同的滚动行为\n\n### 智能特性\n\n- **智能透明度**：快速滚动或鼠标靠近时，锚点图标自动淡出\n- **黑名单/白名单**：在游戏或全屏应用中禁用自动滚动，或仅在特定应用中启用\n- **应用检测**：当 FlowWheel 自身窗口激活时自动暂停\n- **DPI 感知**：完美适配高 DPI 显示器\n\n### 视觉反馈\n\n- **方向指示器**：清晰的箭头显示滚动方向\n- **空闲动画**：微妙的旋转轮盘显示就绪状态\n- **阅读模式指示器**：显示当前阅读速度和模式状态\n- **突破速度标识**：突破模式激活时显示脉冲动画\n- **自定义图标**：使用你自己的锚点图标或从预设中选择\n- **主题支持**：明暗主题切换，流畅过渡动画\n\n---\n\n## 架构设计\n\nFlowWheel 基于 .NET 10 和 WPF 构建，采用清晰、模块化的架构：\n\n```\n┌─────────────────────────────────────────────────────────────┐\n│                        UI 层                                │\n│  ┌──────────────┐  ┌─────────────────┐  ┌────────────────┐  │\n│  │ OverlayWindow│  │  SettingsWindow │  │ SplashWindow   │  │\n│  └──────────────┘  └─────────────────┘  └────────────────┘  │\n└─────────────────────────────────────────────────────────────┘\n                              │\n┌─────────────────────────────────────────────────────────────┐\n│                       核心引擎                               │\n│  ┌──────────────────┐  ┌───────────────┐  ┌──────────────┐  │\n│  │ AutoScrollManager│  │ ScrollEngine  │  │ WindowManager│  │\n│  └──────────────────┘  └───────────────┘  └──────────────┘  │\n│  ┌──────────────────┐  ┌───────────────┐  ┌──────────────┐  │\n│  │ SyncScrollManager│  │Acceleration-  │  │ ConfigManager│  │\n│  │                  │  │ Curve         │  │              │  │\n│  └──────────────────┘  └───────────────┘  └──────────────┘  │\n└─────────────────────────────────────────────────────────────┘\n                              │\n┌─────────────────────────────────────────────────────────────┐\n│                     平台集成层                                │\n│  ┌──────────────────┐  ┌───────────────┐  ┌──────────────┐  │\n│  │    MouseHook     │  │ KeyboardHook  │  │ NativeMethods│  │\n│  │  (User32 Hook)   │  │ (User32 Hook) │  │ (SendInput)  │  │\n│  └──────────────────┘  └───────────────┘  └──────────────┘  │\n└─────────────────────────────────────────────────────────────┘\n```\n\n### 核心组件\n\n1. **输入捕获（全局钩子）**\n   - `MouseHook`：低级 Windows 鼠标钩子，拦截点击、移动和滚轮事件\n   - `KeyboardHook`：全局键盘钩子，用于热键支持\n   - `NativeMethods`：User32 函数的 P/Invoke 包装（SendInput、SetWindowsHookEx）\n\n2. **交互编排**\n   - `AutoScrollManager`：状态机，管理触发模式（切换/按住）、双击检测和事件路由\n   - `WindowManager`：带缓存的进程检测、黑名单/白名单评估和按应用配置查询\n\n3. **运动与物理**\n   - `ScrollEngine`：核心滚动逻辑，包含：\n     - 滚动状态机（空闲 → 拖拽 → 惯性滚动 → 空闲）\n     - 基于距离和加速度曲线的速度计算\n     - 低通滤波实现平滑速度过渡\n     - 指数摩擦衰减的惯性模拟\n   - `AccelerationCurve`：支持线性、指数、对数、S形和自定义曲线类型的插值引擎\n   - `SyncScrollManager`：通过 FindWindow 和 SendMessage 实现多窗口同步滚动\n\n4. **UI 与反馈**\n   - `OverlayWindow`：透明、可穿透的悬浮窗，显示：\n     - 锚点位置和图标\n     - 方向箭头\n     - 阅读模式指示器和实时速度\n     - 基于速度/距离的智能透明度\n     - 突破速度模式标识\n   - `SettingsWindow`：配置界面，包含常规、曲线、热键、应用、关于等标签页\n\n5. **配置与平台**\n   - `ConfigManager`：基于 JSON 的持久化配置（config.json）\n   - `ThemeManager`：通过 WPF 资源字典切换实现主题切换\n   - `LanguageManager`：基于 XAML 的本地化（en-US、zh-CN）\n   - `UpdateManager`：GitHub API 集成检查版本更新并显示更新日志\n\n### 技术亮点\n\n- **性能优化**：30fps 悬浮窗渲染、事件过滤减少开销、PID 缓存\n- **DPI 感知**：通过 VisualTreeHelper 实现高 DPI 显示器的正确缩放\n- **事件注入**：通过 SendInput 发送带特殊签名的滚动事件，防止重复捕获\n- **线程安全**：正确使用锁或 Dispatcher 进行跨线程 UI 更新\n- **优雅退出**：IDisposable 模式，正确清理钩子和定时器\n\n---\n\n## 安装说明\n\n### 系统要求\n\n- **操作系统**：Windows 10/11（64 位）\n- **运行时**：.NET 10.0（包含在自包含版本中）\n- **显示器**：任意分辨率（支持 DPI 感知）\n\n### 快速安装\n\n#### 方法 1：Scoop（推荐）\n\n```powershell\n# 直接从 GitHub 安装\nscoop install https://github.com/humanfirework/FlowWheel/raw/main/flowwheel.json\n\n# 更新到最新版本\nscoop update flowwheel\n```\n\n#### 方法 2：直接下载\n\n1. 访问 [Releases](https://github.com/humanfirework/FlowWheel/releases) 页面\n2. 下载最新的 `FlowWheel.exe`\n3. 运行即可——无需安装\n\n\u003e **注意**：设置中的内置更新检查器在不使用 VPN 时效果最佳。如果遇到 API 错误，请尝试手动下载。\n\n---\n\n## 使用指南\n\n### 快速入门\n\n1. **启动 FlowWheel**——它将在系统托盘运行\n2. **找到系统托盘中的轮盘图标**（右下角）\n3. **点击并拖动**任意位置即可滚动！\n\n### 触发模式\n\nFlowWheel 支持两种触发模式，可在设置中配置：\n\n| 模式 | 激活方式 | 行为 |\n|------|---------|------|\n| **切换** | 单击中键 | 点击开始，再点停止（或释放触发惯性） |\n| **按住拖拽** | 按住中键 | 拖拽滚动，释放抛掷带惯性 |\n\n### 阅读模式（提词器）\n\n**激活**：双击鼠标中键，或使用独立快捷键（如已配置 Ctrl+Alt+R）\n\n- 内容以稳定速度自动滚动\n- 使用**鼠标滚轮**实时调整滚动速度，锚点旁实时显示当前速度\n- 按**任意鼠标按钮**或 **Escape 键**停止\n- 非常适合阅读长文档、追踪直播或演示\n\n### 延时启动\n\n启用延时启动后，中键按下后会延迟一段时间再触发滚动功能，有效减少与中键单击（如在浏览器中打开新标签页）的冲突。可在设置中调节延迟时间。\n\n### 同步滚动\n\n1. 打开设置 → 启用\"同步滚动\"\n2. 打开两个文档并排显示（或在多显示器上）\n3. 在其中一个窗口滚动——另一个会自动跟随\n\n### 自定义加速度曲线\n\n1. 打开设置 → 曲线标签页\n2. 选择预设曲线或点击\"编辑自定义\"\n3. 拖动控制点塑造你理想的滚动手感\n4. 实时预览效果\n\n### 应用过滤\n\n**黑名单模式**（默认）：列表中的应用禁用自动滚动\n**白名单模式**：仅在列表中的应用启用自动滚动\n\n添加应用方法：\n- 直接将 `.exe` 文件拖放到列表中\n- 或点击\"添加\"并浏览到应用程序\n\n---\n\n## 配置参考\n\n### config.json\n\n位于 `%APPDATA%\\FlowWheel\\config.json`\n\n```json\n{\n  \"TriggerMode\": \"Toggle\",\n  \"TriggerKey\": \"MiddleMouse\",\n  \"ToggleHotkey\": \"\",\n  \"Sensitivity\": 0.8,\n  \"Deadzone\": 20,\n  \"AccelerationCurve\": \"Linear\",\n  \"IsWhitelistMode\": false,\n  \"AppProfiles\": [],\n  \"Theme\": \"Dark\",\n  \"Language\": \"en-US\",\n  \"IconSize\": 48\n}\n```\n\n### 关键参数\n\n| 参数 | 类型 | 默认值 | 说明 |\n|------|------|--------|------|\n| `TriggerMode` | string | \"Toggle\" | \"Toggle\" 或 \"Hold\" |\n| `TriggerKey` | string | \"MiddleMouse\" | 触发鼠标/按键组合 |\n| `ToggleHotkey` | string | \"\" | 全局热键（如 \"Ctrl+Alt+S\"） |\n| `ReadingModeHotkey` | string | \"Ctrl+Alt+R\" | 阅读模式独立快捷键 |\n| `MiddleClickDelay` | int | 0 | 延时启动延迟（毫秒），0=关闭 |\n| `BreakSpeedLimit` | bool | false | 是否启用突破速度限制 |\n| `BreakSpeedLimitMax` | double | 2000 | 突破模式下的最大速度 |\n| `Sensitivity` | float | 0.8 | 基础滚动速度倍率（0.1-3.0） |\n| `Deadzone` | int | 20 | 开始滚动前的像素数 |\n| `AccelerationCurve` | enum | \"Linear\" | 速度曲线的类型 |\n| `IsWhitelistMode` | bool | false | true=白名单，false=黑名单 |\n\n---\n\n## 常见问题\n\n### FlowWheel 不响应点击\n\n- 检查 FlowWheel 是否正在运行（查看托盘图标）\n- 尝试右键点击托盘图标并选择\"设置\"\n- 确认目标应用不在黑名单/白名单中\n\n### 滚动速度感觉不对\n\n- 调整设置中的灵敏度滑块\n- 尝试不同的加速度曲线\n- 修改死区以获得更多/更少的启动阻力\n- 启用\"突破速度限制\"以获得更高上限\n\n### 自动滚动意外停止\n\n- 某些应用（游戏、视频播放器）可能阻止全局钩子\n- 将有问题的应用添加到黑名单\n\n### 悬浮窗不显示\n\n- 检查 Windows 通知设置\n- 确保杀毒软件没有阻止 FlowWheel\n\n---\n\n## 贡献指南\n\n欢迎贡献！请在提交 PR 前阅读我们的指南。\n\n### 开发环境设置\n\n```powershell\n# 克隆仓库\ngit clone https://github.com/humanfirework/FlowWheel.git\ncd FlowWheel\n\n# 以开发模式运行（Debug 配置编译更快）\ndotnet run --configuration Debug\n```\n\n### 代码规范\n\n1. **风格**：遵循标准 C# 约定（Microsoft 的 .NET 指南）\n2. **命名**：使用描述性名称——避免缩写，除非是普遍理解的\n3. **文档**：为公共 API 添加 XML 注释\n4. **线程处理**：跨线程操作必须使用锁或 Dispatcher\n\n### Pull Request 流程\n\n1. **Fork** 仓库\n2. **创建功能分支**：`git checkout -b feature/my-feature`\n3. **进行更改**，提交信息清晰描述\n4. **彻底测试**——确认现有功能仍然正常\n5. **提交 PR**，清晰描述更改内容\n6. **及时回复**审阅反馈\n\n### 提交信息格式\n\n```\n\u003c类型\u003e(\u003c范围\u003e): \u003c描述\u003e\n\n[可选正文]\n\n[可选页脚]\n```\n\n**类型**：`feat`、`fix`、`docs`、`style`、`refactor`、`test`、`chore`\n\n**示例**：\n```\nfeat(curves): 添加自定义曲线编辑器\nfix(scroll): 修复高 DPI 显示器的速度计算\ndocs(readme): 更新安装说明\n```\n\n---\n\n## 隐私保护\n\nFlowWheel 从设计之初就注重隐私：\n\n- **无遥测**：不向任何服务器发送数据\n- **本地存储**：所有设置存储在本地\n- **最小权限**：仅在需要时请求输入钩子和管理员权限\n- **开源透明**：完整源代码可供审查\n\n---\n\n## 开源许可\n\n本项目采用 [MIT License](LICENSE) 开源。\n\n## 支持项目\n\n如果 FlowWheel 对你有帮助，欢迎请我喝杯咖啡！☕\n\n\u003cdiv align=\"center\"\u003e\n \u003ctable\u003e\n   \u003ctr\u003e\n     \u003ctd align=\"center\"\u003e\n       \u003cimg src=\"https://github.com/humanfirework/FlowWheel/raw/main/Assets/alipay_qr.jpg\" alt=\"Alipay\" width=\"180\" style=\"max-width: 100%; height: auto;\" /\u003e\n       \u003cbr\u003e\n       \u003cspan\u003e支付宝\u003c/span\u003e\n     \u003c/td\u003e\n     \u003ctd align=\"center\" width=\"40\"\u003e\u003c/td\u003e\n     \u003ctd align=\"center\"\u003e\n       \u003cimg src=\"https://github.com/humanfirework/FlowWheel/raw/main/Assets/weixin.jpg\" alt=\"WeChat Pay\" width=\"180\" style=\"max-width: 100%; height: auto;\" /\u003e\n       \u003cbr\u003e\n       \u003cspan\u003e微信支付\u003c/span\u003e\n     \u003c/td\u003e\n   \u003c/tr\u003e\n \u003c/table\u003e\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhumanfirework%2Fflowwheel","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhumanfirework%2Fflowwheel","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhumanfirework%2Fflowwheel/lists"}