别再混淆你的 RDP 会话:自动标记 Remote Desktop 窗口
Source: Dev.to
每位系统管理员都深有体会的问题
你打开了 8 个远程桌面窗口。一个是 PROD-DB,一个是 TEST-APP,还有一个是本地开发机。它们看起来一模一样。你需要重启一个服务……却点错了窗口。
生产环境宕机了。
听起来很熟悉吧?原生 Windows MSTSC 客户端并不会给出视觉提示。虽然可以把鼠标悬停在任务栏上查看主机名,但在快速操作时,错误仍然会发生。
“老派”解决办法(以及它为什么糟糕)
大多数管理员会采用:
- 编辑远程机器的主机名,在其中加入
[PROD]或[TEST] - 使用第三方 RDP 管理器,如 mRemoteNG 或 RD Tabs
- 极度小心(剧透:根本不管用)
但如果还能继续使用 原生 MSTSC 客户端,同时获得即时的视觉反馈呢?
介绍:RDP Title Master
RDP Title Master 是一个体积极小的后台实用工具,它:
- 实时监控所有 RDP 窗口
- 将窗口标题与自定义规则(IP 地址、主机名)匹配
- 在 MSTSC 工具栏上直接叠加一个 颜色编码的徽章
注:我在构建此工具后转向 macOS,所以没有截图可分享。如果你尝试了,请在评论中贴出截图——我很想看到它的实际效果!😅
示例配置 (settings.json)
[
{
"Pattern": "prod",
"Label": "🔥 PRODUCTION",
"ColorHex": "#e74c3c"
},
{
"Pattern": "192.168",
"Label": "🏠 LOCAL",
"ColorHex": "#2ecc71"
},
{
"Pattern": "test",
"Label": "🧪 TEST",
"ColorHex": "#3498db"
}
]
当你连接到 prod-db-01.company.com 时,工具栏会立即显示一个 红色徽章,文字为 “PRODUCTION”。再也不用猜测了。
工作原理(技术深度解析)
1. 窗口检测
工具使用 EnumWindows 扫描所有顶层窗口,寻找 RDP 窗口类:
private static bool IsRdpWindow(IntPtr hwnd)
{
string className = GetClassName(hwnd);
return className == "TscShellContainerClass";
}
2. 标题匹配
找到 RDP 窗口后,获取其标题(通常包含主机名或 IP),并与配置的模式进行匹配:
string title = GetWindowTitle(hwnd);
var rule = _configs.FirstOrDefault(c =>
title.Contains(c.Pattern, StringComparison.OrdinalIgnoreCase)
);
3. GDI+ 叠加层
我们创建一个带有抗锯齿文字和圆角徽章背景的透明位图,然后通过 UpdateLayeredWindow 应用:
using (Graphics g = Graphics.FromImage(bmp))
{
g.SmoothingMode = SmoothingMode.AntiAlias;
g.TextRenderingHint = TextRenderingHint.AntiAliasGridFit;
// Draw rounded rectangle badge
FillRoundedRectangle(g, bgBrush, badgeRect, 10);
// Draw text on top
g.DrawString(text, font, textBrush, x, y);
}
4. 守护进程模式
程序以无限循环运行(每 3 秒一次),检查新出现的 RDP 窗口。这意味着你只需在早上启动一次,随后就可以忘记它。
为什么选 C# 而不是 Python/PowerShell?
简短回答: 性能和分发。
- 单个 .exe – 无运行时依赖。下载即用。
- GDI+ 质量 – 原生访问 Windows 图形 API,渲染流畅。
- 体积 – 开启裁剪后,最终二进制约 50 MB(自包含 .NET 8)。
最初的原型是用 Python 编写的(仍在仓库的 legacy_python/ 文件夹中),但 C# 让它达到了生产级别。
安装与使用
快速开始
- 从 GitHub 下载最新发行版。
- 编辑
settings.json,填入你的服务器模式。 - 运行
MstscTitleBar.exe。 - 打开任意 RDP 会话,即可看到魔法效果。
从源码构建
git clone https://github.com/mlanies/mstsc_title_bar.git
cd mstsc_title_bar/MstscTitleBar
dotnet run
生成可移植可执行文件:
dotnet publish -c Release -r win-x64 --self-contained -p:PublishSingleFile=true
实际使用场景
1. 多环境管理
如果你管理 DEV/STAGE/PROD 环境,可以用颜色进行区分:
- 🔴 红色 = Production(危险区)
- 🟡 黄色 = Staging(请谨慎)
- 🟢 绿色 = Dev(随意实验)
2. 客户划分
为多个客户服务的顾问可以使用如下模式:
{ "Pattern": "client-a", "Label": "Client A", "ColorHex": "#9b59b6" }
{ "Pattern": "client-b", "Label": "Client B", "ColorHex": "#f39c12" }
3. 数据中心识别
按地理位置标记服务器:
{ "Pattern": "us-east", "Label": "🇺🇸 Virginia", "ColorHex": "#3498db" }
{ "Pattern": "eu-west", "Label": "🇪🇺 Ireland", "ColorHex": "#2ecc71" }
已知限制
- 仅限窗口模式 – 全屏 RDP 会隐藏工具栏(设计如此)。
- Windows 10/11 – 使用了针对现代 Windows 的 WinAPI 调用。
- 刷新延迟 – 3 秒轮询间隔(可在代码中自行修改)。
想贡献代码?欢迎提交 PR!
结论
如果你曾在错误的终端输入 rm -rf /,或重启了错误的服务器,你一定体会到视觉提示的价值。RDP Title Master 是一个零配置、极简的工具,让你的日常工作更安全。
试一试吧,并在评论中告诉我你的使用感受!
GitHub: