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

[系统相关] 【已解决】求助批处理提取显示器的硬件信息

本帖最后由 locoman 于 2023-8-19 14:15 编辑

论坛中有一帖子《纯批处理获取硬件信息》,作者源码文件做得很好!!
http://www.bathome.net/viewthread.php?tid=38259

里面有很全很完整的硬件信息提取功能,一是,该bat文件内部有防修改加密措施,二是,我只需要提取显示器的硬件信息。

因此,我想对该bat文件有关显示器信息部分进行拆分剥离出来单独使用。
可是,我始终没有成功,在此,想请大佬帮我搞一下,以实现bat提取显示器硬件信息。
先谢谢了!!拜托!!

=================
只需要这个结果:
=================

关于显示器的详细信息如下:
    型号 ........... : HWP3121
    屏幕尺寸 ....... : 19 英寸
    生产日期 ....... : 2015 年 第 49 周
    屏幕大小 ....... : 43 厘米 × 24 厘米
    像素密度 ....... : 96 Dpi
    当前模式 ....... : 1600 x 900 (32 bit) (60 Hz)

==================

原帖子中源文件中源码(由于超过论坛限制,只贴出部分源码,完整的还敬请移步原帖子)

-------------------------------------
  1. echo.关于显示器的详细信息如下:>>!File!
  2. echo.>>!File!
  3. for /f "tokens=3" %%i in ('Reg Query "HKLM\System\CurrentControlSet\Enum\Display\!5!\!6!\Device Parameters" /v "Edid" 2^>nul') do (
  4. set Edid=%%i
  5. )
  6. if "%Edid%" == "" (for /f "tokens=3" %%i in ('Reg Query "HKLM\System\CurrentControlSet\Enum\Display\!5!" /s 2^>nul ^|findstr /i "Edid"') do (set Edid=%%i))
  7. if "%DisplayName%" == "" set DisplayName=!NoGet!
  8. echo.    型号 ........... : %DisplayName%>>!File!
  9. echo.>>!File!
  10. if not "%Edid%" == "" (
  11. set Yeardata=!Edid:~34,2!
  12. set Weekdata=!Edid:~32,2!
  13. set Longdata=!Edid:~42,2!
  14. set Widedata=!Edid:~44,2!
  15. set /a Weekdata=0X!Weekdata!*1
  16. set /a Longdata=0X!Longdata!*1
  17. set /a Widedata=0X!Widedata!*1
  18. set /a Yeardata=0X!Yeardata!*1+1990
  19. call :Division !Longdata! 2.54 Longdata.in
  20. call :Division !Widedata! 2.54 Widedata.in
  21. call :Times !Longdata.in! !Longdata.in! Longdata.in
  22. call :Times !Widedata.in! !Widedata.in! Widedata.in
  23. call :Addition !Longdata.in! !Widedata.in! Diagonal
  24. set "Code=CreateObject("Scripting.FileSystemObject").GetStandardStream(1).Write(sqr(!Diagonal!))(close)"
  25. for /f "delims=" %%i in ('Mshta "Vbscript:!Code!"') do set Screen.In=%%i
  26. for /f "tokens=1,2 delims=." %%i in ("!Screen.In!") do (
  27. set Screen.In=%%i
  28. set Screen.Io=%%j
  29. )
  30. set Screen.Io=!Screen.Io:~0,1!
  31. if !Screen.Io! geq 7 set /a Screen.In=!Screen.In!+1
  32. echo.    屏幕尺寸 ....... : !Screen.In! 英寸>>!File!
  33. echo.>>!File!
  34. echo.    生产日期 ....... : !Yeardata! 年 第 !Weekdata! 周>>!File!
  35. echo.>>!File!
  36. echo.    屏幕大小 ....... : !Longdata! 厘米 × !Widedata! 厘米>>!File!
  37. echo.>>!File!
  38. )
  39. if not defined PixelsPerXLogicalInch (set PixelsPerXLogicalInch=!NoGet!) else set PixelsPerXLogicalInch=!PixelsPerXLogicalInch! Dpi
  40. echo.    像素密度 ....... : %PixelsPerXLogicalInch%>>!File!
  41. echo.>>!File!
  42. echo.    当前模式 ....... : %Resolution%>>!File!
  43. if not "%CD-ROM.Name%" == "无" (
  44. echo.>>!File!
  45. echo.>>!File!
  46. echo.关于光驱的详细信息如下:>>!File!
  47. echo.>>!File!
  48. echo.  列出所有光驱: >>!File!
  49. echo.>>!File!
  50. echo.    盘符   类型       型号 >>!File!
  51. echo.>>!File!
  52. for /f  "skip=1 delims=" %%i in ('Wmic CdRom Get Name^,Drive^,Mediatype 2^>nul') do (
  53. set CdRom.0=%%i
  54. call :Exit
  55. if "!CdRom.0!" neq "" echo.    !CdRom.0!>>!File!
  56. )
  57. )
  58. echo.>>!File!
复制代码
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

不嫌麻烦就二次处理原来的bat的输出

TOP

  1. @echo off
  2. echo.关于显示器的详细信息如下:
  3. DxDiag /t /Whql:off dxdiag.txt
  4. for /f "tokens=2 delims=:" %%i in ('Findstr /IC:"Monitor Model:" Dxdiag.txt') do set "DisplayName=%%i"
  5. if /i "%DisplayName%"==" Unknown" for /f "tokens=2 delims=:" %%i in ('Findstr /IC:"Monitor Id:" Dxdiag.txt') do set "DisplayName=%%i"
  6. for /f "tokens=2" %%i in ('Wmic DesktopMonitor Get Availability^,PNPDeviceID 2^>nul') do set "PNPDeviceID=%%i"
  7. if "%DisplayName%"=="" for /f "delims=\ tokens=2" %%i in ("%PNPDeviceID%") do set DisplayName=%%i
  8. if "%DisplayName:~0,1%"==" " set DisplayName=%DisplayName:~1%
  9. if not "%DisplayName%"=="" set DisplayName=%DisplayName:/=-%
  10. echo.    型号 ........... : %DisplayName%
  11. for /f "tokens=2 delims=:" %%i in ('Findstr /IC:"Current Mode:" Dxdiag.txt') do if /i not "%%i"==" Unknown" set Resolution=%%i
  12. for /f "tokens=3" %%i in ('Reg Query "HKLM\System\CurrentControlSet\Enum\Display" /v "EDID" /s 2^>nul^|findstr /i "Edid"') do set Edid=%%i
  13. set /a Yeardata=0x%Edid:~34,2%+1990
  14. set /a Weekdata=0x%Edid:~32,2%
  15. set /a Longdata=0x%Edid:~42,2%
  16. set /a Widedata=0x%Edid:~44,2%
  17. echo.    生产日期 ....... : %Yeardata% 年 第 %Weekdata% 周
  18. set /a Diagonal=Longdata*Longdata+Weekdata*Widedata
  19. for /f "delims=" %%i in ('Mshta "Vbscript:CreateObject("Scripting.FileSystemObject").GetStandardStream(1).Write(sqr(%Diagonal%)/2.54)(close)"') do set Screen.In=%%i
  20. for /f "tokens=1,2 delims=." %%i in ("%Screen.In%") do set Screen.In=%%i&set Screen.Io=%%j
  21. set Screen.Io=%Screen.Io:~0,1%
  22. if %Screen.Io% geq 7 set /a Screen.In=%Screen.In%+1
  23. echo.    屏幕尺寸 ....... : %Screen.In% 英寸
  24. echo.    屏幕大小 ....... : %Longdata% 厘米 × %Widedata% 厘米
  25. for /f "skip=2 tokens=2 delims==" %%i in ('Wmic DesktopMonitor Get PixelsPerXLogicalInch /Value 2^>nul') do set PixelsPerXLogicalInch=%%i
  26. echo.    像素密度 ....... : %PixelsPerXLogicalInch% Dpi
  27. echo.    当前模式 ....... :%Resolution%
  28. pause
复制代码
1

评分人数

    • locoman: 感谢大佬的一直热情热心帮助指导,按照@Bat ...技术 + 1

TOP

回复 1# locoman


请参考Q-04把bat文件保存为ANSI编码:
https://mp.weixin.qq.com/s/Koje4FufWxWBs7ioDy_LJA
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. echo 正在获取硬件基础信息(需要几分钟时间)
  4. set "FileDX=%temp%\dxdiag.txt"
  5. dxdiag /whql:off /t "%FileDX%"
  6. echo 正在计算
  7. for /f "tokens=2 delims=\" %%i in ('wmic DesktopMonitor Get PNPDeviceID 2^>nul ^| findstr "DISPLAY"') do (
  8.     set "MonitorPNP=%%i"
  9. )
  10. for /f "tokens=2*" %%i in ('findstr /c:"Monitor Name:" "%FileDX%"') do (
  11.     set "MonitorName=%%i"
  12. )
  13. for /f "tokens=2*" %%i in ('findstr /c:"Monitor Model:" "%FileDX%"') do (
  14.     set "MonitorModel=%%j"
  15. )
  16. if /i "!MonitorModel!" equ "Unknown" (
  17.     for /f "tokens=2*" %%i in ('findstr /c:"Monitor Id:" "%FileDX%"') do (
  18.         set "MonitorModel=%%j"
  19.     )
  20. ) else if "!MonitorModel!" equ "" (
  21.     set "MonitorModel=!MonitorPNP!"
  22. )
  23. for /f "tokens=3" %%i in ('reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\DISPLAY\!MonitorPNP!" /s ^| findstr "EDID"') do (
  24.     set "MonitorEDID=%%i"
  25. )
  26. set "YearNum=!MonitorEDID:~34,2!"
  27. set "WeekNum=!MonitorEDID:~32,2!"
  28. set "HeightNum=!MonitorEDID:~42,2!"
  29. set "WidthNum=!MonitorEDID:~44,2!"
  30. set /a WeekNum=0x!WeekNum!*1
  31. set /a YearNum=0x!YearNum!*1+1990
  32. set /a HeightNum=0x!HeightNum!*1
  33. set /a WidthNum=0x!WidthNum!*1
  34. for /f %%i in ('powershell "[Math]::Round([Math]::Sqrt([Math]::Pow(!HeightNum!,2)+[Math]::Pow(!WidthNum!,2))*0.3937,1)"') do (
  35.     set "MonitorSizeInch=%%i"
  36. )
  37. for /f "tokens=4" %%i in ('findstr /c:"User DPI Setting:" "%FileDX%"') do (
  38.     set "MonitorDPI=%%i"
  39. )
  40. for /f "tokens=2*" %%i in ('findstr /c:"Native Mode:" "%FileDX%"') do (
  41.     set "MonitorNative=%%j"
  42. )
  43. cls
  44. echo 名    称 : !MonitorName!
  45. echo 型    号 : !MonitorModel!
  46. echo 屏幕尺寸 : !HeightNum! X !WidthNum! 厘米 (!MonitorSizeInch! 英寸)
  47. echo 生产日期 : !YearNum!年第!WeekNum!周
  48. echo 像素密度 : !MonitorDPI! DPI
  49. echo 当前模式 : !MonitorNative!
  50. pause
复制代码
1

评分人数

    • locoman: 感谢大佬的一直热情热心帮助指导,按照@Bat ...技术 + 1
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

  1. @powershell -ExecutionPolicy bypass "Get-WmiObject -Class Win32_DesktopMonitor|ft -AutoSize -Wrap"
复制代码

TOP

回复 5# Nsqs


我的Win10系统测试结果跟楼主的需要差距较大:
C:\>powershell -ExecutionPolicy bypass "Get-WmiObject -Class Win32_DesktopMonitor|ft -AutoSize -Wrap"

DeviceID        DisplayType MonitorManufacturer Name               ScreenHeight ScreenWidth
--------        ----------- ------------------- ----               ------------ -----------
DesktopMonitor1                                 默认监视器
DesktopMonitor2             (标准监视器类型)    通用即插即用监视器
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

这个,得好好学学。认真琢磨

TOP

本帖最后由 yakeyun 于 2023-8-19 11:13 编辑

回复 1# locoman

需要调用第三方插件“DumpEDID.exe”,先上代码:
@echo off
title 显示器EDID信息检测工具v1.0
cd /d "%~dp0"
DumpEDID.exe >>.\edid.txt
for /f "skip=4 tokens=1,*" %%i in ('type "edid.txt"') do echo,%%i %%j
if exist edid.txt del edid.txt
pause>nul
exit

执行后获取信息如下:
↓↓↓↓↓↓↓↓↓↓↓↓检测信息中英文对比↓↓↓↓↓↓↓↓↓↓↓↓
激活状态 ctive                   : No
注册表键值 egistry Key             : DISPLAY\HKC0000\4&1a6cade5&0&UID0
材料编号 erial Number            : CCBH919260154
制造周 anufacture Week         : 40 / 2016
制造商ID anufacturerID           : 25377 (0x6321)
产品标识 roductID                : 0 (0x0000)
序列号(数字) erial Number (Numeric)  : 1 (0x00000001)
DID版本 DID Version             : 1.3
显示伽马 isplay Gamma            : 2.20
垂直频率 ertical Frequency       : 55 - 75 Hz
水平频率 orizontal Frequency     : 30 - 82 KHz
最大图像大小 aximum Image Size       : 52 X 31 cm (23.8 Inch)
最大分辨率 aximum Resolution       : 1920 X 1080
支持待机模式 upport Standby Mode     : Yes
支持挂起模式 upport Suspend Mode     : Yes
支持低功耗模式 upport Low-Power Mode   : Yes
支持Default GTF  upport Default GTF      : No
数字传输 igital                  : Yes
支持的显示模式 upported Display Modes  :
920 X 1080  60 Hz
↑↑↑↑↑↑↑↑↑↑↑↑检测信息中英文对比↑↑↑↑↑↑↑↑↑↑↑↑
DumpEDID v1.07
Copyright (c) 2006 - 2018 Nir Sofer
Web site: http://www.nirsoft.net

****************************************************************
Active : Yes
Registry Key             : DISPLAY\HKC0000\4&1540260c&0&UID198155
Serial Number            : CCBH919260154
Manufacture Week         : 40 / 2016
ManufacturerID : 25377 (0x6321)
ProductID : 0 (0x0000)
Serial Number (Numeric)  : 1 (0x00000001)
EDID Version             : 1.3
Display Gamma            : 2.20
Vertical Frequency       : 55 - 75 Hz
Horizontal Frequency     : 30 - 82 KHz
Maximum Image Size       : 52 X 31 cm (23.8 Inch)
Maximum Resolution       : 1920 X 1080
Support Standby Mode     : Yes
Support Suspend Mode     : Yes
Support Low-Power Mode   : Yes
Support Default GTF      : No
Digital : Yes

Supported Display Modes  :
720 X  400  70 Hz
640 X  480  60 Hz
640 X  480  72 Hz
640 X  480  75 Hz
800 X  600  56 Hz
800 X  600  60 Hz
800 X  600  72 Hz
800 X  600  75 Hz
1024 X  768  60 Hz
1024 X  768  70 Hz
1024 X  768  75 Hz
1280 X  720  60 Hz
1280 X  800  60 Hz
1440 X  900  60 Hz
1280 X 1024  60 Hz
1280 X 1024  75 Hz
1680 X 1050  60 Hz
1920 X 1080  60 Hz

****************************************************************

成品下载地址:
https://sanli.lanzoub.com/iqkIW03sc1ni
1

评分人数

    • locoman: 感谢大佬的一直热情热心帮助指导,按照@Bat ...技术 + 1

TOP

本帖最后由 locoman 于 2023-8-19 14:37 编辑

感谢3楼的@buyiyang,4楼的@Batcher,代码都能正常运行,实现了需求。

特别感谢8楼的@yakeyun 朋友!还专门制作了文件提供下载,太谢谢了!!

但是,8楼的@yakeyun 朋友的文件执行不能成功——始终停留在“echo 当前系统获取到如下分辨率支持列表信息:”,就再没有任何响应了。

按说8楼的@yakeyun 朋友的思路是最好的了——将三方软件DumpEDID.exe放在bat中释放出来,用后即焚。


——我检查磁盘中也是释放出来DumpEDID.exe了的,单独执行之也正常,不知为啥bat就执行不下去了呢??



——感谢大佬们的一直热情热心帮助指导,按照@Batcher一贯愿景:帮助不收钱,实在要表示,可以在bathome微信群中给大家发红包。
我已经在bathome微信群中给大家发红包了,以资答谢!!

TOP

推荐使用 -a 参数
  1. @echo off
  2. DumpEDID.exe -a
  3. pause
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

返回列表