www.pudn.com > MultiMonitor.rar > 显示模式切换.txt, change:2011-06-24,size:1328b


获取当前模式部分: 
假设当前机器仅有一块显卡(设定主显示器为Primary),连接第二块显示器(设定标记为Projector)后,设备管理器里只有两个monitor,拔掉secondary则又恢复成一个monitor。 
比较幸运的是,通过EnumDisplayDevices得到每个monitor及device的settings中的flag是否有DISPLAY_DEVICE_ATTACHED_TO_DESKTOP,组合使用就可以知道当前是何种模式了。情况如下: 
判断Display及Monitor的对应flag,观察其规律就可判断了. 
 
当为双显卡时(高性能和省电模式),情况与单显卡类似,只不过会得到4个Display,因此,在进行上述判断时,首先确保得到了包含DISPLAY_DEVICE_PRIMARY_DEVICE的Display,然后在此基础上继续枚举,并套用上面的逻辑,即可判断。 
 
但有一种情况需要特殊对待,机器为一个显卡,但却在设备管理器中显示为俩,同时monitor也变为三个(或者四个,忘记了)。这时再用上面的方式就不行了。就得像对待双显卡似的,利用DISPLAY_DEVICE_ATTACHED_TO_DESKTOP及Position等信息结合判断。 
此种情况,个人怀疑是driver出现了两份。 
 
切换部分变得简单了,系统被限制为windows 7。 
于是我第一方案是发出win+p消息,此种方法是可行的,但有一个未知原因未解:当系统启动后,立即运行切换将会失败,必须手动进行一次win+p操作方可。而当系统启动一段时间后使用,则正常了。 
第二方案,很幸运,我找到了Windows\System32\DisplaySwitch.exe,于是,切换变得简单了,直接加入internal,external,extend,clone进行切换了。 
 
哈,这是我的方案。请了解。而xp下使用ChangeDisplaySettings下的方式应该仍然可以完成。