原理就是获取 实际 设置的分辨率 / 当时显示的分辨率
设置屏幕缩放后,调用常规的方式获取桌面大小,都是缩放后的尺寸,而非实际设置的尺寸。
这里可以用EnumDisplaySettings函数来获取实际设置的分辨率大小。
#include <iostream>
#include<Windows.h>
HMONITOR GetPrimaryMonitor()
{
POINT ptZero = { 0, 0 };
return MonitorFromPoint(ptZero,
MONITOR_DEFAULTTOPRIMARY);
}
float GetMonitorScalingRatio(HMONITOR monitor)
{
MONITORINFOEX info ={ };
info.cbSize = sizeof(info);
GetMonitorInfo(monitor, &info);
DEVMODE devmode = {};
devmode.dmSize = sizeof(DEVMODE);
EnumDisplaySettings(info.szDevice, ENUM_CURRENT_SETTINGS, &devmode);
return static_cast<float>(devmode.dmPelsWidth) / (info.rcMonitor.right - info.rcMonitor.left);
}
int main()
{
auto h = GetPrimaryMonitor();
float s = GetMonitorScalingRatio(h);
std::cout << s << std::endl;
}
运行结果 :
运行结果 :