我正在尝试按照MSDN given here上的说明禁用辅助监视器。
我正在尝试专门使用这组函数来兼容旧版本的Windows。
但是,我无法设法禁用显示器。我正在Windows 7 x64上运行并测试它。 我得到的只是一个闪烁的屏幕。代码肯定能正确检测显示器 - 我设法改变分辨率并轻松查看显示模式。
以下是我的代码的(部分) - 我在DEVMODE的字段上尝试了很多变体
DEVMODE deleteScreenMode;
ZeroMemory(&deleteScreenMode, sizeof(DEVMODE));
deleteScreenMode.dmSize = sizeof(DEVMODE);
deleteScreenMode.dmDriverExtra = 0;
deleteScreenMode.dmFields = DM_POSITION | DM_PELSHEIGHT | DM_PELSWIDTH;
deleteScreenMode.dmPelsWidth = 0;
deleteScreenMode.dmPelsHeight = 0;
POINTL delete;
deleteion.x=0;
deleteion.y=0;
deleteScreenMode.dmPosition = deleteion;
LONG result = ChangeDisplaySettingsEx(devName,
&deleteScreenMode,
NULL,
CDS_UPDATEREGISTRY,
NULL);
有没有人有这方面的经验?感谢
答案 0 :(得分:4)
我已经决定进入一个不同的问题 - 设置一个主显示器 - 并且纯粹的运气我偶然发现了解决方案。 有两个条件可以禁用未在任何位置指定的监视器: 1)您无法动态禁用监视器 - 您必须使用CDS_UPDATEREGISTRY将其写入注册表。 2)更重要的是,出于一些奇怪的原因,你必须首先将更改存储在注册表中(有或没有CDS_NORESET,这没关系),然后然后再次使用带有NULL值的ChangeDisplaySettingsEx来制作变化发生了。这可能与两个连接到同一显示设备的显示器有关,我不确定......
无论如何,这里的代码对我有用:
result = ChangeDisplaySettingsEx(devName, &deleteScreenMode,
NULL,
CDS_UPDATEREGISTRY | CDS_NORESET ,
NULL);
ChangeDisplaySettingsEx (NULL, NULL, NULL, NULL, NULL);
希望有一天它会帮助某个人。
答案 1 :(得分:0)
此处暗示了类似的解决方案:
http://support.microsoft.com/kb/308216
这适用于附加屏幕。但是,即使拥有这些知识,关于如何分离屏幕的ChangeDisplaySettingsEx文档对于需要设置的DevMode字段也是错误的。正如您所注意到的,您不仅要设置DM_POSITION,还要设置DM_PELSHEIGHT | DM_PELSWIDTH。
在Windows 7中有一个新的SetDisplayConfig API,但我还没有个人经验。希望它有更好的记录!