# EonaCat RDP Colorizer A Windows utility that colors the title bar of Remote Desktop windows and overlays a small colored tag (e.g. `PROD`, `DEV-DB1`) on the caption, so you can tell multiple RDP sessions apart at a glance. It runs in the background, remembers which color/tag belongs to which server, and automatically re-applies that tag any time a matching RDP window shows up - including after you restart the app, and for windows opened outside the app entirely. ## A note on "running as a service" A true Windows Service (the kind registered with the Service Control Manager) runs in **Session 0**, which has been isolated from the interactive desktop since Windows Vista. A Session 0 process cannot see or draw on windows in your logon session at all - this is an OS-level security boundary, not something that can be coded around. So a real SCM service could never color or overlay another window's title bar. What actually achieves the goal - always running, no manual relaunching, automatic re-tagging - is a background app that starts at logon inside your own session. That's what this app now does: - It starts hidden in the **system tray** (no window, no taskbar entry) when launched with `--background`, or normally shows its control panel when opened by hand. - Closing the window just hides it to the tray; the watcher keeps running until you choose **Exit** from the tray icon's menu. - Check **Start with Windows** in the app to have it launch automatically at logon (writes a `HKCU\...\Run` entry pointing at the exe with `--background` - no admin rights required). If your environment specifically requires an SCM-registered service (e.g. for a policy or monitoring reason), that service could still exist to supervise/restart this tray app, but it would not be able to perform the window coloring itself. ## How the coloring and tagging work 1. **Native caption color** - `DwmSetWindowAttribute` with `DWMWA_CAPTION_COLOR` / `DWMWA_TEXT_COLOR`. Only honored on **Windows 11 (build 22000+)**; ignored on Windows 10. 2. **Overlay tag label** - a small always-on-top badge window positioned over the caption bar, showing your text on your chosen color. Works on any Windows version and follows the RDP window as it moves, resizes, or restores (hidden while minimized). ## Auto re-attach by server / IP - Whenever you tag a connection (Launch or Attach), the target (server name or IP) plus your chosen label/color is saved to `%AppData%\EonaCat.RdpColorizer\profiles.json`. - A background watcher scans for RDP windows **system-wide** every second. For each one it doesn't recognize yet, it resolves the actual connection target - first by reading the `mstsc.exe` process's command line (`/v:target`) via WMI, falling back to parsing the window title if that fails (e.g. if `mstsc.exe` is running elevated or under a different account than this app). - If the resolved target matches a saved profile, the tag/color is applied automatically - no manual step needed, including for connections opened straight from the Start menu or a saved `.rdp` file. - Use **Manage saved profiles...** to review or delete remembered server → tag mappings. ## Requirements - Windows 10 or 11 - [.NET 8 SDK](https://dotnet.microsoft.com/download) to build ## Build & run ```powershell cd EonaCat.RdpColorizer dotnet build dotnet run ``` Or publish a standalone exe: ```powershell dotnet publish -c Release -r win-x64 --self-contained false ``` ## Using it 1. Enter a server name/IP and a short tag, pick a color, then click **Launch new tagged connection** (runs `mstsc.exe /v:target`) or **Tag active RDP window** to attach to one already open. 2. That server/tag/color is now remembered - close and reopen the app (or just leave it running in the tray) and any future RDP window to that same server gets tagged automatically. 3. Tick **Start with Windows** so this happens without you having to open the app at all. ## Notes / limitations - Windows caption theming (`DWMWA_CAPTION_COLOR`) is Windows 11 only; there is no public equivalent for Windows 10 - the overlay tag is your cross-version fallback. - The overlay tag is a separate always-on-top window layered over the caption, so it will show up as its own tiny entry in things like Alt+Tab previews - expected behavior, not a bug. - Command-line resolution via WMI requires the watcher to have permission to query the `mstsc.exe` process; if it's elevated or owned by another user, the watcher falls back to matching on the window title instead (which shows the resolved computer name rather than the raw IP you typed - keep that in mind when naming profiles for IP-based targets).