[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[注册表类] 如何获取多显示器下,仍在连接的最大显示器的分辨率?(已解决60%)

本帖最后由 pcl_test 于 2016-12-11 19:13 编辑

如果获取多显示器下,仍在连接的最大显示器的分辨率?(已解决60%)


只要是电脑曾经连接过的显示器,就会在注册表里留下痕迹,且就算该显示器已经断开了,痕迹仍然在。
以WIN7以及WIN10为例是在HKLM\SYSTEM\CurrentControlSet\Hardware Profiles\UnitedVideo\CONTROL\VIDEO\{84F85163-5FAD-4F8A-9541-40996D6481C1}
({84F85163-5FAD-4F8A-9541-40996D6481C1}这个名字不同电脑,不同)

我的电脑上外接了曾经外接了一台显示器,此时已断开。该注册表如下
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Hardware Profiles\UnitedVideo\CONTROL\VIDEO\{84F85163-5FAD-4F8A-9541-40996D6481C1}\0000]
"Attach.ToDesktop"=dword:00000001
"DefaultSettings.XResolution"=dword:00000556
"DefaultSettings.YResolution"=dword:00000300
备注此处分辨率是556*330,是十六进制的,十进制是1366*768

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Hardware Profiles\UnitedVideo\CONTROL\VIDEO\{84F85163-5FAD-4F8A-9541-40996D6481C1}\0001]
"Attach.ToDesktop"=dword:00000000
"DefaultSettings.XResolution"=dword:00000780
"DefaultSettings.YResolution"=dword:00000438
备注此处分辨率是780*438,是十六进制的,十进制是1920*1080

其中"Attach.ToDesktop"=dword:00000001表示此显示器仍在连接状态,"Attach.ToDesktop"=dword:00000000表示此显示器已断开。

用以下代码可以获得1920*1080,但是1920*1080这台显示器断开了,获取的仍为1920*1080。
@echo off
for /f "tokens=1,3 eol=H skip=8" %%a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Hardware Profiles\UnitedVideo\CONTROL\VIDEO" /s') do (
  if /i "%%a"=="DefaultSettings.XResolution" (set /a X=%%b) else (
    if /i "%%a"=="DefaultSettings.YResolution" set /a Y=%%b
  )
)
echo "%X%"*"%Y%"
pause

有两个方式可行,但不知道怎么达到。(最好的方式是第2种,因为如果是笔记本,屏幕是可关闭的,而关闭时"Attach.ToDesktop"键值为0,但删除后,下次开启屏幕会出错)
1,用什么代码可以根据"Attach.ToDesktop"=dword:00000000是否为0,而删除该项,如上面就是删除
   [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Hardware Profiles\UnitedVideo\CONTROL\VIDEO\{84F85163-5FAD-4F8A-9541-40996D6481C1}\0001]
   这样再运行上面的代码就一定能获取有效的分辨率。

2,用"Attach.ToDesktop"=dword:00000000的0乘于"DefaultSettings.XResolution"=dword:00000780,等于0
   用"Attach.ToDesktop"=dword:00000001的1乘于"DefaultSettings.XResolution"=dword:00000556,等于1366
   1366>0,所以取1366
   这个代码不会编。

求助坛友前辈,谢谢了!!
1

评分人数

返回列表