📄 vbhardwarecontroller.cls
字号:
Private GUID_DEVCLASS_FDC As GUID
Private GUID_DEVCLASS_GPS As GUID
Private GUID_DEVCLASS_HDC As GUID
Private GUID_DEVCLASS_IMAGE As GUID
Private GUID_DEVCLASS_INFRARED As GUID
Private GUID_DEVCLASS_KEYBOARD As GUID
Private GUID_DEVCLASS_LEGACYDRIVER As GUID
Private GUID_DEVCLASS_MEDIA As GUID
Private GUID_DEVCLASS_MODEM As GUID
Private GUID_DEVCLASS_MONITOR As GUID
Private GUID_DEVCLASS_MOUSE As GUID
Private GUID_DEVCLASS_MTD As GUID
Private GUID_DEVCLASS_MULTIFUNCTION As GUID
Private GUID_DEVCLASS_NET As GUID
Private GUID_DEVCLASS_NETCLIENT As GUID
Private GUID_DEVCLASS_NETSERVICE As GUID
Private GUID_DEVCLASS_NETTRANS As GUID
Private GUID_DEVCLASS_NODRIVER As GUID
Private GUID_DEVCLASS_PARALLE As GUID
Private GUID_DEVCLASS_PCMCIA As GUID
Private GUID_DEVCLASS_PORTS As GUID
Private GUID_DEVCLASS_PRINTER As GUID
Private GUID_DEVCLASS_PRINTERUPGRADE As GUID
Private GUID_DEVCLASS_SCSIADAPTER As GUID
Private GUID_DEVCLASS_SOUND As GUID
Private GUID_DEVCLASS_STILLIMAGE As GUID
Private GUID_DEVCLASS_SYSTEM As GUID
Private GUID_DEVCLASS_TAPEDRIVE As GUID
Private GUID_DEVCLASS_UNKNOWN As GUID
Private GUID_DEVCLASS_VOLUME As GUID
Private Const INVALID_HANDLE_VALUE As Long = -1
Private Const ERROR_INSUFFICIENT_BUFFER As Long = 122
Private Const FILE_READ_DATA = (&H1) ' file pipe
Private Const FILE_WRITE_DATA = (&H2) ' file pipe
Private Const FILE_DEVICE_BEEP As Long = &H1
Private Const FILE_DEVICE_CD_ROM As Long = &H2
Private Const FILE_DEVICE_CD_ROM_FILE_SYSTEM As Long = &H3
Private Const FILE_DEVICE_CONTROLLER As Long = &H4
Private Const FILE_DEVICE_DATALINK As Long = &H5
Private Const FILE_DEVICE_DFS As Long = &H6
Private Const FILE_DEVICE_DISK As Long = &H7
Private Const FILE_DEVICE_DISK_FILE_SYSTEM As Long = &H8
Private Const FILE_DEVICE_FILE_SYSTEM As Long = &H9
Private Const FILE_DEVICE_INPORT_PORT As Long = &HA
Private Const FILE_DEVICE_KEYBOARD As Long = &HB
Private Const FILE_DEVICE_MAILSLOT As Long = &HC
Private Const FILE_DEVICE_MIDI_IN As Long = &HD
Private Const FILE_DEVICE_MIDI_OUT As Long = &HE
Private Const FILE_DEVICE_MOUSE As Long = &HF
Private Const FILE_DEVICE_MULTI_UNC_PROVIDER As Long = &H10
Private Const FILE_DEVICE_NAMED_PIPE As Long = &H11
Private Const FILE_DEVICE_NETWORK As Long = &H12
Private Const FILE_DEVICE_NETWORK_BROWSER As Long = &H13
Private Const FILE_DEVICE_NETWORK_FILE_SYSTEM As Long = &H14
Private Const FILE_DEVICE_NULL As Long = &H15
Private Const FILE_DEVICE_PARALLEL_PORT As Long = &H16
Private Const FILE_DEVICE_PHYSICAL_NETCARD As Long = &H17
Private Const FILE_DEVICE_PRINTER As Long = &H18
Private Const FILE_DEVICE_SCANNER As Long = &H19
Private Const FILE_DEVICE_SERIAL_MOUSE_PORT As Long = &H1A
Private Const FILE_DEVICE_SERIAL_PORT As Long = &H1B
Private Const FILE_DEVICE_SCREEN As Long = &H1C
Private Const FILE_DEVICE_SOUND As Long = &H1D
Private Const FILE_DEVICE_STREAMS As Long = &H1E
Private Const FILE_DEVICE_TAPE As Long = &H1F
Private Const FILE_DEVICE_TAPE_FILE_SYSTEM As Long = &H20
Private Const FILE_DEVICE_TRANSPORT As Long = &H21
Private Const FILE_DEVICE_UNKNOWN As Long = &H22
Private Const FILE_DEVICE_VIDEO As Long = &H23
Private Const FILE_DEVICE_VIRTUAL_DISK As Long = &H24
Private Const FILE_DEVICE_WAVE_IN As Long = &H25
Private Const FILE_DEVICE_WAVE_OUT As Long = &H26
Private Const FILE_DEVICE_8042_PORT As Long = &H27
Private Const FILE_DEVICE_NETWORK_REDIRECTOR As Long = &H28
Private Const FILE_DEVICE_BATTERY As Long = &H29
Private Const FILE_DEVICE_BUS_EXTENDER As Long = &H2A
Private Const FILE_DEVICE_MODEM As Long = &H2B
Private Const FILE_DEVICE_VDM As Long = &H2C
Private Const FILE_DEVICE_MASS_STORAGE As Long = &H2D
Private Const FILE_DEVICE_SMB As Long = &H2E
Private Const FILE_DEVICE_KS As Long = &H2F
Private Const FILE_DEVICE_CHANGER As Long = &H30
Private Const FILE_DEVICE_SMARTCARD As Long = &H31
Private Const FILE_DEVICE_ACPI As Long = &H32
Private Const FILE_DEVICE_DVD As Long = &H33
Private Const FILE_DEVICE_FULLSCREEN_VIDEO As Long = &H34
Private Const FILE_DEVICE_DFS_FILE_SYSTEM As Long = &H35
Private Const FILE_DEVICE_DFS_VOLUME As Long = &H36
Private Const METHOD_BUFFERED As Long = 0
Private Const METHOD_IN_DIRECT As Long = 1
Private Const METHOD_OUT_DIRECT As Long = 2
Private Const METHOD_NEITHER As Long = 3
Private Const FILE_ANY_ACCESS As Long = 0
Private Const FILE_READ_ACCESS As Long = FILE_READ_DATA '/* file & pipe */
Private Const FILE_WRITE_ACCESS As Long = FILE_WRITE_DATA '/* file & pipe */
Private Const IOCTL_STORAGE_BASE As Long = FILE_DEVICE_MASS_STORAGE
Private Enum STORAGE_BUS_TYPE
BusTypeUnknown = 0
BusTypeScsi
BusTypeAtapi
BusTypeAta
BusType1394
BusTypeSsa
BusTypeFibre
BusTypeUsb
BusTypeRAID
BusTypeMaxReserved = &H7F
End Enum
Private Enum STORAGE_QUERY_TYPE
PropertyStandardQuery = 0
PropertyExistsQuery
PropertyMaskQuery
PropertyQueryMaxDefined
End Enum
Private Enum STORAGE_PROPERTY_ID
StorageDeviceProperty = 0
StorageAdapterProperty
End Enum
Private Type STORAGE_PROPERTY_QUERY
PropertyId As STORAGE_PROPERTY_ID
QueryType As STORAGE_QUERY_TYPE
AdditionalParameters(0) As Byte
End Type
Private Type STORAGE_DEVICE_DESCRIPTOR
Version As Long
Size As Long
DeviceType As Byte
DeviceTypeModifier As Byte
RemovableMedia As Byte
CommandQueueing As Byte
VendorIdOffset As Long
ProductIdOffset As Long
ProductRevisionOffset As Long
SerialNumberOffset As Long
BusType As STORAGE_BUS_TYPE
RawPropertiesLength As Long
RawDeviceProperties(0) As Byte
End Type
Private Declare Function GetDriveType Lib "kernel32" Alias "GetDriveTypeA" (ByVal nDrive As String) As Long
Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, lpSecurityAttributes As SECURITY_ATTRIBUTES, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function DeviceIoControl Lib "kernel32" (ByVal hDevice As Long, ByVal dwIoControlCode As Long, lpInBuffer As Any, ByVal nInBufferSize As Long, lpOutBuffer As Any, ByVal nOutBufferSize As Long, lpBytesReturned As Long, lpOverlapped As OVERLAPPED) As Long
Private Const DRIVE_CDROM = 5
Private Const DRIVE_FIXED = 3
Private Const DRIVE_RAMDISK = 6
Private Const DRIVE_REMOTE = 4
Private Const DRIVE_REMOVABLE = 2
Private Const GENERIC_READ = &H80000000
Private Const FILE_SHARE_READ = &H1
Private Const FILE_SHARE_WRITE = &H2
Private Const OPEN_EXISTING = 3
Private Type SECURITY_ATTRIBUTES
nLength As Long
lpSecurityDescriptor As Long
bInheritHandle As Long
End Type
Private Type OVERLAPPED
Internal As Long
InternalHigh As Long
offset As Long
OffsetHigh As Long
hEvent As Long
End Type
Private Declare Function GetLogicalDrives Lib "kernel32" () As Long
'**************************************************************************
'* 暴露的接口 *
'**************************************************************************
Public Event EnumDevicesProc(ByVal lIndex As Long, ByVal sDeviceName As String, ByVal sDeviceClassName As String, ByVal sDeviceFriendlyName As String, ByVal sDeviceEnumeratorName As String, ByVal sDeviceClassGuid As String)
Public Function EnumDevices(Optional lClassName As Long, Optional fEnumerateInterfaces As Boolean = False) As Boolean
On Error GoTo Error_Handler
Dim hDevInfo As Long
If fEnumerateInterfaces Then
Else
hDevInfo = SetupDiGetClassDevs(0, 0, 0, DIGCF_PRESENT + DIGCF_ALLCLASSES)
If hDevInfo <> INVALID_HANDLE_VALUE Then
Dim DeviceInfoData As SP_DEVINFO_DATA
Dim i As Long
Dim bDevInfo() As Byte
Dim sDeviceDescription As String, sDeviceClassName As String, sDeviceEnumeratorName As String, sDeviceFriendlyName As String, sDeviceClassGuid As String
DeviceInfoData.cbSize = Len(DeviceInfoData)
i = 0
Do While (SetupDiEnumDeviceInfo(hDevInfo, i, DeviceInfoData) <> 0)
sDeviceDescription = ""
sDeviceClassName = ""
sDeviceEnumeratorName = ""
sDeviceFriendlyName = ""
sDeviceClassGuid = ""
If GetDeviceRegInfo(hDevInfo, DeviceInfoData, SPDRP_DEVICEDESC, bDevInfo()) Then
sDeviceDescription = StrConv(bDevInfo, vbUnicode)
End If
If GetDeviceRegInfo(hDevInfo, DeviceInfoData, SPDRP_CLASS, bDevInfo()) Then
sDeviceClassName = StrConv(bDevInfo, vbUnicode)
End If
If GetDeviceRegInfo(hDevInfo, DeviceInfoData, SPDRP_ENUMERATOR_NAME, bDevInfo()) Then
sDeviceEnumeratorName = StrConv(bDevInfo, vbUnicode)
End If
If GetDeviceRegInfo(hDevInfo, DeviceInfoData, SPDRP_FRIENDLYNAME, bDevInfo()) Then
sDeviceFriendlyName = StrConv(bDevInfo, vbUnicode)
End If
If GetDeviceRegInfo(hDevInfo, DeviceInfoData, SPDRP_CLASSGUID, bDevInfo()) Then
sDeviceClassGuid = StrConv(bDevInfo, vbUnicode)
End If
RaiseEvent EnumDevicesProc(i, sDeviceDescription, sDeviceClassName, sDeviceFriendlyName, sDeviceEnumeratorName, sDeviceClassGuid)
i = i + 1
Loop
Call SetupDiDestroyDeviceInfoList(hDevInfo)
End If
End If
Exit Function
Error_Handler:
End Function
Public Function SetDeviceState(ByVal lDeviceIndex As Long, ByVal sDeviceClassGuid As String, Optional ByVal fEnabled As Boolean = True) As Boolean
Dim hDevInfo As Long
hDevInfo = SetupDiGetClassDevs(0, 0, 0, DIGCF_PRESENT + DIGCF_ALLCLASSES)
If hDevInfo <> INVALID_HANDLE_VALUE Then
Dim DeviceInfoData As SP_DEVINFO_DATA
Dim bDevInfo() As Byte
DeviceInfoData.cbSize = Len(DeviceInfoData)
If SetupDiEnumDeviceInfo(hDevInfo, lDeviceIndex, DeviceInfoData) <> 0 Then
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -