如何在Windows上使用Python获取所有显示器的信息?

我需要一种方法来获取Windows和Python中所有连接监视器的制造商名称数据string

我的最终目标是返回这个例子的函数:

["Lenovo LTN116AT06407", "BenQ G615HDPL"] 

我find一个软件(madVR),得到我所需要的,但我不知道它是如何做到的。

madvr显示标识

Solutions Collecting From Web of "如何在Windows上使用Python获取所有显示器的信息?"

这可以通过从你的python脚本执行PowerShell命令来完成。 要发现计算机上的多显示器配置信息,请使用powershell的Get-WmiObject win32_desktopmonitor命令。 命令输出如下所示:

 __GENUS : 2 __CLASS : Win32_DesktopMonitor __SUPERCLASS : CIM_DesktopMonitor __DYNASTY : CIM_ManagedSystemElement __RELPATH : Win32_DesktopMonitor.DeviceID="DesktopMonitor1" __PROPERTY_COUNT : 28 __DERIVATION : {CIM_DesktopMonitor, CIM_Display, CIM_UserDevice, CIM_LogicalDevice...} __SERVER : SQUALL __NAMESPACE : root\cimv2 __PATH : \\SQUALL\root\cimv2:Win32_DesktopMonitor.DeviceID ="DesktopMonitor1" Availability : 3 Bandwidth : Caption : LG IPS237(Analog) ConfigManagerErrorCode : 0 ConfigManagerUserConfig : False CreationClassName : Win32_DesktopMonitor Description : LG IPS237(Analog) DeviceID : DesktopMonitor1 DisplayType : ErrorCleared : ErrorDescription : InstallDate : IsLocked : LastErrorCode : MonitorManufacturer : LG MonitorType : LG IPS237(Analog) Name : LG IPS237(Analog) PixelsPerXLogicalInch : 96 PixelsPerYLogicalInch : 96 PNPDeviceID : DISPLAY\GSM587D\5&2494DFB6&0&UID1048848 PowerManagementCapabilities : PowerManagementSupported : ScreenHeight : 1080 ScreenWidth : 1920 Status : OK StatusInfo : SystemCreationClassName : Win32_ComputerSystem SystemName : SQUALL 

我们需要得到部分名称 ,所以使用正则表达式。 最终的代码是:

 import subprocess import re proc = subprocess.Popen(['powershell', 'Get-WmiObject win32_desktopmonitor;'], stdout=subprocess.PIPE) res = proc.communicate() monitors = re.findall('(?s)\r\nName\s+:\s(.*?)\r\n', res[0].decode("utf-8")) print(monitors) 

结果是:

 ['LG IPS237(Analog)'] 

查看Python的win32all库。