怎么用脚本获取显示器型号

wen 实用脚本 2

本文目录导读:

怎么用脚本获取显示器型号

  1. Windows(PowerShell)
  2. Windows(CMD/Batch)
  3. Linux(Bash)
  4. macOS(bash)
  5. 跨平台 Python 脚本
  6. 注意事项

Windows(PowerShell)

使用 WMI(推荐)

# 获取显示器基本型号信息
Get-CimInstance -ClassName WmiMonitorID -Namespace root\wmi | ForEach-Object {
    $manufacturer = ($_.ManufacturerName | Where-Object {$_ -ne 0} | ForEach-Object {[char]$_}) -join ''
    $name = ($_.UserFriendlyName | Where-Object {$_ -ne 0} | ForEach-Object {[char]$_}) -join ''
    $serial = ($_.SerialNumberID | Where-Object {$_ -ne 0} | ForEach-Object {[char]$_}) -join ''
    [PSCustomObject]@{
        Manufacturer = $manufacturer
        Model = $name
        SerialNumber = $serial
        WeekOfManufacture = $_.WeekOfManufacture
        YearOfManufacture = $_.YearOfManufacture
    }
} | Format-Table

使用注册表(简单方法)

# 从注册表获取显示器信息
Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Enum\DISPLAY\*\*" | 
    Where-Object {$_.DeviceDesc -notmatch 'Generic'} |
    Select-Object DeviceDesc, FriendlyName, DeviceInstance

Windows(CMD/Batch)

@echo off
:: 使用 WMIC 获取显示器信息
wmic path Win32_DesktopMonitor get Name,Manufacturer,SerialNumber,ScreenHeight,ScreenWidth
:: 或者获取更详细的EDID信息
wmic path WmiMonitorID get * /format:list

Linux(Bash)

使用 edid-decode(需安装)

#!/bin/bash
# 获取显示器EDID信息
for monitor in /sys/class/drm/*/edid; do
    if [ -f "$monitor" ]; then
        echo "=== 显示器: $monitor ==="
        edid-decode < "$monitor" | head -20
        echo
    fi
done

使用 get-edid(hdparm 工具)

#!/bin/bash
# 使用 hdparm 获取EDID
for i in /sys/class/drm/card*-*; do
    if [ -f "$i/edid" ]; then
        echo "=== $(basename $i) ==="
        get-edid | parse-edid | head -20
        echo
    fi
done

使用 xrandr(X11环境)

#!/bin/bash
# 使用 xrandr 获取显示器名称
xrandr --verbose | grep -A2 "connected" | grep -B1 "Edid"
# 或者
xrandr --listmonitors

macOS(bash)

#!/bin/bash
# 使用 system_profiler
system_profiler SPDisplaysDataType | grep -A5 "Display Type"
# 更详细的显示器信息
system_profiler SPDisplaysDataType | grep -E "Display Type|Resolution|Main Display|Mirror|Vendor|Model|Serial"

跨平台 Python 脚本

#!/usr/bin/env python3
import platform
import subprocess
import re
def get_monitor_info_windows():
    """Windows 下获取显示器信息"""
    try:
        cmd = 'powershell -Command "Get-CimInstance -ClassName WmiMonitorID -Namespace root\\wmi | ForEach-Object { $name = ($_.UserFriendlyName | Where-Object {$_ -ne 0} | ForEach-Object {[char]$_}) -join \\'\\'; $manu = ($_.ManufacturerName | Where-Object {$_ -ne 0} | ForEach-Object {[char]$_}) -join \\'\\'; Write-Output \\'$manu | $name\\' }"'
        result = subprocess.run(cmd, shell=True, capture_output=True, text=True)
        return result.stdout.strip()
    except:
        return "无法获取显示器信息"
def get_monitor_info_linux():
    """Linux 下获取显示器信息"""
    try:
        # 尝试从 /sys 获取 EDID
        import glob
        monitors = []
        for edid in glob.glob('/sys/class/drm/*/edid'):
            try:
                with open(edid, 'rb') as f:
                    data = f.read()
                if len(data) >= 256:
                    # 解析EDID中的显示器名称
                    name = data[0x48:0x68].decode('ascii', errors='ignore').strip()
                    if name:
                        monitors.append(name)
            except:
                continue
        return '\n'.join(monitors) if monitors else "未找到显示器"
    except:
        return "无法获取显示器信息"
def get_monitor_info_macos():
    """macOS 下获取显示器信息"""
    try:
        cmd = "system_profiler SPDisplaysDataType | grep -E 'Display Type|Resolution|Vendor|Model'"
        result = subprocess.run(cmd, shell=True, capture_output=True, text=True)
        return result.stdout.strip()
    except:
        return "无法获取显示器信息"
if __name__ == "__main__":
    system = platform.system()
    if system == "Windows":
        info = get_monitor_info_windows()
    elif system == "Linux":
        info = get_monitor_info_linux()
    elif system == "Darwin":
        info = get_monitor_info_macos()
    else:
        info = f"未知系统: {system}"
    print(f"显示器信息:\n{info}")

注意事项

  1. 权限问题:在 Linux 上可能需要 sudo 权限来读取 EDID
  2. 编码问题:Windows PowerShell 脚本中的中文需要正确编码
  3. 显示器可能不提供所有信息:有些显示器可能不提供序列号或制造周次
  4. 多显示器:上述脚本支持多显示器,会列出所有连接显示器

选择适合你系统的脚本即可,如果需要更精确的信息,建议"Windows"使用 PowerShell 方法,"Linux"安装并使用 edid-decode 工具。

抱歉,评论功能暂时关闭!