使用 WinAPI 连接禁用的显示设备 [英] Attach disabled display device with WinAPI

查看:31
本文介绍了使用 WinAPI 连接禁用的显示设备的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的问题是使用 ChangeDisplaySettingsEx 启用禁用的显示器.我想这不是火箭科学,但经过一番挖掘后,它仍然看起来不可能.我找到了一种基于 Microsoft 代码示例禁用所有辅助显示的方法 这里.虽然它只需要基本的调整就可以工作,但重新附加从来没有奏效.我试图做的是:

My problem is enabling a disabled monitor with ChangeDisplaySettingsEx. I guess it is not rocket science but after some digging it still looks impossible. I found a way to disable all secondary displays basing on Microsoft code sample found here. While it needed only basic tweaking to work, re-attaching never worked. What I was trying to do was:

1.初始化显示设备

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);

2.查找所有设备

while (EnumDisplayDevices(NULL, DispNum, &DisplayDevice, 0))
{
    ZeroMemory(&defaultMode, sizeof(DEVMODE));
    defaultMode.dmSize = sizeof(DEVMODE);
    //point 3 goes here
}

3.检测分离的设备

if (!(DisplayDevice.StateFlags & DISPLAY_DEVICE_ATTACHED_TO_DESKTOP))

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);

最后一点返回 DISP_CHANGE_FAILED 代码并且它不启用任何显示.有没有人有类似的经历?

Last point returns DISP_CHANGE_FAILED code and it does not enable any display. Did anyone have some similar experience?

推荐答案

尝试将 CDS_NORESET 添加到您对 ChangeDisplaySettingsEx 的第一次调用.

Try adding CDS_NORESET to your first call to ChangeDisplaySettingsEx.

这个有效:

ChangeDisplaySettingsEx((LPCWSTR)DisplayDevice.DeviceName, &DevMode, NULL, CDS_UPDATEREGISTRY | CDS_NORESET, NULL);
ChangeDisplaySettingsEx(NULL, NULL, NULL, 0, NULL);

这个不起作用:

ChangeDisplaySettingsEx((LPCWSTR)DisplayDevice.DeviceName, &DevMode, NULL, CDS_UPDATEREGISTRY | CDS_RESET, NULL);
ChangeDisplaySettingsEx(NULL, NULL, NULL, 0, NULL);

这个也不行:

ChangeDisplaySettingsEx((LPCWSTR)DisplayDevice.DeviceName, &DevMode, NULL, CDS_UPDATEREGISTRY, NULL);
ChangeDisplaySettingsEx(NULL, NULL, NULL, 0, NULL); 

这篇关于使用 WinAPI 连接禁用的显示设备的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆