mirror of
https://github.com/hakril/PythonForWindows
synced 2026-06-08 14:31:45 +00:00
88 lines
2.0 KiB
Python
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()) |