Files
hakril-PythonForWindows/windows/winobject/device.py
T

88 lines
2.0 KiB
Python

import windows
from windows import winproxy
from windows.generated_def import windef
import windows.generated_def as gdef
class DeviceClass(object):
def __init__(self, guid):
self._guid = guid
self._name = None
# self._devices = None
# self._h_devs = None
@property
def name(self):
if not self._name:
self._name = self._get_class_name()
return self._name
@property
def guid(self):
return self._guid
# @property
# def devices(self):
# if not self._devices:
# with OpenDeviceClass(self):
# self._devices = list(do for do in self._get_devices())
# return self._devices
# def _get_devices(self):
# if not self._h_devs:
# return
# device_index = 0
# while True:
# device_data = winproxy.SetupDiEnumDeviceInfo(self._h_devs, device_index)
# if not device_data:
# return # stop iterating
# device_index+=1
# yield DeviceObject.from_device_info(self._h_devs, device_data)
def _get_class_name(self):
return winproxy.SetupDiClassNameFromGuidW(self.guid)
class DeviceManager(object):
@staticmethod
def enumerate_active_class():
return list(DeviceManager.enumerate_class())
# return list(filter(lambda dc: len(dc.devices) > 0, DeviceManager.enumerate_class()))
@staticmethod
def enumerate_class():
def _gen_all_class_guid():
"""
Return every registered device classes in the system, generator-style
"""
class_index = 0
while True:
class_guid = winproxy.CM_Enumerate_Classes(class_index, 0)
class_index+=1
if not class_guid:
return # stop iterating
yield DeviceClass(class_guid)
return (dc for dc in _gen_all_class_guid())