C++ 如何获得比例因子以获得真实屏幕分辨率?

C++ 如何获得比例因子以获得真实屏幕分辨率?,c++,windows,winapi,C++,Windows,Winapi,我试图获得屏幕分辨率比例因子,以获得正确的屏幕分辨率。我尝试了不同的比例因子组合,但“dsf”变量始终设置为100。我怎样才能解决这个问题 RECT System::GetScreenResolution(HWND hwnd) { //get resolution scale factor HMONITOR hmonitor = MonitorFromWindow(hwnd, MONITOR_DEFAULTTOPRIMARY); DEVICE_SCALE_FACTOR d

我试图获得屏幕分辨率比例因子,以获得正确的屏幕分辨率。我尝试了不同的比例因子组合,但“dsf”变量始终设置为100。我怎样才能解决这个问题

RECT System::GetScreenResolution(HWND hwnd)
{
    //get resolution scale factor
    HMONITOR hmonitor = MonitorFromWindow(hwnd, MONITOR_DEFAULTTOPRIMARY);
    DEVICE_SCALE_FACTOR dsf;
    GetScaleFactorForMonitor(hmonitor, &dsf);

    //get and calculate real resolution
    HDC hdc = GetDC(hwnd);
    
    RECT r{ 0, 0, GetDeviceCaps(hdc, HORZRES) * dsf / 100, GetDeviceCaps(hdc, VERTRES) * dsf / 100 };

    ReleaseDC(hwnd, hdc);

    return r;
}
我使用Visual Studio 2019在Windows 10 64位下构建该程序,并使用具有扩展显示的多监视器。
提前感谢。

这是否回答了您的问题?我可以得到屏幕分辨率,我的问题是我不能得到正确的比例因子。无论我从显示设置中选择什么,Windows API函数始终将变量设置为“100”。您可能需要检查答案:我有两个监视器(一个100%,另一个150%)。这对我来说很好。也许您应该尝试使用EnumDisplayMonitors枚举所有监视器,而不是依赖窗口。顺便说一句,屏幕的最终大小(取决于比例因子)可以使用MONITORINFO.rcMonitor(GetMonitorInfo)获得。您需要将您的进程标记为支持DPI,否则操作系统将由您决定。