Work
Case Study Enterprise Software

Multi-Monitor RDP Client

Built a high-performance Windows RDP client with per-monitor DPI scaling, multi-monitor support and enterprise deployment architecture.

Overview

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.

What We Built

A full WPF application implementing the Microsoft RDP client protocol (MsRdpClient10) with custom display management layered on top.

Core capabilities delivered:

  • Per-monitor DPI awareness (PMv2) - The client correctly re-renders when dragged between displays with different scale factors, using WM_DPICHANGED interception to update both the host window and the embedded HwndHost child independently.
  • Multi-monitor spanning - Remote sessions can span multiple physical monitors as a single extended desktop, with resolution negotiated automatically on connection.
  • Enterprise deployment package - MSI installer built with WiX, compatible with Group Policy deployment and silent install parameters required by the client's IT team.
  • Connection profiles - Saved connection configurations with encrypted credential storage using Windows DPAPI.

Technical Approach

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:

  1. Intercepting WM_DPICHANGED via HwndSourceHook before WPF handled it
  2. Explicitly repositioning and resizing the HwndHost child in physical pixel coordinates
  3. Sending a DesktopResize RDP control message to the remote session to re-render at the new physical resolution

This 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.

Outcome

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.