# 桌面图标工具 **Repository Path**: mobuhan/desktop-icon-tool ## Basic Information - **Project Name**: 桌面图标工具 - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2026-09-18 - **Last Updated**: 2026-10-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # DeskTabs · 桌面图标分类收纳工具 **76 KB 单文件 · 免安装 · 开源免费 · 真正全透明 + 鼠标穿透的 Windows 桌面整理工具** 用原生 C + Win32 API 写的桌面图标整理小工具。把桌面上乱七八糟的快捷方式、 软件图标按分类收进屏幕边缘的一条小蓝条里,桌面只留回收站;鼠标碰一下才滑出来, 点图标直接启动,鼠标移开 20 秒自动收回。 > 桌面整理 / 桌面图标管理 / 桌面图标分类 / 桌面图标收纳 / 桌面美化 / 快捷方式管理 > · 绿色免安装,不写注册表(开机自启除外),不联网、不捆绑、不弹广告。 **关键词**: `桌面整理` `桌面图标整理` `桌面图标管理` `桌面图标分类` `桌面图标收纳` `桌面整理工具` `桌面美化` `桌面图标隐藏` `桌面图标盒子` `桌面分区` `快捷方式管理` `桌面助手` `Windows桌面工具` `绿色免安装` `开源免费` `单文件` `desktop icon organizer` `desktop icon manager` `windows desktop tidy` `fences alternative` --- ## 功能特性 | 功能 | 说明 | |---|---| | 🟦 **小蓝条入口** | 平时屏幕上只有一条贴边的小蓝条,不挡任何东西;默认在屏幕左上角,**可以按住拖动到任意位置**(位置会记住) | | 📂 **分类选项卡** | 鼠标碰蓝条 → 滑出选项卡;鼠标经过某个选项卡 → 展开该分类的软件图标 | | 🖱️ **点击启动** | 点图标直接运行对应软件(自动解析桌面/文件夹里的快捷方式) | | ⏱️ **自动收回** | 切换到别的选项卡时自动滑回;鼠标离开选项卡及内容 20 秒后自动收回 | | ✕ **手动收起** | 右上角「✕」一键收回;「↻」重新校验并刷新 | | ⌨️ **Alt+~ 全部菜单** | 一键展开全部选项卡与全部软件,再按一次(或 Esc)关闭 | | 🗂️ **快捷路径** | 顶部显示当前管理的文件夹,**鼠标悬停显示完整路径**;点击可切换管理别的文件夹 | | 💾 **按文件夹保存配置** | 每个被管理的文件夹有独立配置,没有就自动生成,已有的直接加载 | | 🔃 **刷新校验** | 点「↻」会删掉已失效的图标、把文件夹里新出现的收进「其它」 | | ⬍ **拖拽排序** | 选项卡、软件行右侧都有「≡」手柄,按住可以自由拖拽排序 | | 📌 **右键管理** | 右键选项卡:新增/重命名/删除分类;右键软件:更变到别的选项卡 / 删除 | | 🖱️ **拖放加入** | 从资源管理器把图标拖到某个选项卡上,松手即归类 | | 📊 **内容自适应 + 滚动条** | 窗口高度跟随内容;内容太多超过屏幕时出现滚动条(支持滚轮和拖动滑块) | | 🚀 **开机自启** | 写入 `HKCU\...\Run`,登录后自动常驻 | --- ## 它有多大? | 项目 | 大小 | |---|---| | **可执行文件 `DeskTabs.exe`** | **76.0 KB**(77,824 字节),单文件 | | 全部源码 | 98.5 KB / 3,178 行 C 代码 | | 外部依赖 | **无**,只用 Windows 自带的系统 DLL | | 安装 | 免安装,双击即用;卸载就是删掉文件夹 | **实际加载的系统 DLL**(全部是系统自带,不需要装任何运行库): ``` KERNEL32.dll USER32.dll GDI32.dll COMCTL32.dll SHELL32.dll OLE32.dll SHLWAPI.dll ADVAPI32.dll msvcrt.dll ``` 作为参考,市面上常见的桌面整理工具(Fences、各类"桌面管家/桌面助手") 安装包一般是**十几 MB 到上百 MB**,并且会常驻若干后台进程。 DeskTabs 编译出来不到 80 KB。 --- ## 独特之处 ### 1. 真的"看不见",不占桌面 默认状态下屏幕上只有一条 `6px × 88px` 的小蓝条。而且它**不置顶** —— 被浏览器或其它窗口盖住时完全看不见,**只有回到桌面才露出来**,绝不会挡你干活。 对比很多同类工具:常驻一个半透明面板浮在最上层,一直占着屏幕一块地方。 ### 2. 真的鼠标穿透 窗口用 `UpdateLayeredWindow` 做**逐像素透明**,没用到的像素 alpha 直接置 0 —— 鼠标移到透明区域会**穿透到下面的窗口**,正常点击、拖拽完全不受影响。 不是"半透明挡住但能看见",是压根点不到它。 ### 3. 能管理任意文件夹,不只是桌面 顶部的「快捷路径」可以指向任何目录(例如 `桌面\桌面图标\`,把图标全塞进一个子文件夹)。 **每个文件夹有自己独立的一套分类配置**,切换文件夹即切换配置; 没有配置的文件夹会自动生成一份,里面的图标先统一收进「其它」。 ### 4. 一条命令就能编译,改起来没有负担 3,100 行纯 C,没有 CMake、没有依赖管理、没有第三方库: ```bash gcc main.c config.c -o DeskTabs.exe -mwindows -lcomctl32 -lgdi32 -luser32 \ -lshell32 -lshlwapi -ladvapi32 -lole32 -O2 -s ``` ### 5. 配置就是一个人能看懂的 JSON ``` %APPDATA%\DeskTabs\config.json ``` 不用注册表、不用数据库、不加密。想手动改分类名、调面板宽度、改收起时间,直接编辑文本即可。 ### 6. 完全免费、无广告、不联网 程序不做任何网络请求,不收集数据,没有会员、没有弹窗、没有"推荐安装"。 ### 7. 开源可魔改(MIT) 源码就在仓库里,想加功能自己改。作者自己用的就是这个版本。 --- ## 和同类工具对比 | 维度 | **DeskTabs** | Stardock Fences | 腾讯桌面整理 | 360 桌面助手 | 小智桌面 | Nimi Places | |---|---|---|---|---|---|---| | **体积** | **76 KB** | ~15 MB 安装包 | 几十 MB | 几十 MB | 几十 MB | ~2 MB | | **安装方式** | 免安装,删文件夹即卸载 | 安装 + 后台服务 | 安装 | 安装 | 安装 | 安装 + .NET | | **收费** | 免费开源(MIT) | 付费(约 ¥50–150) | 免费 | 免费 | 免费 + 会员 | 免费开源 | | **捆绑推广** | 无 | 无 | 有(推管家) | 有(全家桶/弹窗) | 有 | 无 | | **需要联网** | 不需要 | 需要(授权验证) | 要 | 要 | 要 | 不要 | | **鼠标穿透** | ✅ **逐像素穿透** | ❌ 半透明挡板 | ❌ | ❌ | ❌ | ❌ | | **默认形态** | 6px 小蓝条,不占桌面 | 常驻半透明框 | 常驻格子 | 常驻面板 | 常驻面板 | 桌面容器 | | **自动分类规则** | ❌ 手动拖 | ✅ | ✅ | ✅ | ✅ | ❌ | | **位置自由摆放** | ❌ 贴屏幕左边缘 | ✅ 桌面任意 | ✅ | ✅ | ✅ | ✅ | | **管理任意文件夹** | ✅ **每文件夹独立配置** | 部分支持 | ❌ 只管桌面 | ❌ | ❌ | ❌ | | **多显示器** | ⚠️ 未验证 | ✅ | ✅ | ✅ | ✅ | ✅ | | **代码签名** | ❌ 无 | ✅ | ✅ | ✅ | ✅ | — | | **自动更新** | ❌ 手动替换 | ✅ | ✅ | ✅ | ✅ | 已停更 | > 同类工具的体积/功能为大致量级,非逐个实测。 ### 优点 1. **体积碾压** —— 76 KB 单文件,同类起步就是十几 MB;源码 3,178 行 C,零第三方依赖。 2. **真透明 + 真鼠标穿透** —— 空白区域鼠标直接穿透到下层窗口,不是"能看穿的挡板",是压根点不到。 3. **默认隐形、不置顶** —— 只有 6px 蓝条,被盖住就彻底消失,回桌面才出现。同类多为常驻悬浮面板,永远占一块地。 4. **能管任意文件夹** —— 每个被管理文件夹一套独立配置,切换即切换。同类基本只管桌面。 5. **零依赖、零联网、零推广** —— 不联网、不收集数据、不弹窗、不推自家产品。 6. **`Alt+~` 全局热键** —— 任意界面一键调出全部菜单。 7. **拖拽收集 + 拖拽排序** —— 从资源管理器拖图标到选项卡即归类;选项卡与列表项均可拖拽排序。 8. **自动校验失效项** —— 「↻」会移除已失效条目、把新出现的收进「其它」。 9. **开源可改** —— 一条 gcc 命令即可编译。 ### 缺点(如实列出) 1. **位置固定** —— 只能贴屏幕左边缘,不能像 Fences 那样在桌面任意位置画框、自由调整尺寸。这是设计取舍:换来不占桌面和鼠标穿透。 2. **没有自动分类** —— 只能手动拖拽,或靠「↻」把新图标收进「其它」。同类普遍支持"按类型/名称自动分组"。 3. **无代码签名** —— 首次运行 SmartScreen 会提示"未知发布者",需要点一次"仍要运行"。 4. **无自动更新** —— 更新靠重新编译或替换 exe。 5. **跨选项卡移动稍绕** —— 拖拽排序仅作用于当前选项卡内部,跨分类需右键「更变选项卡」。 6. **界面为自绘,无主题皮肤** —— 没有主题包和过度动画效果。 7. **多显示器 / 多用户未验证** —— 蓝条坐标基于主屏。 8. **单人小项目** —— 没有客服、没有官方文档站、没有社区生态。 ### 一句话定位 > **Fences 是"桌面装修",DeskTabs 是"桌面收纳箱"。** > 要美观、要自动、要自由摆放 → 选 Fences 那类; > 要桌面干净、零负担、不占资源、不要广告 → 选这个。 --- ## 使用环境 | 项目 | 要求 | |---|---| | 操作系统 | Windows 10 / 11(x64) | | 运行 | **不需要任何运行库**,双击 exe 即可 | | 编译 | MinGW-w64 GCC(或 MSYS2 / w64devkit)、MSVC 均可 | | 依赖 | 仅系统自带 DLL:`user32` `gdi32` `comctl32` `shell32` `shlwapi` `advapi32` `ole32` | | 屏幕缩放 | 已适配高 DPI(按屏幕 DPI 自动缩放界面尺寸) | --- ## 编译方法 ```bash gcc main.c config.c -o DeskTabs.exe -mwindows -lcomctl32 -lgdi32 -luser32 \ -lshell32 -lshlwapi -ladvapi32 -lole32 -O2 -s ``` 说明: - `-mwindows`:编译成 GUI 程序,运行时不弹黑色控制台窗口 - `-s`:去掉符号表,体积更小 - 用 MSVC 的话换成: ``` cl /O2 main.c config.c /link /SUBSYSTEM:WINDOWS user32.lib gdi32.lib comctl32.lib shell32.lib shlwapi.lib advapi32.lib ole32.lib ``` --- ## 使用方法 ### 1. 启动 双击 `DeskTabs.exe`。屏幕上会出现一条**贴着左边的小蓝条**(默认在左上角), 托盘里会出现一个小图标。 ### 2. 展开 / 收起 - **鼠标碰到小蓝条** → 滑出选项卡 - **鼠标经过某个选项卡** → 展开该分类的软件图标 - **点软件图标** → 启动对应软件 - **点右上角 ✕** → 立刻收回 - **鼠标移开 20 秒** → 自动收回 ### 3. 换个位置放蓝条 鼠标移到蓝条上,**按住左键拖动**超过一点点距离,蓝条就跟着鼠标走了; 松手后位置会记进配置文件,下次启动还在那里。 ### 4. 看全部内容 按 **`Alt + ~`** 展开「全部菜单」,把所有分类和软件一次性列出来; 再按一次 `Alt + ~` 或按 `Esc` 关闭。 也可以用桌面上的「桌面图标大管家」快捷方式(带 `--all-menus` 参数)双击打开。 ### 5. 管理分类 - **右键某个选项卡** → 新增选项卡 / 重命名 / 删除(「其它」是兜底,不可删)/ 添加软件 - **右键某个软件** → 更变到其它选项卡 / 删除该软件 - **从资源管理器拖图标到选项卡上** → 松手即加进该分类 ### 6. 切换管理的文件夹(快捷路径) 顶部显示的是当前管理的文件夹(比如「桌面图标」): - **鼠标悬停在文字上** → 显示完整路径 - **点击文字** → 弹出文件夹选择框,换一个文件夹来管理 - 每个文件夹有**自己独立的配置**:没有就自动生成一份(里面的图标先全放进「其它」),已有的直接加载 - **点右边的「↻」** → 重新校验:删掉已经失效的图标,把文件夹里新出现的收进「其它」 ### 7. 拖拽排序 选项卡右侧、每个软件行右侧都有一个 **「≡」** 手柄: - **按住选项卡的手柄上下拖** → 排序选项卡 - **按住软件的手柄上下拖** → 调整该分类内软件的顺序 拖动时手柄变蓝,松手自动保存。(必须按在手柄上,平时点图标不会误触。) ### 8. 退出 右键托盘图标 → 退出。 --- ## 界面截图 ### 默认状态:屏幕上只有一条小蓝条 ![默认状态](screenshots/01-默认状态.png) ### 鼠标碰一下:滑出选项卡 ![滑出选项卡](screenshots/02-滑出选项卡.png) ### 点开分类:显示软件图标(带真实图标) ![软件面板](screenshots/03-软件面板.png) ### 快捷路径:悬停显示完整路径 / 点击切换文件夹 ![快捷路径](screenshots/04-快捷路径.png) --- ## 配置文件 所有配置都在 `%APPDATA%\DeskTabs\` 下,纯 JSON 格式,可以直接改: ``` %APPDATA%\DeskTabs\ ├─ config.json 全局设置(偏好 + 当前快捷路径) └─ folders\ └─ <路径哈希>.json 每个被管理文件夹的独立分类配置 ``` `config.json` 示例: ```json { "version": 2, "folder": "C:\\Users\\你的用户名\\Desktop\\桌面图标", "pref": { "borderPx": 1, "hideDelaySec": 20, "panelWidth": 320, "hoverSlideOut": true, "trayIcon": true, "autoStart": true, "dotX": 0, "dotY": 7, "hotkey": "Alt+~" }, "tabs": [ { "id": "tab-dev", "name": "开发工具", "system": false, "apps": [ { "name": "Qoder", "path": "C:\\Users\\...\\桌面图标\\Qoder CN IDE.lnk" } ] }, { "id": "tab-other", "name": "其它", "system": true, "apps": [] } ] } ``` 常用字段: | 字段 | 说明 | |---|---| | `folder` | 当前管理的文件夹(快捷路径) | | `pref.hideDelaySec` | 鼠标离开后自动收回的秒数 | | `pref.panelWidth` | 滑出面板宽度(像素) | | `pref.dotX` / `dotY` | 小蓝条位置;`-1` 表示默认左上角 | | `tabs[].system` | `true` 表示兜底分类「其它」,右键菜单里不可删除 | > 改了配置后,右键托盘图标 → 重新加载配置 即可生效。 --- ## 开机自启 程序本身会记住这个开关(`pref.autoStart`),也可以手动设置: ```cmd :: 开启 reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Run" /v DeskTabs /t REG_SZ /d "\"D:\DeskTabs\DeskTabs.exe\"" /f :: 关闭 reg delete "HKCU\Software\Microsoft\Windows\CurrentVersion\Run" /v DeskTabs /f ``` --- ## 项目结构 ``` DeskTabs/ ├─ main.c 主程序:窗口、透明分层绘制、滑出动画、托盘、右键菜单、拖拽排序 ├─ config.c 配置读写:极简 JSON 解析/生成、多份配置、路径解析 ├─ config.h 数据结构与接口声明 ├─ DeskTabs.exe 编译好的程序(76 KB,可直接运行) ├─ README.md 项目说明文档 ├─ LICENSE MIT 开源协议 └─ screenshots/ 界面截图 ``` --- ## 实现要点 - **透明 + 鼠标穿透**:窗口用 `UpdateLayeredWindow` 做 per-pixel alpha, 背景像素 alpha 置 0(既完全透明、又让鼠标穿透),只让真正画了内容的区域接收鼠标 - **窗口形状**:一条小蓝条 / 选项卡条 / 选项卡+面板,三种形态靠改变窗口尺寸加定时器驱动的 非阻塞动画平滑过渡(不用 `Sleep` 阻塞消息循环,避免点击延迟) - **图标获取**:`SHGetFileInfo` 读取快捷方式真实图标,**必须先 `CoInitialize`** 初始化 COM,否则拿不到 - **路径解析**:依次在「设定的文件夹 → 一级子文件夹 → 桌面 → 公共桌面」里按名字匹配, 支持完全一致 / 前缀 / 包含三级匹配 - **配置健壮性**:写 JSON 时严格转义反斜杠;读的时候遇到未知转义保留原样不会吞字符; 加载后统一校验所有路径,失效的按名字重新解析 --- ## 已知限制 - 仅支持 Windows(大量使用 Win32 API,没有跨平台计划) - 小程序内部渲染,不支持拖拽图标**跨选项卡**排序(跨分类请用右键「更变到选项卡」) - 快捷方式里的图标是**运行程序本身**的图标;如果目标程序图标变了,点「↻」刷新即可 --- ## License 本项目采用 **MIT License**,可自由使用、修改、分发(含商用),保留版权声明即可。 完整协议见 [LICENSE](LICENSE)。 Copyright (c) 2026 mobuhan