GlideShell
简体中文 · English
让 Windows 触摸板手势真正跟手:手指走多少,画面走多少;停住就停住,反向就倒退,松手才决定去留。
官网与使用教程:https://liamzhaofor.github.io/GlideShell/ · 下载最新版
Windows 原生的多指手势大多是「识别到手势 → 播放一段固定动画」。GlideShell 直接读取精确式触摸板(PTP)的原始触点,用自己的合成界面重做多任务交互,体验对标 macOS 调度中心:
- 三指上滑 · 窗口总览:每个窗口从原位飞向总览布局,进度完全由手指位移驱动。停住,画面就停在半路;往回滑,画面就倒退。
- 三指下滑 · 应用窗口视图:只把当前程序的窗口平铺出来,最小化的单独排在底部一排,其他窗口原地淡出;同样全程跟手,向上滑收起(macOS App Exposé)。总览里点某个窗口下面的标题,就直接换成那个程序的视图,再点一次回到总览。
- 四指下滑 · 显示桌面:窗口跟着手指滑出屏幕边缘,露出桌面;再四指上滑把它们拉回来。桌面没显示时四指上滑打开总览(同 macOS)。
- 总览桌面条:总览顶部列出所有虚拟桌面;指针移上去就展开成实时缩略图,点另一个桌面会立刻切过去,并从缩略图放大进入那个桌面。末尾的「+」新建桌面,名字旁的「×」删除桌面。把窗口拖到某个桌面上就移过去,拖到「+」上就新建桌面并移过去。
- 总览里四指横滑:不退出总览,窗口区域跟手横向滑到相邻桌面那一页,各桌面的窗口都已排好。
- 三指横滑 · 切换窗口:窗口条随手指平移,松手吸附到最近的窗口并切到前台。Alt+Tab 也换成同一个切换条。
- 四指横滑 · 切换虚拟桌面:相邻桌面跟着手指滑入,没有起滑死区。到首尾桌面时有橡皮筋,切换结束时没有闪烁,窗口阴影也与系统一致。
- macOS 式物理:松手时按距离和速度决定完成还是取消,松手速度直接传给弹簧动画。动画随时可以被新手势接住。
- 圆角卡片:窗口飞进总览的途中,圆角从窗口自己的过渡成 macOS 那样的圆角(最大化的窗口也是),并像 macOS 调度中心一样随窗口缩小按比例缩小;切换条一致,半径可调。
- 合成层里的文字与装饰:窗口下方是程序图标加标题,悬停框、关闭按钮、桌面条的桌面名都跟着画面逐帧移动、淡入淡出,翻页、补位、拖动时也不会消失再冒出来。三指切换条与总览用同一套样式。
- 与系统一致的细节:总览与切桌面的缩略图都带有按真机校准的窗口阴影(125% / 150% / 175% 实测一致),撤掉覆盖层的那一刻画面与真实桌面无缝衔接。
- 多显示器:每块屏各自排布;横跨两块屏的窗口在两块屏上都会画出来,展开或收起时不会缺一块。
- 鼠标也能跟手:按住鼠标侧键(后退键,可改成前进键或中键)拖动——左右切换桌面、上拉总览、下拉应用窗口视图,和触摸板一样跟手(Mac Mouse Fix 的做法);只点一下仍是后退。
- 入口齐全:Ctrl+Win+←/→ 也走跟手的切桌面动画;屏幕四个角可以设成触发角(总览、应用窗口、显示桌面)。
- 可定制:手势映射、灵敏度、排除程序、三指拖移、总览按程序分组。界面有简体中文和英文,跟随系统语言,也可以在设置首页切换。三指轻点 = 鼠标中键(GlideShell 自己识别;开着时系统的三指轻点暂停,不会点两次,也可以关掉交还系统)。
- 轻量、可退回:
- 不装驱动,约 5.6MB 的原生程序;常驻私有内存刚启动约 16MB,用过总览和设置后约 20–30MB。
- 退出、暂停或崩溃时,自动把系统手势还原成你原来的设置。
系统要求
- Windows 11(在 24H2 / 26300 上开发与验证)
- 精确式触摸板(设置 → 蓝牙和其他设备 → 触摸板里显示「你的电脑具有精确式触摸板」)
安装
从 Releases 下载 GlideShell-2.1.0-win-x64.zip,解压后双击 Install.cmd。
- 程序装到
%LOCALAPPDATA%\Programs\GlideShell,并添加开始菜单与开机启动,不需要管理员权限。
- 卸载:双击 Uninstall.cmd。它会先退出程序、确认系统手势已还原,再删除程序。配置与日志会保留;要连同它们一起删除,运行
uninstall.ps1 -Purge。
- 程序没有正式签名,第一次运行时 Windows 可能提示「无法验证发布者」。
升级:有新版本时托盘会提示,点「升级」就自动下载、核对 SHA-256、安装并重新启动,设置会保留(也可以 GlideShell.exe --upgrade)。手动重装也行:运行中的 GlideShell 会先正常退出,再被替换。
使用
运行后常驻在任务栏通知区域。GlideShell 只接管它实现了的那几个系统手势,其余手势照旧由 Windows 处理。
| 手势 | 默认 | 开启「三指拖移」后 |
|---|
| 三指上 / 下滑 | 上滑总览、下滑应用窗口视图(跟手展开,反向收起) | 拖移 |
| 三指左 / 右滑 | 切换窗口 | 拖移 |
| 四指上 / 下滑 | 下滑显示桌面;上滑拉回窗口(桌面没显示时打开总览) | 总览 |
| 四指左 / 右滑 | 切换虚拟桌面 | 切换虚拟桌面 |
| 三指轻点 | 鼠标中键 | 鼠标中键 |
总览里
- 点击窗口,或三指下滑 / Enter,切到选中的窗口;Esc 收起。
- 收起时三指下滑打开应用窗口视图:只平铺当前程序的窗口(最小化的排在底部一排),其他窗口淡出;三指上滑收起,点窗口切过去。这个视图里没有桌面条。
- 点窗口下面的标题行(程序图标 + 标题):总览里换成这个程序的应用窗口视图,应用窗口视图里换回总览,都不收起。
- 有两个以上虚拟桌面时,顶部是桌面条:指针移上去展开成缩略图,点另一个桌面就切过去;点当前桌面等于收起。
- 总览里四指左右滑:留在总览里,窗口区域跟着手指横向滑到相邻桌面那一页(macOS 调度中心的做法);松手过半就切过去,不够就弹回。翻页后再收起,窗口飞回新桌面的真实位置。
- 桌面条末尾的「+」新建一个桌面(加在最后,不切过去);鼠标停在某个桌面上时,名字右边出现「×」,点它删除这个桌面,上面的窗口并入左边的桌面。删的是当前桌面时,总览放大进入并入的那个桌面后收起。
- 鼠标停在窗口上时,左上角出现关闭按钮;点它关闭窗口,其余窗口补位。程序弹出「是否保存」之类的对话框时,总览收起并切到它。
- 按住窗口拖动:窗口跟着指针走,拖到顶部时桌面条展开、窗口缩小。放在别的桌面上,窗口就移到那个桌面(飞进它的缩略图,其余窗口补位);放在「+」上会新建桌面并移过去;放在别处就飞回原位。
- 三指左右滑、方向键或 Tab(Shift+Tab 反向)移动选中项。
- Ctrl+Alt+O 也能打开总览。
- 总览开着时点任务栏(托盘、开始菜单、任务栏按钮),总览会自动收起,让弹出的东西露出来。
其他入口
- 鼠标按键手势:按住后退键拖动(设置里可改成前进键、中键或关掉)——左右切换桌面(总览开着时翻页,桌面跟着指针走),上拉总览,下拉应用窗口视图 / 收起总览。只点一下照常后退。
- Alt+Tab:用 GlideShell 的切换条代替系统的。按住 Alt,每按一次 Tab 选下一个窗口(Shift+Tab 上一个,←/→ 也行),松开 Alt 时选中的窗口飞回原位并切到前台;Esc 取消。快速按一下直接切到上一个窗口,不出现切换条。按住 Alt 时鼠标悬停选中、点卡片切过去、点空白处取消;Delete 关闭选中的窗口。暂停、排除的程序在前台、全屏暂停时交给系统。设置里可以关掉。
- Ctrl+Win+←/→:用 GlideShell 的切桌面动画切到相邻桌面(连按会接着切);总览展开时改为在总览里翻页。设置里可以关掉,交还系统。
- 触发角:在设置里给屏幕四个角各指定一个动作(窗口总览、应用窗口、显示桌面),指针停在角上约 0.1 秒触发。默认都不开。
托盘菜单
- 打开总览;暂停(立即退回 Windows 原生手势);设置…
- 三指拖移、四指切桌面开关;灵敏度高 / 标准 / 低。
- 不使用手势的程序;全屏时暂停手势;开机启动;打开日志目录。
设置窗口(托盘菜单「设置…」,或再次启动 GlideShell)
- Windows 11「设置」的样子:Mica 背景、左侧导航、圆角卡片,跟随系统浅色 / 深色与强调色;改动立即生效,不用保存。
- 首页:现在每个手势做什么的示意图,开机启动、全屏时暂停。
- 触摸板手势:每个手势交给谁、三指拖移、三指轻点中键、灵敏度(高 / 标准 / 低,「细调」里分别调各手势的行程与拖移速度)。
- 总览与桌面:应用窗口视图、按程序分组、背景变暗、窗口圆角、Alt+Tab、Ctrl+Win+←/→。
- 鼠标与触发角:按住拖动的键与灵敏度;在屏幕示意图的四个角上设置触发角。
- 排除的程序、关于(自动检查更新、配置文件、日志、恢复默认)。键盘也能操作:Tab 移动、空格 / 回车操作、←/→ 调滑块。
进阶
- 配置文件:
%APPDATA%\GlideShell\config.json(可带注释,保存即生效)。弹簧参数等不常用的选项也在这里,逐项说明见 docs/CONFIG.md。
- 日志:
%LOCALAPPDATA%\GlideShell\logs\glideshell.log。
- 升级检测与一键升级:默认每天向 GitHub 查一次最新的正式版本(只查版本号,不发送其他数据),有新版本时托盘通知一次。点通知、托盘菜单「升级到 x.y.z…」或设置「关于」里的「升级」,就从 GitHub 下载发布包、核对大小与 SHA-256(GitHub 给出的摘要)、运行包里的安装脚本装回原处并重新启动;不会自己偷偷升级。从源码装在 Program Files 的 UIAccess 版不走一键升级(发布包是普通权限版)。设置「关于」里可以关掉自动检查(关掉后完全不联网)或手动检查。
- 诊断:设置「诊断」页逐项列出兼容自检(触摸板与报告模式、系统手势接管是否生效、虚拟桌面接口、共享缩略图、UIAccess、键盘 / 鼠标钩子、最近一次渲染的晚到帧、升级检测)。「生成诊断报告」把版本、系统、显示器、自检结果、配置与最近 300 行日志写成一个文本文件、复制到剪贴板并用记事本打开,只在本机,方便贴到 Issue;托盘菜单或
GlideShell.exe --diagnostics 也能生成。异常退出后下次启动会提示一次。
- 紧急还原:万一系统手势没有恢复,运行
GlideShell.exe --restore-native。GlideShell.exe --quit 可以让运行中的实例正常退出。
性能(本机实测)
测试机:Radeon 780M、2560×1600、150% 缩放、165Hz;外接 2560×1440、125%、200Hz。
| 项目 | 数值 |
|---|
| 程序大小 | 约 5.6MB(NativeAOT) |
| 常驻内存 | 私有内存刚启动约 16MB,用过总览和设置后约 20–30MB(Direct2D / DirectWrite 与程序图标缓存) |
| 总览 / 切桌面 / 切换窗口帧间隔 | P50 6.1ms / P95 6.2ms(跟满 165Hz) |
| 晚到帧(少取样一帧) | 0 / 7387 帧(200Hz,四种模拟手势各 5 次;60Hz、60Hz + 200Hz 双屏混合也是 0,见 ROADMAP 9.2) |
| 输入到上屏 | 约 1 帧(按合成器时钟晚取样) |
| 再次打开总览的预热 | 约 3–6ms |
工作原理
输入线程 Raw Input 读 PTP 原始触点(零分配解析,坐标换算成毫米,时间用硬件 ScanTime)
↓
纯逻辑 手势识别(只有抬指才决定)→ 手势映射与排除 → 总览 / 切换窗口 / 切桌面控制器 → 物理(速度、落点、弹簧)
↓
渲染线程 按显示器刷新取样,驱动 DirectComposition + DWM 实时缩略图
- 覆盖层只显示画面,不抢焦点。真正切换前台窗口或虚拟桌面,都在覆盖层下面完成,结束时撤掉覆盖层,画面无缝衔接。
- 接管系统手势时写注册表,并通知 Explorer 刷新设置缓存。接管前先落盘一份记录,看门狗进程在主进程意外退出时按这份记录还原。
- 用到两个未公开接口:虚拟桌面 COM 和共享缩略图(dwmapi#147)。启动时都会自检,不通过就自动退回:把四指手势交还系统,或改用普通缩略图。
设计、各阶段的实测结论和后续路线见 docs/ROADMAP.md。
已知限制
- 只在一台机器上完整验证过(ASUS 精确式触摸板,并行报告模式)。混合报告模式(每份报文只带部分手指,其他品牌常见)只有单元测试。在别的触摸板上遇到问题,请附上「设置 → 诊断」生成的诊断报告。
- 多显示器:用真手势在 150% + 125%(165Hz + 200Hz)双屏上验证过;更多显示器组合还没测。
- 窗口阴影在 125% / 150% / 175% 下实测与系统一致,100% 还没实测。
- 发布包是普通权限版。覆盖层盖不住开始菜单等系统界面;需要的话可以从源码构建 UIAccess 版(见下文)。
- 在桌面条上删除当前桌面、或打开总览时所在的桌面后,总览会收起(不在总览里重排)。
- 显示桌面是真的把窗口最小化;被拉回的窗口按最小化前的位置还原。以管理员身份运行的程序,普通权限版最小化不了它。
- 普通权限版在以管理员身份运行的程序在前台时收不到按键(Alt+Tab 交给 Windows),发出的中键、拖移也到不了它。
- 鼠标按键手势开着时,移动鼠标会占一点 CPU:低级鼠标钩子让 Windows 每个鼠标事件都切到 GlideShell 一次,和回报率成正比(1000Hz 约一个核心的 1%,8000Hz 约 8%)。不用就在设置里选「不使用」。
- 应用窗口视图按程序归类(商店应用按应用标识区分):同一个程序的窗口都算在一起。
- 切换桌面时 Windows 自己会在屏幕底部弹出桌面名提示,它是资源管理器在已有界面里画的,压不掉。
- 还不支持 Windows 10。
从源码构建
需要 .NET 10 SDK。
dotnet build GlideShell.slnx
dotnet test GlideShell.slnx
pwsh build\publish.ps1 # 自包含单文件 → artifacts\publish\win-x64\GlideShell.exe
pwsh build\publish.ps1 -Aot # NativeAOT(需要 Visual Studio「使用 C++ 的桌面开发」)
pwsh build\package.ps1 -Aot # 发布包 → artifacts\GlideShell-<版本>-win-x64.zip
pwsh build\install.ps1 # 安装到本机(没有发布产物时会先发布)
UIAccess 版:覆盖层能盖住开始菜单等系统界面,切换前台也更可靠。它使用本机自签名证书,只对这台电脑有效。
pwsh build\publish.ps1 -Aot -UIAccess # 首次会弹 UAC,信任本机证书
pwsh build\install.ps1 -UIAccess # 装到 %ProgramFiles%\GlideShell;只有复制这一步需要管理员权限
不碰触摸板,用合成手势演示:
dotnet run --project src\GlideShell -- --simulate overview # 还有 switch / desktop-right / desktop-left 等
诊断工具 tools/PtpProbe
dotnet run --project tools\PtpProbe # 触摸板报告描述符(触点槽数、物理尺寸等)
dotnet run --project tools\PtpProbe -- live # 实时打印手势识别结果
dotnet run --project tools\PtpProbe -- record # 按场景录制输入轨迹
dotnet run --project tools\PtpProbe -- calibrate <轨迹目录> # 由轨迹给出识别参数建议并回放验证
dotnet run --project tools\PtpProbe -- windows # 总览会收录哪些窗口
dotnet run --project tools\PtpProbe -- native # 系统手势:注册表值与 Explorer 生效值对照
dotnet run --project tools\PtpProbe -- desktops # 虚拟桌面接口自检
dotnet run --project tools\PtpProbe -- thumbnails # 缩略图后端自检
dotnet run --project tools\PtpProbe -- thumbnails --shadow # 自画阴影与系统真实阴影逐点对照
目录结构
src/
GlideShell.Core/ 纯逻辑:手势识别、映射、物理、布局、交互控制器(不调用 Windows API,可回放测试)
GlideShell.Platform/ Windows 实现:Raw Input、DWM、DirectComposition、虚拟桌面、系统手势接管
GlideShell/ 常驻程序:托盘、设置窗口、线程编排、配置
tests/GlideShell.Tests/ 单元测试、真机轨迹回放测试、架构守卫测试
tools/PtpProbe/ 诊断探针
build/ 发布、打包、安装、证书脚本
docs/ 路线图、配置说明、技术验证记录
legacy/ 旧原型 MissionFlow(只读参考,tag missionflow-final)
致谢
友情链接
License
MIT © LiamZhaofor。所含第三方 MIT 代码保留其原始版权声明。