中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 批处理或者vbs如何获取当前分辨率【讨论】
« [1] [2] »
作者:
标题: 批处理或者vbs如何获取当前分辨率【讨论】 上一主题 | 下一主题
lwb1978
初级用户




积分 72
发帖 26
注册 2007-5-17
状态 离线
『楼 主』:  批处理或者vbs如何获取当前分辨率【讨论】

获取后并将结果写入txt文件。
谢谢

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

2007-7-8 16:38
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
ccwan
金牌会员




积分 2725
发帖 1160
注册 2006-9-23
来自 河北廊坊
状态 离线
『第 2 楼』:  

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




三人行,必有吾师焉。   学然后知不足,教然后知困,然后能自强也。
2007-7-8 18:58
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 3 楼』:  

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 ]



2007-7-9 00:25
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lwb1978
初级用户




积分 72
发帖 26
注册 2007-5-17
状态 离线
『第 4 楼』:  

问题解决,谢谢所有楼上的朋友

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

2007-7-9 01:13
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
ccwan
金牌会员




积分 2725
发帖 1160
注册 2006-9-23
来自 河北廊坊
状态 离线
『第 5 楼』:  

re zh159
我每次更改分辨率后,使用代码测试,发现前4行都不是当前分辨率,所以才有2楼的代码。



三人行,必有吾师焉。   学然后知不足,教然后知困,然后能自强也。
2007-7-9 07:52
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
ccwan
金牌会员




积分 2725
发帖 1160
注册 2006-9-23
来自 河北廊坊
状态 离线
『第 6 楼』:  

楼主可以将分辨率改变,再用zh159的代码看一下,就知道我所说非虚了。



三人行,必有吾师焉。   学然后知不足,教然后知困,然后能自强也。
2007-7-9 08:10
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
everest79
金牌会员

一叶枝头,万树皆春



积分 2564
发帖 1127
注册 2006-12-25
状态 离线
『第 7 楼』:  

for /f %%i in ('"wmic desktopmonitor get screenwidth,screenheight /value"') do set %%i
echo %screenwidth% %screenheight%

   此帖被 +5 点积分      点击查看详情   
评分人:【 slore 分数: +3  时间:2007-7-9 11:16
评分人:【 tyh 分数: +2  时间:2007-7-9 12:42


2007-7-9 09:16
查看资料  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 8 楼』:  

{D7F18ECC-5E3A-474C-9877-3BF7E5FE1A25}对不同的电脑可能不一样

2007-7-9 11:18
查看资料  发短消息 网志   编辑帖子  回复  引用回复
tyh
初级用户





积分 80
发帖 43
注册 2007-4-21
状态 离线
『第 9 楼』:  

偶只能加两分,不然再多加点。

2007-7-9 12:42
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lwb1978
初级用户




积分 72
发帖 26
注册 2007-5-17
状态 离线
『第 10 楼』:  

本人测试了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 获取屏幕宽完成
  )
)
:获取屏幕宽完成

2007-7-9 18:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 11 楼』:  



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

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

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

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



2007-7-9 18:04
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lwb1978
初级用户




积分 72
发帖 26
注册 2007-5-17
状态 离线
『第 12 楼』:  

找到为什么不用直接用7楼代码的原因了,我直接用wmic desktopmonitor get screenwidth,screenheight /value,是这样显示的:
ScreenHeight=768
ScreenWidth=1024


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

2007-7-9 18:25
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
ccwan
金牌会员




积分 2725
发帖 1160
注册 2006-9-23
来自 河北廊坊
状态 离线
『第 13 楼』:  

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




三人行,必有吾师焉。   学然后知不足,教然后知困,然后能自强也。
2007-7-9 18:42
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lwb1978
初级用户




积分 72
发帖 26
注册 2007-5-17
状态 离线
『第 14 楼』:  

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 %屏幕宽%

也就是分别获取高和宽

2007-7-9 18:48
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
ccwan
金牌会员




积分 2725
发帖 1160
注册 2006-9-23
来自 河北廊坊
状态 离线
『第 15 楼』:  

re lwb1978
关于不同系统有所差异的问题,我领教很多了,只能具体情况具体分析了。



三人行,必有吾师焉。   学然后知不足,教然后知困,然后能自强也。
2007-7-9 18:59
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: