标题: [系统相关] 【已解决】求助批处理提取显示器的硬件信息 [打印本页]
作者: locoman 时间: 2023-8-18 14:43 标题: 【已解决】求助批处理提取显示器的硬件信息
本帖最后由 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)
==================
原帖子中源文件中源码(由于超过论坛限制,只贴出部分源码,完整的还敬请移步原帖子)
-------------------------------------- echo.关于显示器的详细信息如下:>>!File!
- echo.>>!File!
- for /f "tokens=3" %%i in ('Reg Query "HKLM\System\CurrentControlSet\Enum\Display\!5!\!6!\Device Parameters" /v "Edid" 2^>nul') do (
- set Edid=%%i
- )
- 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))
- if "%DisplayName%" == "" set DisplayName=!NoGet!
- echo. 型号 ........... : %DisplayName%>>!File!
- echo.>>!File!
- if not "%Edid%" == "" (
- set Yeardata=!Edid:~34,2!
- set Weekdata=!Edid:~32,2!
- set Longdata=!Edid:~42,2!
- set Widedata=!Edid:~44,2!
- set /a Weekdata=0X!Weekdata!*1
- set /a Longdata=0X!Longdata!*1
- set /a Widedata=0X!Widedata!*1
- set /a Yeardata=0X!Yeardata!*1+1990
- call :Division !Longdata! 2.54 Longdata.in
- call :Division !Widedata! 2.54 Widedata.in
- call :Times !Longdata.in! !Longdata.in! Longdata.in
- call :Times !Widedata.in! !Widedata.in! Widedata.in
- call :Addition !Longdata.in! !Widedata.in! Diagonal
- set "Code=CreateObject("Scripting.FileSystemObject").GetStandardStream(1).Write(sqr(!Diagonal!))(close)"
- for /f "delims=" %%i in ('Mshta "Vbscript:!Code!"') do set Screen.In=%%i
- for /f "tokens=1,2 delims=." %%i in ("!Screen.In!") do (
- set Screen.In=%%i
- set Screen.Io=%%j
- )
- set Screen.Io=!Screen.Io:~0,1!
- if !Screen.Io! geq 7 set /a Screen.In=!Screen.In!+1
- echo. 屏幕尺寸 ....... : !Screen.In! 英寸>>!File!
- echo.>>!File!
- echo. 生产日期 ....... : !Yeardata! 年 第 !Weekdata! 周>>!File!
- echo.>>!File!
- echo. 屏幕大小 ....... : !Longdata! 厘米 × !Widedata! 厘米>>!File!
- echo.>>!File!
- )
- if not defined PixelsPerXLogicalInch (set PixelsPerXLogicalInch=!NoGet!) else set PixelsPerXLogicalInch=!PixelsPerXLogicalInch! Dpi
- echo. 像素密度 ....... : %PixelsPerXLogicalInch%>>!File!
- echo.>>!File!
- echo. 当前模式 ....... : %Resolution%>>!File!
- if not "%CD-ROM.Name%" == "无" (
- echo.>>!File!
- echo.>>!File!
- echo.关于光驱的详细信息如下:>>!File!
- echo.>>!File!
- echo. 列出所有光驱: >>!File!
- echo.>>!File!
- echo. 盘符 类型 型号 >>!File!
- echo.>>!File!
- for /f "skip=1 delims=" %%i in ('Wmic CdRom Get Name^,Drive^,Mediatype 2^>nul') do (
- set CdRom.0=%%i
- call :Exit
- if "!CdRom.0!" neq "" echo. !CdRom.0!>>!File!
- )
- )
- echo.>>!File!
复制代码
作者: Five66 时间: 2023-8-18 17:20
不嫌麻烦就二次处理原来的bat的输出
作者: buyiyang 时间: 2023-8-18 22:25
- @echo off
- echo.关于显示器的详细信息如下:
- DxDiag /t /Whql:off dxdiag.txt
- for /f "tokens=2 delims=:" %%i in ('Findstr /IC:"Monitor Model:" Dxdiag.txt') do set "DisplayName=%%i"
- if /i "%DisplayName%"==" Unknown" for /f "tokens=2 delims=:" %%i in ('Findstr /IC:"Monitor Id:" Dxdiag.txt') do set "DisplayName=%%i"
- for /f "tokens=2" %%i in ('Wmic DesktopMonitor Get Availability^,PNPDeviceID 2^>nul') do set "PNPDeviceID=%%i"
- if "%DisplayName%"=="" for /f "delims=\ tokens=2" %%i in ("%PNPDeviceID%") do set DisplayName=%%i
- if "%DisplayName:~0,1%"==" " set DisplayName=%DisplayName:~1%
- if not "%DisplayName%"=="" set DisplayName=%DisplayName:/=-%
- echo. 型号 ........... : %DisplayName%
- for /f "tokens=2 delims=:" %%i in ('Findstr /IC:"Current Mode:" Dxdiag.txt') do if /i not "%%i"==" Unknown" set Resolution=%%i
- 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
- set /a Yeardata=0x%Edid:~34,2%+1990
- set /a Weekdata=0x%Edid:~32,2%
- set /a Longdata=0x%Edid:~42,2%
- set /a Widedata=0x%Edid:~44,2%
- echo. 生产日期 ....... : %Yeardata% 年 第 %Weekdata% 周
- set /a Diagonal=Longdata*Longdata+Weekdata*Widedata
- for /f "delims=" %%i in ('Mshta "Vbscript:CreateObject("Scripting.FileSystemObject").GetStandardStream(1).Write(sqr(%Diagonal%)/2.54)(close)"') do set Screen.In=%%i
- for /f "tokens=1,2 delims=." %%i in ("%Screen.In%") do set Screen.In=%%i&set Screen.Io=%%j
- set Screen.Io=%Screen.Io:~0,1%
- if %Screen.Io% geq 7 set /a Screen.In=%Screen.In%+1
- echo. 屏幕尺寸 ....... : %Screen.In% 英寸
- echo. 屏幕大小 ....... : %Longdata% 厘米 × %Widedata% 厘米
- for /f "skip=2 tokens=2 delims==" %%i in ('Wmic DesktopMonitor Get PixelsPerXLogicalInch /Value 2^>nul') do set PixelsPerXLogicalInch=%%i
- echo. 像素密度 ....... : %PixelsPerXLogicalInch% Dpi
- echo. 当前模式 ....... :%Resolution%
- pause
复制代码
作者: Batcher 时间: 2023-8-18 22:34
回复 1# locoman
请参考Q-04把bat文件保存为ANSI编码:
https://mp.weixin.qq.com/s/Koje4FufWxWBs7ioDy_LJA- @echo off
- setlocal enabledelayedexpansion
- echo 正在获取硬件基础信息(需要几分钟时间)
- set "FileDX=%temp%\dxdiag.txt"
- dxdiag /whql:off /t "%FileDX%"
-
- echo 正在计算
- for /f "tokens=2 delims=\" %%i in ('wmic DesktopMonitor Get PNPDeviceID 2^>nul ^| findstr "DISPLAY"') do (
- set "MonitorPNP=%%i"
- )
-
- for /f "tokens=2*" %%i in ('findstr /c:"Monitor Name:" "%FileDX%"') do (
- set "MonitorName=%%i"
- )
-
- for /f "tokens=2*" %%i in ('findstr /c:"Monitor Model:" "%FileDX%"') do (
- set "MonitorModel=%%j"
- )
- if /i "!MonitorModel!" equ "Unknown" (
- for /f "tokens=2*" %%i in ('findstr /c:"Monitor Id:" "%FileDX%"') do (
- set "MonitorModel=%%j"
- )
- ) else if "!MonitorModel!" equ "" (
- set "MonitorModel=!MonitorPNP!"
- )
-
- for /f "tokens=3" %%i in ('reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\DISPLAY\!MonitorPNP!" /s ^| findstr "EDID"') do (
- set "MonitorEDID=%%i"
- )
- set "YearNum=!MonitorEDID:~34,2!"
- set "WeekNum=!MonitorEDID:~32,2!"
- set "HeightNum=!MonitorEDID:~42,2!"
- set "WidthNum=!MonitorEDID:~44,2!"
- set /a WeekNum=0x!WeekNum!*1
- set /a YearNum=0x!YearNum!*1+1990
- set /a HeightNum=0x!HeightNum!*1
- set /a WidthNum=0x!WidthNum!*1
- for /f %%i in ('powershell "[Math]::Round([Math]::Sqrt([Math]::Pow(!HeightNum!,2)+[Math]::Pow(!WidthNum!,2))*0.3937,1)"') do (
- set "MonitorSizeInch=%%i"
- )
-
- for /f "tokens=4" %%i in ('findstr /c:"User DPI Setting:" "%FileDX%"') do (
- set "MonitorDPI=%%i"
- )
-
- for /f "tokens=2*" %%i in ('findstr /c:"Native Mode:" "%FileDX%"') do (
- set "MonitorNative=%%j"
- )
-
- cls
- echo 名 称 : !MonitorName!
- echo 型 号 : !MonitorModel!
- echo 屏幕尺寸 : !HeightNum! X !WidthNum! 厘米 (!MonitorSizeInch! 英寸)
- echo 生产日期 : !YearNum!年第!WeekNum!周
- echo 像素密度 : !MonitorDPI! DPI
- echo 当前模式 : !MonitorNative!
- pause
复制代码
作者: Nsqs 时间: 2023-8-18 23:18
- @powershell -ExecutionPolicy bypass "Get-WmiObject -Class Win32_DesktopMonitor|ft -AutoSize -Wrap"
复制代码
作者: Batcher 时间: 2023-8-19 00:42
回复 5# Nsqs
我的Win10系统测试结果跟楼主的需要差距较大:
C:\>powershell -ExecutionPolicy bypass "Get-WmiObject -Class Win32_DesktopMonitor|ft -AutoSize -Wrap"
DeviceID DisplayType MonitorManufacturer Name ScreenHeight ScreenWidth
-------- ----------- ------------------- ---- ------------ -----------
DesktopMonitor1 默认监视器
DesktopMonitor2 (标准监视器类型) 通用即插即用监视器
作者: jszw666 时间: 2023-8-19 11:02
这个,得好好学学。认真琢磨
作者: yakeyun 时间: 2023-8-19 11:11
本帖最后由 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
作者: locoman 时间: 2023-8-19 14:36
本帖最后由 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微信群中给大家发红包了,以资答谢!!
作者: Batcher 时间: 2023-8-20 10:40
推荐使用 -a 参数- @echo off
- DumpEDID.exe -a
- pause
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |