From 2fe350edffcdfbb35392f8df4e679f81d1f5e579 Mon Sep 17 00:00:00 2001 From: LGUG2Z Date: Sat, 23 Jul 2022 10:46:46 -0700 Subject: [PATCH] feat(dpi): default to per monitor v2 This commit ensures that the process starts with DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2 set by default. https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-setprocessdpiawarenesscontext re #187 --- komorebi/Cargo.toml | 5 +++-- komorebi/src/main.rs | 1 + komorebi/src/windows_api.rs | 8 ++++++++ 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/komorebi/Cargo.toml b/komorebi/Cargo.toml index 7fccaccd..cdb26820 100644 --- a/komorebi/Cargo.toml +++ b/komorebi/Cargo.toml @@ -48,9 +48,10 @@ features = [ "Win32_Graphics_Gdi", "Win32_System_Threading", "Win32_System_RemoteDesktop", - "Win32_UI_Input_KeyboardAndMouse", "Win32_UI_Accessibility", - "Win32_UI_WindowsAndMessaging" + "Win32_UI_HiDpi", + "Win32_UI_Input_KeyboardAndMouse", + "Win32_UI_WindowsAndMessaging", ] [features] diff --git a/komorebi/src/main.rs b/komorebi/src/main.rs index 81f6d5e0..9697aadc 100644 --- a/komorebi/src/main.rs +++ b/komorebi/src/main.rs @@ -407,6 +407,7 @@ fn main() -> Result<()> { let process_id = WindowsApi::current_process_id(); WindowsApi::allow_set_foreground_window(process_id)?; + WindowsApi::set_process_dpi_awareness_context()?; let (outgoing, incoming): (Sender, Receiver) = crossbeam_channel::unbounded(); diff --git a/komorebi/src/windows_api.rs b/komorebi/src/windows_api.rs index ed25da39..ae5ecbd1 100644 --- a/komorebi/src/windows_api.rs +++ b/komorebi/src/windows_api.rs @@ -38,6 +38,8 @@ use windows::Win32::System::Threading::QueryFullProcessImageNameW; use windows::Win32::System::Threading::PROCESS_ACCESS_RIGHTS; use windows::Win32::System::Threading::PROCESS_NAME_WIN32; use windows::Win32::System::Threading::PROCESS_QUERY_INFORMATION; +use windows::Win32::UI::HiDpi::SetProcessDpiAwarenessContext; +use windows::Win32::UI::HiDpi::DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2; use windows::Win32::UI::Input::KeyboardAndMouse::SetFocus; use windows::Win32::UI::WindowsAndMessaging::AllowSetForegroundWindow; use windows::Win32::UI::WindowsAndMessaging::EnumWindows; @@ -565,6 +567,12 @@ impl WindowsApi { )) } + pub fn set_process_dpi_awareness_context() -> Result<()> { + unsafe { SetProcessDpiAwarenessContext(DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2) } + .ok() + .process() + } + #[allow(dead_code)] pub fn system_parameters_info_w( action: SYSTEM_PARAMETERS_INFO_ACTION,