|
楼主 |
发表于 2011-2-8 03:56:05
|
显示全部楼层
本帖最后由 jd19970829 于 2011-2-8 04:03 编辑
比如说这样一段代码吧
我正在使用的电脑是22寸的显示器硬件ID在设备管理器中显示的是LG991,这时我直接不关机或者不重启更换了另一个显示器,这个显示是一个19寸的,硬件ID在设备管理器中本来应该显示是BEN768,但是在我没有刷新设备管理器的时候,监视器里面的显示器硬件ID仍然是LG991,必须要刷新一次设备管理器,监视器里面的硬件ID才会变成现正正在使用的BEN768,这个我测试过的。(显示器的硬件ID在设备管理器的监视器一栏下面)
我随便写了一段代码。
code:
调用某个函数显示显示器的硬件ID(这时会显示LG991)
_CM_Scan_Device_Changes
再次调用函数显示出显示器的硬件ID(这时仍然是LG991,因为程序执行的很快,还没等到设备管理器刷新完就已经执行到这一步了),然后根据硬件ID调用_ChangeScreenRes(1440, 900, 32, 60)重新设置分辨率为1990*400(原来22寸的分辨率为1680*1050)
end code
我测试过,当我第一次执行这个函数的时候,分辨率不会改变,当我第二次执行这个函数的时候分辨率就会改变了,就是应为在执行这个程序的时候,_CM_Scan_Device_Changes这个函数刷新设备的过程还没有完成,但是程序没有等待刷新完成,而直接向下继续执行了,所以没有改变分辨率,当我第2次调用的时候,上一次的设备已经刷新完成了,所以我再次调用修改分辨率函数的时候就能正确修改到分辨率了。
我可以在调用_CM_Scan_Device_Changes以后sleep(10000),这样相当于暂停一下,等待设备管理器刷新完成,但是这样毕竟治标不治本,希望在函数里直接就有这个功能。 |
|