-
-
Notifications
You must be signed in to change notification settings - Fork 89
Open
Description
The resolution currently detected are virtual ones after scaling and the DPI seems to be wrong, like:
# \\.\DISPLAY1
Scale : 100%
Physical Reslution : 2560 x 1440
Logical Reslution : 2560 x 1440
Physical DPI : 108.887
Logical DPI : 96
Frequency : 59
BPP : 32
Position : 0, 0 # the primary display contains the origin (0,0) for compatibility
Primary : true
Orientation : Landscape
# \\.\DISPLAY2
Scale : 150%
Physical Reslution : 1920 x 1080
Logical Reslution : 1280 x 720
Physical DPI : 92.607
Logical DPI : 144
Frequency : 50
BPP : 32
Position : -1920, -592
Primary : false
Orientation : Landscape
The infoware output:
#1:
Resolution : 2560x1440
DPI : 96
Colour depth: 32b
Refresh rate: 59Hz
#2:
Resolution : 1280x720
DPI : 96
Colour depth: 32b
Refresh rate: 50Hz
Resolution
I think it should provide the physical resolution and the scale factor instead of the (virtual) resolution, the virtual resolution will be affected by the PROCESS_DPI_AWARENESS .
The physical resolution can be got by EnumDisplaySettings function with ENUM_CURRENT_SETTINGS just like the one used in available_display_configurations().
DPI
All the DPI retrieved by GetDeviceCaps(hdc, LOGPIXELSX) in infoware for multiple displays is the system (primay display virtual) DPI, not per display.
< Windows 8.1:GetDeviceCaps(hdc, LOGPIXELSX), system DPI>= Windows 8.1:GetDpiForMonitor(,MDT_EFFECTIVE_DPI,,)withSetProcessDpiAwareness(PROCESS_PER_MONITOR_DPI_AWARE), per monitor DPI, but may affect the UI of the process>= Windows 10, version 1607:GetDpiForMonitor(,MDT_EFFECTIVE_DPI,,)withSetThreadDpiAwarenessContext(DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2)in a thread, per monitor DPI
More information
more information required, such as scale factor, position , primary, orientation.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels