1.获取系统DPI的方式有很多,但都有一个问题,获取的DPI可能是修改前的DPI
#include <iostream>
#include <Windows.h>
#pragma comment(lib,"Gdi32.lib")
#pragma comment(lib,"User32.lib")
int main(void) {
//HWND hd = GetDesktopWindow();
HWND hd1 = FindWindow(L"Progman",L"Program Manager");
int zoom = GetDpiForWindow(hd1);
std::cout << zoom << std::endl;
//HWND _hwndProgman = FindWindow(_T("Progman"), NULL);// 桌面
//if(!_hwndProgman)
// _hwndProgman = FindWindow(_T("WorkerW"), NULL);// 自定义桌面
//if (!_hwndProgman)
// _hwndProgman = FindWindow(_T("Shell_TrayWnd"), NULL);// 托盘
//return _hwndProgman;
std::cout << GetDeviceCaps(GetDC(NULL), LOGPIXELSX) << std::endl;
getchar();
return 0;
}
我们使用GetDeviceCaps可以动态获取,如果是win10家庭版,那么获取还是修改前的DPI。所以我们采用GetDpiForWindow获取“Program Manager”,这也是桌面,但不是系统自带APIGetDesktopWindow(),就都能正常获取了。