我使用DisplaySwitch.exe / extend命令创建虚假显示,然后尝试使用以下代码更改此显示的分辨率。
DISPLAY_DEVICE display;
display.cb = sizeof(DISPLAY_DEVICE);
EnumDisplayDevices(NULL, 1, &display, EDD_GET_DEVICE_INTERFACE_NAME);
DEVMODE dvMode;
ZeroMemory(&dvMode, sizeof(DEVMODE));
dvMode.dmSize = sizeof(DEVMODE);
dvMode.dmPelsHeight = 1080;
dvMode.dmPelsWidth = 1920;
dvMode.dmBitsPerPel = 32;
dvMode.dmFields = (DM_BITSPERPEL|DM_PELSWIDTH | DM_PELSHEIGHT);
long value = ChangeDisplaySettingsEx(display.DeviceName, &dvMode, NULL, CDS_UPDATEREGISTRY | CDS_RESET, NULL);
此代码适用于我的笔记本显示,但它总是返回扩展的DISP_CHANGE_BADMODE。返回的DISPLAY_DEVICE似乎有效,因为EnumDisplaySettings返回正确的当前分辨率。 如果我使用窗口中的调整屏幕分辨率,一切都按预期工作。