Built a high-performance Windows RDP client with per-monitor DPI scaling, multi-monitor support and enterprise deployment architecture.
An enterprise client needed a custom Windows Remote Desktop client tailored for their internal infrastructure - one that handled the display realities of their engineering floor: multi-monitor desks, mixed HiDPI and standard displays and a deployment process compatible with their existing IT tooling.
Off-the-shelf RDP clients handled the basics, but failed in two key areas: per-monitor DPI scaling when a window moved between displays and the session resolution negotiation required to keep the remote desktop crisp across all configurations.
A full WPF application implementing the Microsoft RDP client protocol (MsRdpClient10) with custom display management layered on top.
Core capabilities delivered:
WM_DPICHANGED interception to update both the host window and the embedded HwndHost child independently.The most significant challenge was the HwndHost / WPF DPI boundary problem. WPF's layout system uses device-independent pixels (DIPs), but the embedded Win32 RDP surface operates in physical pixels within its own DPI context. Moving the outer window between monitors caused the inner surface to remain at the original DPI scale - producing blurry rendering or layout misalignment.
The fix required:
WM_DPICHANGED via HwndSourceHook before WPF handled itHwndHost child in physical pixel coordinatesDesktopResize RDP control message to the remote session to re-render at the new physical resolutionThis prevented the double-scaling artefact where WPF scaled an already-scaled remote bitmap.
For the MSI packaging, we structured the WiX installer to install per-machine, register the appropriate COM dependencies for MsRdpClient10 and provide a transform for IT teams needing to override default connection parameters at deployment time.
The client deployed the application across their engineering floor through their existing Group Policy infrastructure. DPI complaints that had accumulated from the previous third-party client dropped to zero. The connection profile system reduced the manual reconnection time during infrastructure maintenance windows and the IT team reported a clean deployment with no post-install support calls.