Board logo

标题: [系统相关] [已解决]批处理能否智能检测当前是液晶显示器,还是传统CRT显示器? [打印本页]

作者: ygqiang    时间: 2011-10-12 19:43     标题: [已解决]批处理能否智能检测当前是液晶显示器,还是传统CRT显示器?

本帖最后由 ygqiang 于 2011-10-14 11:15 编辑

请教个问题:

能否智能检测当前是液晶显示器,还是传统CRT显示器?

如果是液晶显示器,就设置刷新率为60hz
如果是CRT显示器,就设置刷新率为75hz

是否可以实现这个功能?

请给出代码, 谢谢
作者: ygqiang    时间: 2011-10-12 22:53

还有个要求:

只要运行一下这种代码,就自动判断显示器类型,并对刷新率做相应设置。

不需要手动选择、设置的。
作者: ygqiang    时间: 2011-10-13 00:34

本帖最后由 ygqiang 于 2011-10-13 00:58 编辑

dc.exe -refresh=60
dc.exe -refresh=75

这2个,可以设置分辨率。

现在的关键问题是:用什么方法,可以智能判断当前显示器是CRT还是液晶?

然后结合dc.exe(专门用来设置刷新率的小程序),就可以很容易设置刷新率了。


有个额外要求是:运行一下代码,就自动判断显示器,然后自动设置刷新率(60或者75hz),不能弹出设置窗口啥的。
作者: ygqiang    时间: 2011-10-13 01:40

好吧,将问题简单化。

先判断,
如果分辨率是1024×768的,刷新率就设置成75
如果分辨率是1440*900的,刷新率就设置成60
如果不是这2种分辨率的,就不修改

这个要求,能否用bat结合dc.exe命令来实现?
作者: garyng    时间: 2011-10-13 19:16

回复 4# ygqiang


    楼主是否可以把全部问题集中在一个帖子里啊?
作者: ygqiang    时间: 2011-10-13 23:31

因为1楼的问题,判断显示器类型,用bat难以解决。

所以现在主要是解决4楼的问题。
作者: ygqiang    时间: 2011-10-13 23:32

本帖最后由 ygqiang 于 2011-10-14 18:37 编辑
  1. dc.exe -refresh=60
  2. @echo off & setlocal EnableDelayedExpansion
  3. for /f "skip=1 tokens=14,15 " %%i in ('wmic DESKTOPMONITOR') do (
  4. set /a n+=1
  5. set nW!n!=%%j
  6. set nH!n!=%%i
  7. )
  8. echo !nw1! , !nh1!
  9. pause
  10. if !nw1!==1024 (if !nh1!==768 (dc.exe -refresh=75))
  11. if !nw1!==1440 (if !nh1!==900 (dc.exe -refresh=60))
复制代码

作者: ygqiang    时间: 2011-10-13 23:32

本帖最后由 ygqiang 于 2011-10-14 18:37 编辑
  1. dc.exe -refresh=60
  2. @echo off & setlocal EnableDelayedExpansion
  3. for /f "skip=1 tokens=14,15 " %%i in ('wmic DESKTOPMONITOR') do (
  4. set /a n+=1
  5. set nW!n!=%%j
  6. set nH!n!=%%i
  7. )
  8. echo !nw1! , !nh1!
  9. pause
  10. set /a wh=!nw1!+!nh1!
  11. set /a whini1=1024+768
  12. set /a whini2=1440+900
  13. if !wh! == !whini1! (dc.exe -refresh=75)
  14. if !wh! == !whini2! (dc.exe -refresh=60)
复制代码

作者: ygqiang    时间: 2011-10-13 23:33

本帖最后由 ygqiang 于 2011-10-14 18:47 编辑
  1. dc.exe -refresh=60
  2. pause
  3. @echo off
  4. setlocal enabledelayedexpansion
  5. for /f "tokens=2 delims==" %%i in ('Wmic DesktopMonitor Get ScreenWidth /Value ^| find "="') do (
  6.     set w=%%i
  7.     set w=!w:~0,4!
  8.     if !w! equ 1024 (
  9.         dc.exe -refresh=75
  10.     ) else if !w! equ 1440 (
  11.         dc.exe -refresh=60
  12.     )
  13.     )
复制代码

作者: ygqiang    时间: 2011-10-13 23:34

本帖最后由 ygqiang 于 2011-10-15 01:10 编辑
  1. ;刷新率
  2. for /f "tokens=2 delims==" %%i in ('Wmic DesktopMonitor Get ScreenWidth^,ScreenHeight /Value^|find /i "ScreenWidth"') do set w=%%i
  3. for /f "tokens=2 delims==" %%i in ('Wmic DesktopMonitor Get ScreenWidth^,ScreenHeight /Value^|find /i "ScreenHeight"') do set h=%%i
  4. echo %w%%h%
  5. if %w%%h%==1024768 dc.exe -refresh=75
  6. if %w%%h%==1440900 dc.exe -refresh=60
复制代码
这个代码,有问题。运行以后,马上退出。

后面的bat代码都不能运行。
作者: ygqiang    时间: 2011-10-13 23:35

本帖最后由 ygqiang 于 2011-10-15 01:30 编辑

以上是3种解决方法。实际测试,都可以解决问题。

不知道这3种方法,都有什么优点与缺点呢?
作者: awk    时间: 2011-10-14 00:09

回复 7# ygqiang
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=2 delims==" %%i in ('Wmic DesktopMonitor Get ScreenWidth /Value ^| find "="') do (
  4.     set w=%%i
  5.     set w=!w:~0,4!
  6.     if !w! equ 1024 (
  7.         dc.exe -refresh=75
  8.     ) else if !w! equ 1440 (
  9.         dc.exe -refresh=60
  10.     )
  11.     goto :eof
  12. )
复制代码

作者: ygqiang    时间: 2011-10-14 11:14

本帖最后由 ygqiang 于 2011-10-15 01:30 编辑

上面说的3个方法,都可以解决问题。
作者: ygqiang    时间: 2011-10-15 01:11

  1. ;刷新率
  2. setlocal EnableDelayedExpansion
  3. for /f "skip=1 tokens=14,15 " %%i in ('wmic DESKTOPMONITOR') do (
  4. set /a n+=1
  5. set nW!n!=%%j
  6. set nH!n!=%%i
  7. )
  8. echo !nw1! , !nh1!
  9. if %nw1%%nh1%==1024768 dc.exe -refresh=75
  10. if %nw1%%nh1%==1440900 dc.exe -refresh=60
复制代码
这个也可以。
作者: ygqiang    时间: 2011-10-15 01:12

  1. dc.exe -refresh=75
  2. @echo on&setlocal EnableDelayedExpansion
  3. set "w="
  4. for /f "tokens=2 delims==" %%i in ('Wmic DesktopMonitor Get ScreenWidth^,ScreenHeight
  5. /Value^|find /i "="') do  (
  6.      set /a n+=1
  7.      set /a w=!w!+%%i
  8.      if !n! == 2 goto :ex
  9.   )
  10. :ex
  11. echo  现在的值是: !w!
  12. pause
  13. set /a wh1=1024+768
  14. set /a wh2=1440+900
  15. set /a wh3=1280+1024
  16. if !w! == !wh1! (dc.exe -refresh=75)
  17. if !w! == !wh2! (dc.exe -refresh=60)
  18. if !w! == !wh3! (dc.exe -refresh=60)
复制代码
这个代码,说是有容错功能。




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2