在 Windows 7 上还原 Windows 10 的多桌面(虚拟桌面)功能。32 位单文件程序,任何 Win7 均可直接运行。
启动 MDesktop.exe,托盘区会出现图标。左键点托盘图标或按 Ctrl+Shift+Space 打开任务视图。
| 热键 | 功能 |
|---|---|
Ctrl + Shift + Space |
打开/关闭任务视图 |
Ctrl + Alt + PgDn / PgUp |
下一个 / 上一个桌面 |
Ctrl + Alt + 1..9 |
直接跳到第 N 个桌面 |
Ctrl + Alt + N |
新建桌面并切换过去 |
Ctrl + Alt + X |
关闭当前桌面(窗口并入左邻桌面) |
Ctrl + Alt + Shift + PgDn / PgUp |
把当前活动窗口移到下/上一个桌面 |
命令行辅助(可用于脚本/测试):MDesktop.exe /next 切到下一个桌面,/prev 切到上一个,不带参数则唤起任务视图。
MDesktop.ini 的 [Settings] 段:SlideAnimation=1 开启切换滑动动画,设为 0 关闭。
默认值特意避开了常见冲突:不用 Win+Tab(Win7 系统占用)、不用 Ctrl+Alt+方向键(Intel 核显屏幕旋转占用)。如果还是和某个软件撞车,退出程序后打开 MDesktop.ini 修改 [Hotkeys] 段再启动即可,格式如 TaskView=Ctrl+Alt+G,支持 Ctrl/Alt/Shift/Win 组合字母、数字、F1-F12、Space、PgUp/PgDn、Home/End、Ins/Del、方向键等。首次启动后热键会自动写进 INI,直接改文件就行。
- 顶部一排桌面卡片:每个卡片显示该桌面最大窗口的快照和窗口数,悬停卡片或其顶部标签行时,在顶栏处出现红色
×关闭按钮;最右侧是 + 新建桌面 卡片——桌面数量无上限。点击任意卡片关闭任务视图(点其他桌面会顺带切换过去)。 - 下方是当前桌面所有窗口的实时缩略图(DWM 合成):每个窗口等比完整显示(只裁掉系统边框,内容一个不少;最小化窗口由 DWM 显示其最后画面,与 Win7 任务栏预览同机制);标题与预览是一体容器。把格子拖到顶部任意桌面卡片(或"新建桌面")即可把窗口移动到那个桌面;单击格子打开该窗口并置于最顶(若该窗口在其他桌面则自动切换过去),悬停瓦片点 × 关闭该窗口。
- 背景是桌面壁纸 1:1 原样渲染 + 半透明深色遮罩(不模糊,保证高清);不读取系统主题,配色固定暗色。
- 悬停桌面卡片 500 毫秒后持久预览该桌面(纯渲染,真实桌面不动;移开鼠标预览保持);悬停回当前桌面卡片立即还原;只有点击才是真正切换。
Esc或右键关闭任务视图;点击其他程序导致失焦时自动关闭。
- 切换时有全屏平滑滑动动画(仿 Win10),向右切换时新桌面从右侧滑入。
- 单实例应用跳转(学习 Win10 逻辑):微信、QQ 这类单实例软件的窗口在别的桌面时,再次启动它们会自动跳转到窗口所在的桌面,不会看起来"没反应"。
- 不允许重复开 MDesktop 自身:再次运行
MDesktop.exe不会开第二个实例,而是弹出已有实例的任务视图。
- 桌面列表持久化:桌面数量/名称保存在 exe 旁的
MDesktop.ini,重启电脑后原样恢复(窗口本身跨重启无法保留——Windows 关机即销毁窗口,Win10 也一样)。 - 崩溃自恢复:切换桌面前会把被隐藏窗口的句柄+标题写入
MDesktop.recover;程序崩溃后再次启动会自动核对并恢复显示。程序内部还有异常兜底,崩溃瞬间尽力恢复所有窗口。 - 关机/注销安全:收到系统结束消息时先把所有隐藏窗口显示出来。
- 新窗口自动归属:运行期间新打开的窗口自动归入当前桌面。
- 托盘右键菜单里有 "合并所有窗口到当前桌面" 紧急开关。
- 窗口是靠"隐藏/显示"实现的(第三方在 Win7 上的唯一可行方案):非当前桌面的窗口不在任务栏显示——这与 Win10 行为一致。
- 关闭 Aero(Aero Basic/经典主题)时 DWM 实时缩略图不可用,任务视图自动退化为切换前抓取的静态快照。
- 卡片上其他桌面的快照是切换瞬间抓取的静态图(非 Win10 实时画面),这是 DWM 的限制。
- 没有桌面重命名(UI 按需求精简)。
- 命令行:双击
build.bat(使用 Dev-C++ 自带 MinGW64,32 位 + 静态链接)。 - IDE:用 Red Panda C++ / Dev-C++ 打开
MDesktop.dev,直接编译(工程已含src/下三个源文件)。
源代码结构:src/desktops.cpp 桌面引擎与持久化,src/taskview.cpp 任务视图 UI(缩略图/交互/动画),src/anim.cpp 切换滑动动画,src/main.cpp 热键/托盘/入口。
构建注意:必须用 -std=gnu++11(不要用严格的 -std=c++11,否则 MinGW 宽字符 printf 行为变化会导致中文乱码);宽字符格式串一律用 %ls 不用 %s。