使用 WinAPI 附加禁用的显示设备
Attach disabled display device with WinAPI
我的问题是启用带有ChangeDisplaySettingsEx
的禁用显示器。我想这不是火箭科学,但经过一些挖掘,它看起来仍然是不可能的。我找到了一种基于此处代码示例禁用所有辅助显示器的方法Microsoft。虽然它只需要基本的调整就可以工作,但重新连接从未奏效。我想做的是:
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代码,它不启用任何显示。有没有人有类似的经历?
尝试将CDS_NORESET添加到对 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:屏幕截图未显示在窗口中
- 如何在"SUBSYSTEM:WINDOWS"下显示并输出到Windows(C++ WinApi)上的
- 如何停止在所有桌面上显示C / C++ WINAPI窗口?
- 将移动设备(iOS和Android)连接到带有QT / C++和镜像显示的VNC服务器
- c ++ 是否有任何用于列出 Windows 驱动程序管理器控制台中显示的设备驱动程序的 Windows API?
- 使用 WinApi 获取与面板中相同的显示名称"Advanced display settings"
- 使用C /Winrt,带有设备的填充列表框,显示其名称
- 挂钩 winapi 函数显示我 dllimport 错误
- Winapi在屏幕上使用MouseClick活动显示图标
- 如何使用C Winapi 32在默认值中显示Combobox第二值
- Cuda 示例正常工作,但我的代码显示没有功能的设备
- WinAPI设备通知-未进入消息循环
- 当插入第二个监视器时,全屏Direct3D9设备仅以本机分辨率显示
- 尝试打开显示设备句柄以使用 C++ 更改 Windows XP 上的亮度
- 运行 winapi 程序时显示的控制台
- C++-WinAPI获取所有连接的USB设备的列表
- 如何在不考虑会话的情况下获取显示设备信息
- 使用 WinAPI 附加禁用的显示设备
- 检查枚举显示设备 dwFlags
- 使用DirectX获取显示设备输出类型