Board logo

标题: 批处理或者vbs如何获取当前分辨率【讨论】 [打印本页]

作者: lwb1978     时间: 2007-7-8 16:38    标题: 批处理或者vbs如何获取当前分辨率【讨论】
获取后并将结果写入txt文件。
谢谢

Last edited by lwb1978 on 2007-7-9 at 06:02 PM ]

作者: ccwan     时间: 2007-7-8 18:58
可以通过查询注册表来实现,找到的是16进制的,自己转换一下吧。
@echo off
for /f "skip=6 tokens=3" %%i in ('reg query HKCC\SYSTEM /s ^|findstr Resolution') do echo %%i
pause

作者: zh159     时间: 2007-7-9 00:25
BAT的:
@echo off
setlocal EnableDelayedExpansion
for /f "tokens=3" %%i in ('reg query HKCC\SYSTEM /s ^|findstr Resolution') do (
set /a Num+=1
if !Num! LEQ 2 (
set /a str=%%i
echo !str!
)
)
pause

set /a str=%%i 将16进制数据转为10进制
reg HKCC\SYSTEM /s|findstr Resolution 出来的第一第二个数据才是当前分辨率

VBS的:

Set WshShell = WScript.CreateObject("WScript.Shell")

XResolution = WshShell.RegRead("HKEY_CURRENT_CONFIG\System\CurrentControlSet\Control\VIDEO\{D7F18ECC-5E3A-474C-9877-3BF7E5FE1A25}\0000\DefaultSettings.XResolution")
YResolution = WshShell.RegRead("HKEY_CURRENT_CONFIG\System\CurrentControlSet\Control\VIDEO\{D7F18ECC-5E3A-474C-9877-3BF7E5FE1A25}\0000\DefaultSettings.YResolution")

msgbox XResolution & "&" & YResolution


Last edited by zh159 on 2007-7-9 at 04:07 PM ]

作者: lwb1978     时间: 2007-7-9 01:13
问题解决,谢谢所有楼上的朋友

Last edited by lwb1978 on 2007-7-9 at 01:26 AM ]

作者: ccwan     时间: 2007-7-9 07:52
re zh159
我每次更改分辨率后,使用代码测试,发现前4行都不是当前分辨率,所以才有2楼的代码。

作者: ccwan     时间: 2007-7-9 08:10
楼主可以将分辨率改变,再用zh159的代码看一下,就知道我所说非虚了。

作者: everest79     时间: 2007-7-9 09:16
for /f %%i in ('"wmic desktopmonitor get screenwidth,screenheight /value"') do set %%i
echo %screenwidth% %screenheight%

作者: slore     时间: 2007-7-9 11:18
{D7F18ECC-5E3A-474C-9877-3BF7E5FE1A25}对不同的电脑可能不一样

作者: tyh     时间: 2007-7-9 12:42
偶只能加两分,不然再多加点。

作者: lwb1978     时间: 2007-7-9 18:00
本人测试了7楼的代码,不知道为什么我的电脑无法用wmic desktopmonitor 获取到
screenwidth,screenheight ,screenwidth,screenheight 都是空的。
另外回ccwan大大,我现在采用的是注册表获取法,电脑在更改分辨率后,从注册表中获取到的当前分辨率的确只有最上面的两行才是当前的。所以我采用的办法是XResolution和YResolution分别获取,在for中用goto只循环一次,只读取第一条注册表:
For /f "tokens=3" %%i in ('Reg query HKCC\SYSTEM\CurrentControlSet\Control\VIDEO /s ^|findstr "XResolution"') do (
Set "屏幕宽=%%i"
Goto 获取屏幕宽完成
)
)
:获取屏幕宽完成

作者: zh159     时间: 2007-7-9 18:04
Originally posted by ccwan at 2007-7-9 07:52:
re zh159
我每次更改分辨率后,使用代码测试,发现前4行都不是当前分辨率,所以才有2楼的代码。

我试了四台机,其中一台是第一、二行,两台是后两行,一台是四行都一样(只有四行)

Originally posted by slore at 2007-7-9 11:18:
{D7F18ECC-5E3A-474C-9877-3BF7E5FE1A25}对不同的电脑可能不一样

确实如此,我有一台机有三个不同的项
看来还是wmic方便些,如果是HTA,用window.screen.width、window.screen.height获取

作者: lwb1978     时间: 2007-7-9 18:25
找到为什么不用直接用7楼代码的原因了,我直接用wmic desktopmonitor get screenwidth,screenheight /value,是这样显示的:
ScreenHeight=768
ScreenWidth=1024


ScreenHeight=
ScreenWidth=
估计是我的显示有电视输出的原因,会得出两个空值

作者: ccwan     时间: 2007-7-9 18:42
7楼代码改成这样:
@echo off
echo 当前分辨率为:
for /f %%i in ('"wmic desktopmonitor get screenwidth,screenheight /value"') do set %%i>nul
echo %screenwidth% %screenheight%
pause>nul

作者: lwb1978     时间: 2007-7-9 18:48
re ccwan
因为我的电脑会取到两个分辨率的值,一个是实际的,下边一个是空的,所以在for过后,最终%screenwidth% %screenheight%得到的是空值,所以我测试了下,下面的代码可行:
for /f "tokens=2 delims==" %%i in ('"wmic desktopmonitor get screenwidth /value"') do (
Set "屏幕宽=%%i"
if not "%%i!"=="!" goto OK
)
:Ok
echo %屏幕宽%

也就是分别获取高和宽

作者: ccwan     时间: 2007-7-9 18:59
re lwb1978
关于不同系统有所差异的问题,我领教很多了,只能具体情况具体分析了。

作者: zh159     时间: 2007-7-9 19:29
Originally posted by lwb1978 at 2007-7-9 18:48:
re ccwan
因为我的电脑会取到两个分辨率的值,一个是实际的,下边一个是空的,所以在for过后,最终%screenwidth% %screenheight%得到的是空值,所以我测试 ...

不用两次读取:
@echo off
setlocal EnableDelayedExpansion
echo 当前分辨率为:
for /f %%i in ('"wmic desktopmonitor get screenwidth,screenheight /value"') do (
set %%i>nul
if not "!screenwidth!" == "" set 屏幕宽=!screenwidth!&&set 屏幕高=!screenheight!
)
echo %屏幕宽% %屏幕高%
pause>nul

作者: lwb1978     时间: 2007-7-9 19:54
re zh159
测试了你的代码,获取不到。下面是我的运行结果:

D:\>setlocal EnableDelayedExpansion

D:\>echo 当前分辨率为:
当前分辨率为:

D:\>for /F %i in ('"wmic desktopmonitor get screenwidth,screenheight /value"') do (
set %i 1>nul
if not "!screenwidth!" == "" set 屏幕宽=!screenwidth! && set 屏幕高=!screenheight!
)

D:\>(
set
1>nul
if not "!screenwidth!" == "" set 屏幕宽=!screenwidth! && set 屏幕高=!screenheight!
)

D:\>(
set
1>nul
if not "!screenwidth!" == "" set 屏幕宽=!screenwidth! && set 屏幕高=!screenheight!
)

D:\>(
set ScreenHeight=768
1>nul
if not "!screenwidth!" == "" set 屏幕宽=!screenwidth! && set 屏幕高=!screenheight!
)

D:\>(
set ScreenWidth=1024
1>nul
if not "!screenwidth!" == "" set 屏幕宽=!screenwidth! && set 屏幕高=!screenheight!
)

D:\>(
set
1>nul
if not "!screenwidth!" == "" set 屏幕宽=!screenwidth! && set 屏幕高=!screenheight!
)

D:\>(
set
1>nul
if not "!screenwidth!" == "" set 屏幕宽=!screenwidth! && set 屏幕高=!screenheight!
)

D:\>(
set ScreenHeight=
1>nul
if not "!screenwidth!" == "" set 屏幕宽=!screenwidth! && set 屏幕高=!screenheight!
)

D:\>(
set ScreenWidth=
1>nul
if not "!screenwidth!" == "" set 屏幕宽=!screenwidth! && set 屏幕高=!screenheight!
)

D:\>(
set
1>nul
if not "!screenwidth!" == "" set 屏幕宽=!screenwidth! && set 屏幕高=!screenheight!
)

D:\>(
set
1>nul
if not "!screenwidth!" == "" set 屏幕宽=!screenwidth! && set 屏幕高=!screenheight!
)

D:\>echo
ECHO 处于打开状态。

D:\>pause1>nul

作者: qq43142691     时间: 2008-1-3 07:20
当前分辨率为:

分析 Mof 文件: C:\WINDOWS\system32\wbem\Cli.mof(阶段错误 - 2)
计算机返回错误 0x8004402f
环境变量 Please 没有定义
ECHO 处于关闭状态。

作者: Delwo     时间: 2008-1-3 09:46
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set colDesktops = objWMIService.InstancesOf("Win32_DesktopMonitor")

For Each objDesktop In colDesktops
WScript.Echo "桌面宽度:" & objDesktop.ScreenWidth
WScript.Echo "桌面高度:" & objDesktop.ScreenHeight
Next

作者: electronixtar     时间: 2008-1-4 21:47
都弄复杂了

1.vbs:

set oIE = CreateObject("htmlfile")
with oIE.parentWindow.screen
msgbox .width & "×" & .height
end with

作者: U0erXT     时间: 2008-2-11 20:56
先拿回去用用...

作者: U0erXT     时间: 2008-2-11 21:07
Originally posted by everest79 at 2007-7-9 09:16:
for /f %%i in ('"wmic desktopmonitor get screenwidth,screenheight /value"') do set %%i
echo %screenwidth% %screenheight%



还有个疑问,就是:
为什么非要 echo off 呢? 否则就出现"ECHO 处于打开状态。"??
为什么呢?