我的问题是启用已禁用的监视器ChangeDisplaySettingsEx.我想这不是火箭科学,但经过一些挖掘它仍然看起来不可能.我找到了一种基于此处的 Microsoft代码示例禁用所有辅助显示的方法.虽然它只需要基本的调整才能工作,但重新连接从未奏效.我想要做的是:
1.初始化DisplayDevice
BOOL FoundSecondaryDisp = FALSE;
DWORD DispNum = 0;
DISPLAY_DEVICE DisplayDevice;
LONG Result;
TCHAR szTemp[200];
int i = 0;
DEVMODE defaultMode;
ZeroMemory(&DisplayDevice, sizeof(DisplayDevice));
DisplayDevice.cb = sizeof(DisplayDevice);
Run Code Online (Sandbox Code Playgroud)
2.查找所有设备
while (EnumDisplayDevices(NULL, DispNum, &DisplayDevice, 0))
{
ZeroMemory(&defaultMode, sizeof(DEVMODE));
defaultMode.dmSize = sizeof(DEVMODE);
//point 3 goes here
}
Run Code Online (Sandbox Code Playgroud)
3.检测分离的设备
if (!(DisplayDevice.StateFlags & DISPLAY_DEVICE_ATTACHED_TO_DESKTOP))
Run Code Online (Sandbox Code Playgroud)
4.启用设备
DEVMODE DevMode;
ZeroMemory(&DevMode, sizeof(DevMode));
DevMode.dmSize = sizeof(DevMode);
DevMode.dmFields = DM_POSITION | DM_PELSWIDTH | DM_PELSHEIGHT;
DevMode.dmPelsWidth = 1920;
DevMode.dmPelsHeight = 1080;
Result = ChangeDisplaySettingsEx(DisplayDevice.DeviceName, &DevMode, NULL, CDS_UPDATEREGISTRY, NULL);
ChangeDisplaySettingsEx(NULL, NULL, NULL, NULL, NULL);
Run Code Online (Sandbox Code Playgroud)
最后一点返回DISP_CHANGE_FAILED代码,它不启用任何显示.有没有人有类似的经历?
尝试将 CDS_NORESET 添加到对 ChangeDisplaySettingsEx 的第一次调用中。
这个有效:
ChangeDisplaySettingsEx((LPCWSTR)DisplayDevice.DeviceName, &DevMode, NULL, CDS_UPDATEREGISTRY | CDS_NORESET, NULL);
ChangeDisplaySettingsEx(NULL, NULL, NULL, 0, NULL);
Run Code Online (Sandbox Code Playgroud)
这个不起作用:
ChangeDisplaySettingsEx((LPCWSTR)DisplayDevice.DeviceName, &DevMode, NULL, CDS_UPDATEREGISTRY | CDS_RESET, NULL);
ChangeDisplaySettingsEx(NULL, NULL, NULL, 0, NULL);
Run Code Online (Sandbox Code Playgroud)
这也不起作用:
ChangeDisplaySettingsEx((LPCWSTR)DisplayDevice.DeviceName, &DevMode, NULL, CDS_UPDATEREGISTRY, NULL);
ChangeDisplaySettingsEx(NULL, NULL, NULL, 0, NULL);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
534 次 |
| 最近记录: |