From 9bbea6a283e8d4b23753eb3daa3057d78bea0d8c Mon Sep 17 00:00:00 2001 From: Simon Hofmann Date: Thu, 29 Sep 2022 10:31:02 +0200 Subject: [PATCH] (#136) Limit calls to SetThreadDpiAwarenessContext to Windows 10 clients --- src/win32/screengrab.cc | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/win32/screengrab.cc b/src/win32/screengrab.cc index 8ba1232..fe0a9d0 100644 --- a/src/win32/screengrab.cc +++ b/src/win32/screengrab.cc @@ -1,14 +1,21 @@ #include "../screengrab.h" #include "../endian.h" +#include MMRect getScaledRect(MMRect input) { - // Configure DPI awareness to fetch unscaled display size - DPI_AWARENESS_CONTEXT initialDpiAwareness = SetThreadDpiAwarenessContext(DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2); size_t scaledDesktopWidth = (size_t)GetSystemMetrics(SM_CXSCREEN); size_t scaledDesktopHeight = (size_t)GetSystemMetrics(SM_CYSCREEN); - // Reset DPI awareness to avoid inconsistencies on future calls to copyMMBitmapFromDisplayInRect - SetThreadDpiAwarenessContext(initialDpiAwareness); + // Configure DPI awareness to fetch unscaled display size + if (IsWindows10OrGreater() && !IsWindowsServer()) { + // Re-query desktop dimensions after setting the DPI awareness context + // Only to this on Windows 10 client platforms, since earlier versions of Windows and Windows Server do not support this call + DPI_AWARENESS_CONTEXT initialDpiAwareness = SetThreadDpiAwarenessContext(DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2); + scaledDesktopWidth = (size_t)GetSystemMetrics(SM_CXSCREEN); + scaledDesktopHeight = (size_t)GetSystemMetrics(SM_CYSCREEN); + // Reset DPI awareness to avoid inconsistencies on future calls to copyMMBitmapFromDisplayInRect + SetThreadDpiAwarenessContext(initialDpiAwareness); + } size_t desktopWidth = (size_t)GetSystemMetrics(SM_CXSCREEN); size_t desktopHeight = (size_t)GetSystemMetrics(SM_CYSCREEN);