标题: [系统相关] [已解决]批处理能否智能检测当前是液晶显示器,还是传统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 编辑
- dc.exe -refresh=60
-
- @echo off & setlocal EnableDelayedExpansion
- for /f "skip=1 tokens=14,15 " %%i in ('wmic DESKTOPMONITOR') do (
- set /a n+=1
- set nW!n!=%%j
- set nH!n!=%%i
- )
- echo !nw1! , !nh1!
-
- pause
-
-
- if !nw1!==1024 (if !nh1!==768 (dc.exe -refresh=75))
- if !nw1!==1440 (if !nh1!==900 (dc.exe -refresh=60))
复制代码
作者: ygqiang 时间: 2011-10-13 23:32
本帖最后由 ygqiang 于 2011-10-14 18:37 编辑
- dc.exe -refresh=60
-
- @echo off & setlocal EnableDelayedExpansion
- for /f "skip=1 tokens=14,15 " %%i in ('wmic DESKTOPMONITOR') do (
- set /a n+=1
- set nW!n!=%%j
- set nH!n!=%%i
- )
- echo !nw1! , !nh1!
-
- pause
-
-
- set /a wh=!nw1!+!nh1!
-
- set /a whini1=1024+768
-
- set /a whini2=1440+900
-
- if !wh! == !whini1! (dc.exe -refresh=75)
-
- if !wh! == !whini2! (dc.exe -refresh=60)
复制代码
作者: ygqiang 时间: 2011-10-13 23:33
本帖最后由 ygqiang 于 2011-10-14 18:47 编辑
- dc.exe -refresh=60
- pause
-
- @echo off
- setlocal enabledelayedexpansion
- for /f "tokens=2 delims==" %%i in ('Wmic DesktopMonitor Get ScreenWidth /Value ^| find "="') do (
- set w=%%i
- set w=!w:~0,4!
- if !w! equ 1024 (
- dc.exe -refresh=75
- ) else if !w! equ 1440 (
- dc.exe -refresh=60
- )
- )
复制代码
作者: ygqiang 时间: 2011-10-13 23:34
本帖最后由 ygqiang 于 2011-10-15 01:10 编辑
- ;刷新率
- for /f "tokens=2 delims==" %%i in ('Wmic DesktopMonitor Get ScreenWidth^,ScreenHeight /Value^|find /i "ScreenWidth"') do set w=%%i
- for /f "tokens=2 delims==" %%i in ('Wmic DesktopMonitor Get ScreenWidth^,ScreenHeight /Value^|find /i "ScreenHeight"') do set h=%%i
- echo %w%%h%
- if %w%%h%==1024768 dc.exe -refresh=75
- 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 - @echo off
- setlocal enabledelayedexpansion
- for /f "tokens=2 delims==" %%i in ('Wmic DesktopMonitor Get ScreenWidth /Value ^| find "="') do (
- set w=%%i
- set w=!w:~0,4!
- if !w! equ 1024 (
- dc.exe -refresh=75
- ) else if !w! equ 1440 (
- dc.exe -refresh=60
- )
- goto :eof
- )
复制代码
作者: ygqiang 时间: 2011-10-14 11:14
本帖最后由 ygqiang 于 2011-10-15 01:30 编辑
上面说的3个方法,都可以解决问题。
作者: ygqiang 时间: 2011-10-15 01:11
- ;刷新率
- setlocal EnableDelayedExpansion
- for /f "skip=1 tokens=14,15 " %%i in ('wmic DESKTOPMONITOR') do (
- set /a n+=1
- set nW!n!=%%j
- set nH!n!=%%i
- )
- echo !nw1! , !nh1!
-
- if %nw1%%nh1%==1024768 dc.exe -refresh=75
- if %nw1%%nh1%==1440900 dc.exe -refresh=60
复制代码
这个也可以。
作者: ygqiang 时间: 2011-10-15 01:12
- dc.exe -refresh=75
-
- @echo on&setlocal EnableDelayedExpansion
- set "w="
- for /f "tokens=2 delims==" %%i in ('Wmic DesktopMonitor Get ScreenWidth^,ScreenHeight
- /Value^|find /i "="') do (
- set /a n+=1
- set /a w=!w!+%%i
- if !n! == 2 goto :ex
- )
- :ex
- echo 现在的值是: !w!
- pause
-
-
- set /a wh1=1024+768
-
- set /a wh2=1440+900
-
- set /a wh3=1280+1024
-
- if !w! == !wh1! (dc.exe -refresh=75)
- if !w! == !wh2! (dc.exe -refresh=60)
- if !w! == !wh3! (dc.exe -refresh=60)
复制代码
这个代码,说是有容错功能。
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |