对于液晶暗显示器,所谓的最佳应该就是最大的分辨率吧?
是的,在有显示驱动前题下,最大分辨率就是LCD的最佳分辨率。
最大分辨率可以通过EDID取得,也可以通过API取得。
如果没有显示驱动,通过API取得的最大分辨率永远是4:3的分辨率,但不能用于宽屏显示器。
回复 #242 lxl1638 的帖子
谢谢解答!要判断是否已经正确加载显示驱动读取HKEY_LOCAL_MACHINE\HARDWARE下的信息应该也行的。可是对于CRT显示器,最大分辨率应该不是最佳的,不知道有啥办法区分CRT和LCD?
自己用AU3写的
#include <WinAPIEx.au3>
Dim $i = 0, $Data, $z, $max
Dim $max = 0
Do
$Data = _WinAPI_EnumDisplaySettings('', $i)
If $Data < $max Then ExitLoop
If $Data > $max Then
$max = $Data
EndIf
$i += 1
Until IsArray($Data) = 0
$Data = _WinAPI_EnumDisplaySettings('', $i - 1)
If $Data > $Data Then
If MsgBox(1, "如果是最佳分辨率请按确定,否则按取消!", " " & $Data & ' x ' & $Data & ' x ' &'32bit ' & $Data & "HZ") = 1 Then
$a = _ChangeScreenRes($Data, $Data, 32, $Data)
If @error Then MsgBox(0, "出错啦", "没办法更改此分辨率设置!")
Else
Exit
EndIf
Else
If MsgBox(1, "如果是最佳分辨率请按确定,否则按取消!", " " & $Data & ' x ' & $Data & ' x ' & '32bit ' & $Data & "HZ") = 1 Then
$a = _ChangeScreenRes($Data, $Data, 32, $Data)
If @error Then MsgBox(0, "出错啦", "没办法更改此分辨率设置!")
Else
Exit
EndIf
EndIf
Func _ChangeScreenRes($i_Width, $i_Height, $i_BitsPP, $i_RefreshRate)
Local Const $DM_PELSWIDTH = 0x00080000
Local Const $DM_PELSHEIGHT = 0x00100000
Local Const $DM_BITSPERPEL = 0x00040000
Local Const $DM_DISPLAYFREQUENCY = 0x00400000
Local Const $CDS_TEST = 0x00000002
Local Const $CDS_UPDATEREGISTRY = 0x00000001
Local Const $DISP_CHANGE_RESTART = 1
Local Const $DISP_CHANGE_SUCCESSFUL = 0
Local Const $HWND_BROADCAST = 0xffff
Local Const $WM_DISPLAYCHANGE = 0x007E
If $i_Width = "" Or $i_Width = -1 Then $i_Width = @DesktopWidth ; default to current setting
If $i_Height = "" Or $i_Height = -1 Then $i_Height = @DesktopHeight ; default to current setting
If $i_BitsPP = "" Or $i_BitsPP = -1 Then $i_BitsPP = @DesktopDepth ; default to current setting
If $i_RefreshRate = "" Or $i_RefreshRate = -1 Then $i_RefreshRate = @DesktopRefresh ; default to current setting
Local $DEVMODE = DllStructCreate("byte;int;byte;int")
Local $B = DllCall("user32.dll", "int", "EnumDisplaySettings", "ptr", 0, "long", 0, "ptr", DllStructGetPtr($DEVMODE))
If @error Then
$B = 0
SetError(1)
Return $B
Else
$B = $B
EndIf
If $B <> 0 Then
DllStructSetData($DEVMODE, 2, BitOR($DM_PELSWIDTH, $DM_PELSHEIGHT, $DM_BITSPERPEL, $DM_DISPLAYFREQUENCY), 5)
DllStructSetData($DEVMODE, 4, $i_Width, 2)
DllStructSetData($DEVMODE, 4, $i_Height, 3)
DllStructSetData($DEVMODE, 4, $i_BitsPP, 1)
DllStructSetData($DEVMODE, 4, $i_RefreshRate, 5)
$B = DllCall("user32.dll", "int", "ChangeDisplaySettings", "ptr", DllStructGetPtr($DEVMODE), "int", $CDS_TEST)
If @error Then
$B = -1
Else
$B = $B
EndIf
Select
Case $B = $DISP_CHANGE_RESTART
$DEVMODE = ""
Return 2
Case $B = $DISP_CHANGE_SUCCESSFUL
DllCall("user32.dll", "int", "ChangeDisplaySettings", "ptr", DllStructGetPtr($DEVMODE), "int", $CDS_UPDATEREGISTRY)
DllCall("user32.dll", "int", "SendMessage", "hwnd", $HWND_BROADCAST, "int", $WM_DISPLAYCHANGE, _
"int", $i_BitsPP, "int", $i_Height * 2 ^ 16 + $i_Width)
$DEVMODE = ""
Return 1
Case Else
$DEVMODE = ""
SetError(1)
Return $B
EndSelect
EndIf
EndFunc ;==>_ChangeScreenRes
原帖由 仙乃日 于 2010-8-5 16:33 发表 http://bbs.wuyou.net/images/common/back.gif
谢谢解答!要判断是否已经正确加载显示驱动读取HKEY_LOCAL_MACHINE\HARDWARE下的信息应该也行的。
可是对于CRT显示器,最大分辨率应该不是最佳的,不知道有啥办法区分CRT和LCD?
本人没有很好的方法,就是看看有没有刷新率85或以上的,LCD基本不会有85以上的刷新率。
所以本人这个工具只能为CRT提供一个合理可用的分辨率,且CRT也没有最佳分辨率这样的概念,因为不同人、不要的要求在同一显示器的可能不同,
如从事PS或大版面排版工作的人可能需要更大的分辨率,而有些人可能眼力不好,需要字体大些,就用较小的分辨率。
[ 本帖最后由 lxl1638 于 2010-8-5 19:33 编辑 ]
回复 #245 lxl1638 的帖子
嗯有点明白你的方法啦。自己更改下AU3代码也可以实现你的方法。 不知道everest是如何获取这些信息的。everest的方法本人不知道,但读取 EDID 是可以取得这些信息的,本人在一个相关帖子中帖有关 EDID (Extended display identification data -- 扩展显示信息数据)
的资料。
另,这个 AOC 显示器有点怪,不知是 EDID 数据有错,还是 AOC 本身做假,EDID 数据计算出来的是21',但 AOC 标明是23'
[ 本帖最后由 lxl1638 于 2010-8-5 20:24 编辑 ] 原帖由 lxl1638 于 2010-8-5 20:19 发表 http://bbs.wuyou.net/images/common/back.gif
everest的方法本人不知道,但读取 EDID 是可以取得这些信息的,本人在一个相关帖子中帖有关 EDID (Extended display identification data -- 扩展显示信息数据)
的资料。
另,这个 AOC 显示器有点怪,不知是...
这个机器的EDID信息如下:
"EDID"=hex:00,ff,ff,ff,ff,ff,ff,00,05,e3,30,23,1f,20,00,00,09,13,01,03,68,2f,\
1a,78,2a,35,85,a6,56,48,9a,24,12,50,54,bf,ef,00,61,4c,81,80,81,8a,81,8c,95,\
00,81,40,71,4f,b3,00,02,3a,80,18,71,38,2d,40,58,2c,45,00,dc,0c,11,00,00,1e,\
00,00,00,fd,00,38,4b,18,50,11,00,0a,20,20,20,20,20,20,00,00,00,fc,00,32,33,\
33,30,56,0a,20,20,20,20,20,20,20,00,00,00,ff,00,51,32,31,39,32,4a,41,30,30,\
38,32,32,33,00,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00
自己刚才测量了一下 显示尺寸约为51.3cm*28.7cm。应该是EDID的信息有误。 V1.2.2010.0809特别版:
http://bbs.wuyou.net/images/attachicons/rar.gif AutoDisplay.rar (11.51 KB)
http://bbs.wuyou.net/data/attachment/forum/20100809_426735e82b20e05be9b3loeo3t1lg8Mo.png
[ 本帖最后由 lxl1638 于 2010-8-9 11:29 编辑 ] 选中显示为1366*768,可实际却设置为1360*768,何解?
刚发贴就看到新版了,下载试试 我的昂达780主板几个PE加载显卡驱动都不正常,显示如下图。手动设置宽屏1440*900分辨率,也无法正常显示。用备份的本机显卡驱动在PE中手动加载驱动也不行。现在只能用默认的1024*768的分辨率。
原帖由 lb9433 于 2010-8-9 12:31 发表 http://bbs.wuyou.net/images/common/back.gif
我的昂达780主板几个PE加载显卡驱动都不正常,显示如下图。手动设置宽屏1440*900分辨率,也无法正常显示。用备份的本机显卡驱动在PE中手动加载驱动也不行。现在只能用默认的1024*768的分辨率。
96686
这显卡首先需要dx,然后还需要.net才行吧?
不装驱动可用 EVEREST 检测下视频支持分辨率,然后手动设置,比如
pecmd disp w1400h1050b16f1 原帖由 玄天 于 2010-8-9 15:26 发表 http://bbs.wuyou.net/images/common/back.gif
这显卡首先需要dx,然后还需要.net才行吧?
不装驱动可用 EVEREST 检测下视频支持分辨率,然后手动设置,比如
pecmd disp w1400h1050b16f1
他的显示设备带**!号了,估计工具也无能为力。 原帖由 lxl1638 于 2010-8-9 15:28 发表 http://bbs.wuyou.net/images/common/back.gif
他的显示设备带**!号了,估计工具也无能为力。
可以的,这个所谓的视频支持格式其实是受控制台驱动支持的,所以我才建议你加入一个1Hz的刷新率 原帖由 queyao 于 2010-8-9 11:47 发表 http://bbs.wuyou.net/images/common/back.gif
选中显示为1366*768,可实际却设置为1360*768,何解?
刚发贴就看到新版了,下载试试
本人也不明白,16:9的显示器有 1360*768、1366*768 和 1368*768 这三个很接近的分辨率,
在 AutoDisplay 中,先将选中的分辨率与系统支持的分辨率比较,发现与那个最接近就用那个。
如你选中了1366*768,但你的系统不支持1366*768,也没有1368*768,
发现系统存在与1366*768最接近的1360*768,就使用1360*768。
这三个分辨率都属于16:9分辨率,但比值不完全等于19:9
19/9=1.7777777777777777777777777777778
1360/768=1.7708333333333333333333333333333
1366/768=1.7786458333333333333333333333333
1368/768=1.78125
从中也以看出16:9显示器的混乱,晶板切割时出现的混乱。
[ 本帖最后由 lxl1638 于 2010-8-9 15:48 编辑 ] 原帖由 玄天 于 2010-8-9 15:38 发表 http://bbs.wuyou.net/images/common/back.gif
可以的,这个所谓的视频支持格式其实是受控制台驱动支持的,所以我才建议你加入一个1Hz的刷新率
没有用的,他宽屏显示器在这种情况下只能使用4:3的分辨率,你试试只支持1Hz的刷新率能否列出宽屏分辨率?
不能,绝对不能,看下图。在没有驱动支持情况下,任何系统只能支持(列出)4:3分辨率。 原帖由 lxl1638 于 2010-8-9 15:38 发表 http://bbs.wuyou.net/images/common/back.gif
本人也不明白,16:9的显示器有 1360*768、1366*768 和 1368*768 这三个很接近的分辨率,
在 AutoDisplay 中,先将选中的分辨率与系统支持的分辨率比较,发现与那个最接近就用那个。
如你选中了1366*768, ...
查了一下,本质是因为1366*768这是一个非标准分辨率,1366不能被8整除。
一些老显卡,以及用vga线输出时,都不能使用1366*768这个分辨率。1360和1368是两个最接近1366的能被8整除的数 原帖由 lxl1638 于 2010-8-9 15:45 发表 http://bbs.wuyou.net/images/common/back.gif
没有用的,他宽屏显示器在这种情况下只能使用4:3的分辨率,你试试只支持1Hz的刷新率能否列出宽屏分辨率?
不能,绝对不能,看下图。在没有驱动支持情况下,任何系统只能支持(列出)4:3分辨率。
不是没用,你那截图才没用(对美装显卡驱动的宽屏),我也是在使用 EVEREST 测试后才知道(PE3中未安装显卡也没有安装显示器驱动)并且也正常使用 1400x1050 的分辨率了(可惜仅支持16位色深)现在就是在该分辨率下发的帖,http://bbs.wuyou.net/forum.php?mod=viewthread&tid=173387&extra=page%3D2 这个帖子中的wim启动后会自动设置为该分辨率
[ 本帖最后由 玄天 于 2010-8-9 16:35 编辑 ] OK!用这个特别版,我的这台本本自动设置成功了! 原帖由 玄天 于 2010-8-9 16:32 发表 http://bbs.wuyou.net/images/common/back.gif
不是没用,你那截图才没用(对美装显卡驱动的宽屏),我也是在使用 EVEREST 测试后才知道(PE3中未安装显卡也没有安装显示器驱动)并且也正常使用 1400x1050 的分辨率了(可惜仅支持16位色深)现在就是在该分 ...
1400*1050 不是宽屏分辨率,是正规的4:3分辨率,很多以前的CRT显示器在没有驱动支持下都可以用上这个分辨率的。
本人的17'CRT就是这样,无显示驱动的PE中也可以设置成1024*768或1400*1050。
没有显示驱动的情况下,就只支持4:3的分辨率,有些显示器可以上到1400*1050,绝大多数都能上1024*768
[ 本帖最后由 lxl1638 于 2010-8-9 19:10 编辑 ] 使用了最新版的PECMD的PE,在我的上网本+外接LCD上,安装显卡驱动之后,外接LCD全部显示超频而不能使用,即使是用显示属性或者楼主的这个工具将刷新率调整为60HZ、分辨率改为1280*1024,外接LCD仍然显示超频而无法显示桌面内容——这个工具检测和自动设置的是刷新率85HZ、分辨率1600*1200。 原帖由 lxl1638 于 2010-8-9 19:09 发表 http://bbs.wuyou.net/images/common/back.gif
1400*1050 不是宽屏分辨率,是正规的4:3分辨率,很多以前的CRT显示器在没有驱动支持下都可以用上这个分辨率的。
本人的17'CRT就是这样,无显示驱动的PE中也可以设置成1024*768或1400*1050。
没有显示驱动 ...
虽然并非16:10,不过对于22“显示器来说,此分辨率还是比1280*1024的宽频顺眼些 原帖由 玄天 于 2010-8-9 20:03 发表 http://bbs.wuyou.net/images/common/back.gif
虽然并非16:10,不过对于22“显示器来说,此分辨率还是比1280*1024的宽频顺眼些
问题是没有驱动支持下,根本无法确认那个分辨率是最佳的,所以在这种情况下不可能提供推荐设置,因为无法确定推荐设置。 原帖由 xianglang 于 2010-8-9 19:34 发表 http://bbs.wuyou.net/images/common/back.gif
使用了最新版的PECMD的PE,在我的上网本+外接LCD上,安装显卡驱动之后,外接LCD全部显示超频而不能使用,即使是用显示属性或者楼主的这个工具将刷新率调整为60HZ、分辨率改为1280*1024,外接LCD仍然显示超频而无 ...
你已经提到其它工具也不行,那就无法了。 原帖由 lxl1638 于 2010-8-9 22:17 发表 http://bbs.wuyou.net/images/common/back.gif
问题是没有驱动支持下,根本无法确认那个分辨率是最佳的,所以在这种情况下不可能提供推荐设置,因为无法确定推荐设置。
不需要自动设置,加个1Hz就是为了没驱动时手动设置方便,懒得去打命令行吗:( 原帖由 玄天 于 2010-8-9 22:49 发表 http://bbs.wuyou.net/images/common/back.gif
不需要自动设置,加个1Hz就是为了没驱动时手动设置方便,懒得去打命令行吗:(
你选择刷新率自动试试。
刷新率中最下面那个。
好象本人曾考虑是这样的,有驱动的LCD选择自动时定为60,有驱动的CRT找一个85左右的系统支持的刷新率;无驱动时刷新率选择为1Hz。
如果不行,本人再开再改一下。
[ 本帖最后由 lxl1638 于 2010-8-9 22:57 编辑 ] 我觉得有必要加个强制分辨率的功能,毕竟不是每个显示器都能被识别出来,这时候强制分辨率就很有必要了。 原帖由 lxl1638 于 2010-8-9 22:19 发表 http://bbs.wuyou.net/images/common/back.gif
你已经提到其它工具也不行,那就无法了。
我怀疑是不是你的新版PECMD内置的显示器自动刷新造成的,我有时间换回之前的PECMD版本试试。
经过试验,换回PECMD-V3.9.2010.0616版本,问题消失,基本可以肯定是新版PECMD的显示自动设置导致的问题。
[ 本帖最后由 xianglang 于 2010-8-10 05:19 编辑 ] 原帖由 lxl1638 于 2010-8-9 22:54 发表 http://bbs.wuyou.net/images/common/back.gif
你选择刷新率自动试试。
刷新率中最下面那个。
好象本人曾考虑是这样的,有驱动的LCD选择自动时定为60,有驱动的CRT找一个85左右的系统支持的刷新率;无驱动时刷新率选择为1Hz。
如果不行,本人再开再改一下。
自动不行,不明白为啥:(