自制inf文件覆盖EDID数据以解决显示器分辨率和刷新率问题
当windows系统(本文以win7为例)通过数字方式(HDMI或DVI)连接显示器/电视机时,会通过显卡驱动读取EDID数据,该数据会告知系统该显示设备的最佳及支持的分辨率和刷新率。
如果这个值正确,那么一切正常,糟糕的是有时候这个值并不正确……我买了一台康佳LED32E320PD,国产电视再一次向我证明了国货是没有下限的……该电视通过HDMI连接电脑后,自动的分辨率是——1360×768@6Hz。我没打错,1360,以及6Hz。
而它的说明书上,清清楚楚地写着最佳分辨率1366×768@60Hz。
我想,一定是小工在刷EEPROM的时候填错了……而且所有可选的分辨率中,就是没有1366或1360×768,你只能等待接上线的时候自动变为这个分辨率,而忍受6Hz的刷新率。
也就是说,本文所述的方法旨在解决显示器/电视机内置EDID数据错误或显卡读取EDID错误的情况下,如何以设计的最佳分辨率和刷新率使用该显示器/电视机来连接电脑。理论上来说本文也可用于强制让显示器运行于超出设计标准的分辨率和刷新率,比如很多人就用来修改CRT的刷新率使之支持120Hz并用于3D显示;但是这一行为具有相当的危险性,本文不予推荐,也未予测试。
为了解决这个问题,我想到的方案是强制电脑不使用显示器报告的EDID,而使用自定义的分辨率和刷新率。但是虽然很多人说ATI和NV的最新驱动支持彻底的自定义分辨率,我却始终没有找到(Intel似乎可以),于是我就想覆盖掉显示器报告的EDID数据。我首先尝试了微软的这套说法,后来的事实证明它未必错,但在没有软件帮助的情况下自制inf或者修改注册表都太过复杂了(你没法自己算出合适的EDID值,而且你用下文的方法修改成功后会发现,自己改注册表也是非常困难的,微软的这篇文章里对注册表的描述过于模糊),于是我找到了这个帖子,经我翻译和简化,方法如下:
Continue reading