首页 > 解决方案 > 检测硬件图形支持

问题描述

我正在寻找一种以编程方式区分在具有硬件图形支持的机器上运行的方法,例如

在此处输入图像描述

而不是在没有硬件驱动程序的情况下运行,在这种情况下,我将恢复为软件渲染

在此处输入图像描述

我尝试过使用该wmi模块,但是在前一种情况下,当图形硬件可用时,我在视频控制器中找不到任何表明它们被正确检测到的东西

import wmi
pc = wmi.WMI()
for graphics in pc.Win32_VideoController():
    print(graphics.properties)

输出

{'AcceleratorCapabilities': None, 'AdapterCompatibility': None, 'AdapterDACType': None, 'AdapterRAM': None, 'Availability': None, 'CapabilityDescriptions': None, 'Caption': None, 'ColorTableEntries': None, 'ConfigManagerErrorCode': None, 'ConfigManagerUserConfig': None, 'CreationClassName': None, 'CurrentBitsPerPixel': None, 'CurrentHorizontalResolution': None, 'CurrentNumberOfColors': None, 'CurrentNumberOfColumns': None, 'CurrentNumberOfRows': None, 'CurrentRefreshRate': None, 'CurrentScanMode': None, 'CurrentVerticalResolution': None, 'Description': None, 'DeviceID': None, 'DeviceSpecificPens': None, 'DitherType': None, 'DriverDate': None, 'DriverVersion': None, 'ErrorCleared': None, 'ErrorDescription': None, 'ICMIntent': None, 'ICMMethod': None, 'InfFilename': None, 'InfSection': None, 'InstallDate': None, 'InstalledDisplayDrivers': None, 'LastErrorCode': None, 'MaxMemorySupported': None, 'MaxNumberControlled': None, 'MaxRefreshRate': None, 'MinRefreshRate': None, 'Monochrome': None, 'Name': None, 'NumberOfColorPlanes': None, 'NumberOfVideoPages': None, 'PNPDeviceID': None, 'PowerManagementCapabilities': None, 'PowerManagementSupported': None, 'ProtocolSupported': None, 'ReservedSystemPaletteEntries': None, 'SpecificationVersion': None, 'Status': None, 'StatusInfo': None, 'SystemCreationClassName': None, 'SystemName': None, 'SystemPaletteEntries': None, 'TimeOfLastReset': None, 'VideoArchitecture': None, 'VideoMemoryType': None, 'VideoMode': None, 'VideoModeDescription': None, 'VideoProcessor': None}
{'AcceleratorCapabilities': None, 'AdapterCompatibility': None, 'AdapterDACType': None, 'AdapterRAM': None, 'Availability': None, 'CapabilityDescriptions': None, 'Caption': None, 'ColorTableEntries': None, 'ConfigManagerErrorCode': None, 'ConfigManagerUserConfig': None, 'CreationClassName': None, 'CurrentBitsPerPixel': None, 'CurrentHorizontalResolution': None, 'CurrentNumberOfColors': None, 'CurrentNumberOfColumns': None, 'CurrentNumberOfRows': None, 'CurrentRefreshRate': None, 'CurrentScanMode': None, 'CurrentVerticalResolution': None, 'Description': None, 'DeviceID': None, 'DeviceSpecificPens': None, 'DitherType': None, 'DriverDate': None, 'DriverVersion': None, 'ErrorCleared': None, 'ErrorDescription': None, 'ICMIntent': None, 'ICMMethod': None, 'InfFilename': None, 'InfSection': None, 'InstallDate': None, 'InstalledDisplayDrivers': None, 'LastErrorCode': None, 'MaxMemorySupported': None, 'MaxNumberControlled': None, 'MaxRefreshRate': None, 'MinRefreshRate': None, 'Monochrome': None, 'Name': None, 'NumberOfColorPlanes': None, 'NumberOfVideoPages': None, 'PNPDeviceID': None, 'PowerManagementCapabilities': None, 'PowerManagementSupported': None, 'ProtocolSupported': None, 'ReservedSystemPaletteEntries': None, 'SpecificationVersion': None, 'Status': None, 'StatusInfo': None, 'SystemCreationClassName': None, 'SystemName': None, 'SystemPaletteEntries': None, 'TimeOfLastReset': None, 'VideoArchitecture': None, 'VideoMemoryType': None, 'VideoMode': None, 'VideoModeDescription': None, 'VideoProcessor': None}

如果这很重要,我将针对 Windows 系统,以防有特定于操作系统的解决方案。

标签: pythonwindowsgraphicshardware

解决方案


实现此目的的一种方法是使用infi.devicemanager检测'Microsoft Basic Display Driver'设备描述中是否列出,这表明缺乏硬件图形支持。

from infi.devicemanager import DeviceManager

def has_hardware_graphics():
    dm = DeviceManager()
    return all(dev.description != 'Microsoft Basic Display Driver' for dev in dm.all_devices)

推荐阅读