使用python访问设备管理器

img


我在使用python3.6访问win10的设备管理器(64位),希望可以获取到驱动设备名称和版本。

我尝试了win32com.client库


import win32com.client
# import wmi# 获取WMI服务
wmiService = win32com.client.Dispatch("WbemScripting.SWbemLocator").ConnectServer('.', 'root\cimv2')
# 获取所有设备
devices = wmiService.ExecQuery("SELECT * FROM Win32_PnPEntity")
num = 0
# 输出每个设备的信息
for device in devices:
    num += 1
    print(f"device:{device.Caption}\ndeviceName:{device.Name}\ndeviceDescription:{device.Description}")
print(num)

并打印了device的对象,似乎没有发现版本的属性,尝试了很多属性也不见有

还尝试了infi.devicemanager库

from infi.devicemanager import DeviceManager
dm = DeviceManager()
dm.root.rescan()
devices = dm.all_devices
for device in devices:
    print(device)

也只是得到驱动名,没有版本号

是否有其他库能够尝试,比如ctypes?又或者是我使用过的,但还有其它方法

第一个改一改试试:

devices = wmiService.ExecQuery("SELECT * FROM Win32_PnPSignedDriver")
# 输出每个设备的信息
for device in devices:
    print(f"deviceName:{device.DeviceName}\ndeviceVersion:{device.DriverVersion}")

【以下回答由 GPT 生成】

回答问题: 问题标题: 如何使用Python访问设备管理器获取驱动设备名称和版本?

解决方案:

很遗憾,无法直接使用Python访问设备管理器来获取驱动设备的名称和版本号。目前,没有Python标准库或第三方库可以直接实现这个功能。但是,我们可以通过其他方法来获取驱动设备的名称和版本号。

一种方法是使用Windows系统自带的命令行工具devcon.exedevcon.exe是一个Windows设备管理工具,可以用来列出设备信息、安装/卸载驱动等操作。我们可以通过Python的subprocess模块来调用devcon.exe命令,并解析命令输出来获取驱动设备的名称和版本号。

首先,确保你已经下载并安装了devcon.exe。你可以从微软官方下载Windows Driver Kit (WDK)来获取devcon.exe。安装完成后,将devcon.exe所在的路径添加到系统环境变量中。

接下来,可以使用以下Python代码来调用devcon.exe并获取驱动设备的名称和版本号:

import subprocess

command = 'devcon.exe driverfiles *'
output = subprocess.check_output(command, shell=True, universal_newlines=True)

# 解析命令输出,提取驱动设备的名称和版本号
lines = output.strip().split('\n')
devices = []
for line in lines:
    line = line.strip()
    if line.startswith('Kernel modules'):
        break
    if line.startswith('Driver Description:'):
        device_name = line.split(':')[1].strip()
    elif line.startswith('Driver Version:'):
        device_version = line.split(':')[1].strip()
        devices.append((device_name, device_version))

# 打印驱动设备的名称和版本号
for device in devices:
    print('Device Name:', device[0])
    print('Device Version:', device[1])
    print('---')

这个方法会调用devcon.exedriverfiles *命令,该命令会列出所有驱动设备的名称和版本号。我们解析命令输出,提取驱动设备的名称和版本号,并打印出来。

请注意,在执行前,请确保你已经正确安装了devcon.exe,并将其路径添加到系统环境变量中。如果没有安装或配置正确,以上代码将无法执行成功。

希望这个解决方案能帮到您,如果您有其他问题,请随时提问。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^