Skip to content

(#136) Limit calls to SetThreadDpiAwarenessContext to Windows 10 clients #137

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Sep 30, 2022
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 11 additions & 4 deletions src/win32/screengrab.cc
Original file line number Diff line number Diff line change
@@ -1,14 +1,21 @@
#include "../screengrab.h"
#include "../endian.h"
#include <VersionHelpers.h>

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);

Expand Down