⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vbhardwarecontroller.cls

📁 获取硬件信息.比如停用启用什么的. 这个代码可以说非常有用哦.
💻 CLS
📖 第 1 页 / 共 3 页
字号:
            If GetDeviceRegInfo(hDevInfo, DeviceInfoData, SPDRP_CLASSGUID, bDevInfo()) Then
                If sDeviceClassGuid = StrConv(bDevInfo, vbUnicode) Then
                    Dim PropChangeParams  As SP_PROPCHANGE_PARAMS
                    
                    With PropChangeParams
                        .ClassInstallHeader.cbSize = Len(.ClassInstallHeader)
                        .ClassInstallHeader.InstallFunction = DIF_PROPERTYCHANGE
                        .Scope = DICS_FLAG_GLOBAL
                        .StateChange = IIf(fEnabled, DICS_ENABLE, DICS_DISABLE)
                        .HwProfile = 0
                    End With
                    
                    If SetupDiSetClassInstallParams(hDevInfo, DeviceInfoData, PropChangeParams.ClassInstallHeader, Len(PropChangeParams)) <> 0 Then
                        With PropChangeParams
                            .ClassInstallHeader.cbSize = Len(.ClassInstallHeader)
                            .ClassInstallHeader.InstallFunction = DIF_PROPERTYCHANGE
                            .Scope = DICS_FLAG_CONFIGSPECIFIC
                            .StateChange = IIf(fEnabled, DICS_ENABLE, DICS_DISABLE)
                            .HwProfile = 0
                        End With
                        If SetupDiSetClassInstallParams(hDevInfo, DeviceInfoData, PropChangeParams.ClassInstallHeader, Len(PropChangeParams)) <> 0 Then
                            If SetupDiCallClassInstaller(DIF_PROPERTYCHANGE, hDevInfo, DeviceInfoData) <> 0 Then
                                SetDeviceState = True
                            End If
                        End If
                    End If
                End If
            End If
        End If
                    
        Call SetupDiDestroyDeviceInfoList(hDevInfo)
    End If
    Exit Function
Error_Handler:
End Function

Public Function EjectMedia(ByVal sDriveLetter As String, Optional ByVal fEject As Boolean = True) As Long
    Dim hDevice As Long
    Dim ut As SECURITY_ATTRIBUTES
    Dim uto As OVERLAPPED
    Dim utDevDesc As STORAGE_DEVICE_DESCRIPTOR
    hDevice = CreateFile("\\.\" & sDriveLetter, GENERIC_READ, FILE_SHARE_READ Or FILE_SHARE_WRITE, ut, OPEN_EXISTING, 0, 0)
    If hDevice <> -1 Then
        If fEject Then
            EjectMedia = DeviceIoControl(hDevice, IOCTL_STORAGE_EJECT_MEDIA, ByVal 0, 0, ByVal 0, 0, ByVal 0, uto)
        Else
            EjectMedia = DeviceIoControl(hDevice, IOCTL_STORAGE_LOAD_MEDIA, ByVal 0, 0, ByVal 0, 0, ByVal 0, uto)
        End If
        Call CloseHandle(hDevice)
    End If
End Function

Public Function GetDriveBusType(ByVal sDriveLetter As String) As String
    Dim hDevice As Long
    Dim ut As SECURITY_ATTRIBUTES
    Dim utDevDesc As STORAGE_DEVICE_DESCRIPTOR
    hDevice = CreateFile("\\.\" & sDriveLetter, GENERIC_READ, FILE_SHARE_READ Or FILE_SHARE_WRITE, ut, OPEN_EXISTING, 0, 0)
    If hDevice <> -1 Then
        utDevDesc.Size = LenB(utDevDesc)
        Call GetDisksProperty(hDevice, utDevDesc)
        Select Case utDevDesc.BusType
            Case BusType1394
                GetDriveBusType = "1394"
            Case BusTypeAta
                GetDriveBusType = "Ata"
            Case BusTypeAtapi
                GetDriveBusType = "Atapi"
            Case BusTypeFibre
                GetDriveBusType = "Fibre"
            Case BusTypeRAID
                GetDriveBusType = "RAID"
            Case BusTypeScsi
                GetDriveBusType = "Scsi"
            Case BusTypeSsa
                GetDriveBusType = "Ssa"
            Case BusTypeUsb
                GetDriveBusType = "Usb"
            Case BusTypeUnknown
                GetDriveBusType = "未知"
            Case Else
        End Select
        Call CloseHandle(hDevice)
    End If
End Function

Public Function TellDriveType(ByVal sDriveLetter As String) As String
    
    Select Case GetDriveType(sDriveLetter)
        Case 0
            TellDriveType = "驱动器类型无法确定"
        Case 1
            TellDriveType = "驱动器根目录不存在"
        Case DRIVE_CDROM
            TellDriveType = "光盘驱动器"
        Case DRIVE_FIXED
            TellDriveType = "固定驱动器"
        Case DRIVE_RAMDISK
            TellDriveType = "RAM盘"
        Case DRIVE_REMOTE
            TellDriveType = "远程(网络)驱动器"
        Case DRIVE_REMOVABLE
            If UCase$(Left$(sDriveLetter, 1)) = "A" Or UCase$(Left$(sDriveLetter, 1)) = "B" Then
                TellDriveType = "软盘"
            Else
                TellDriveType = "其他"
            End If
            TellDriveType = "可移动驱动器 - " & TellDriveType
        Case Else
            TellDriveType = "未知"
    End Select
    TellDriveType = TellDriveType & " - " & GetDriveBusType(sDriveLetter) & "总线"
End Function

Public Function GetDriveNames(Optional cbo As ComboBox) As String()
    On Error Resume Next
    Dim asDrives() As String
    Dim lDriveBits As Long
    Dim i As Long, lCnt As Long
    Dim fMissing As Boolean
    fMissing = cbo Is Nothing
    
    lCnt = -1
    lDriveBits = GetLogicalDrives()
    For i = 1 To 26
        If (lDriveBits And 2 ^ (i - 1)) <> 0 Then
            lCnt = lCnt + 1
            ReDim asDrives(lCnt)
            asDrives(lCnt) = Chr$(65 + i - 1) & ":"
            If Not fMissing Then
                cbo.AddItem asDrives(lCnt)
            End If
        End If
    Next
    GetDriveNames = asDrives
End Function
'**************************************************************************
'*                                暴露的接口                              *
'**************************************************************************


'**************************************************************************
'******************************** 私有函数 ********************************
'**************************************************************************
Private Function CTL_CODE(ByVal lDeviceType As Long, ByVal lFunction As Long, ByVal lMethod As Long, ByVal lAccess As Long) As Long
    CTL_CODE = (lDeviceType * 2 ^ 16&) Or (lAccess * 2 ^ 14&) Or (lFunction * 2 ^ 2) Or (lMethod)
End Function

Private Function IOCTL_STORAGE_QUERY_PROPERTY() As Long
    IOCTL_STORAGE_QUERY_PROPERTY = CTL_CODE(IOCTL_STORAGE_BASE, &H500, METHOD_BUFFERED, FILE_ANY_ACCESS)
End Function

Private Function IOCTL_STORAGE_EJECT_MEDIA() As Long
    IOCTL_STORAGE_EJECT_MEDIA = CTL_CODE(IOCTL_STORAGE_BASE, &H202, METHOD_BUFFERED, FILE_READ_ACCESS)
End Function

Private Function IOCTL_STORAGE_LOAD_MEDIA() As Long
    IOCTL_STORAGE_LOAD_MEDIA = CTL_CODE(IOCTL_STORAGE_BASE, &H203, METHOD_BUFFERED, FILE_READ_ACCESS)
End Function

Private Function GetDisksProperty(ByVal hDevice As Long, utDevDesc As STORAGE_DEVICE_DESCRIPTOR) As Boolean
    Dim ut As OVERLAPPED
    Dim utQuery As STORAGE_PROPERTY_QUERY
    Dim lOutBytes As Long
    With utQuery
        .PropertyId = StorageDeviceProperty
        .QueryType = PropertyStandardQuery
    End With
    GetDisksProperty = DeviceIoControl(hDevice, IOCTL_STORAGE_QUERY_PROPERTY, utQuery, LenB(utQuery), utDevDesc, LenB(utDevDesc), lOutBytes, ut)
End Function

Private Function GetDeviceRegInfo(ByVal hDevInfo As Long, DeviceInfoData As SP_DEVINFO_DATA, ByVal lPropertyName As Long, bDevInfo() As Byte) As Boolean
    Dim lBufferSize As Long
    Dim lRegDataType As Long
    Call SetupDiGetDeviceRegistryProperty(hDevInfo, DeviceInfoData, lPropertyName, lRegDataType, 0, 0, lBufferSize)
    If Err.LastDllError = ERROR_INSUFFICIENT_BUFFER Then
        ReDim bDevInfo(lBufferSize * 2 - 1)
        Call SetupDiGetDeviceRegistryProperty(hDevInfo, DeviceInfoData, lPropertyName, lRegDataType, VarPtr(bDevInfo(0)), lBufferSize, ByVal 0)
        GetDeviceRegInfo = True
    End If
End Function

Friend Sub DEFINE_GUID(udtGuid As GUID, ByVal Data1 As Long, Data2 As Integer, Data3 As Integer, Data4_0 As Byte, Data4_1 As Byte, Data4_2 As Byte, Data4_3 As Byte, Data4_4 As Byte, Data4_5 As Byte, Data4_6 As Byte, Data4_7 As Byte)
    With udtGuid
        .Data1 = Data1
        .Data2 = Data2
        .Data3 = Data3
        .Data4(0) = Data4_0
        .Data4(1) = Data4_1
        .Data4(2) = Data4_2
        .Data4(3) = Data4_3
        .Data4(4) = Data4_4
        .Data4(5) = Data4_5
        .Data4(6) = Data4_6
        .Data4(7) = Data4_7
    End With
End Sub

Private Sub InitGuids()
    Call DEFINE_GUID(GUID_DEVCLASS_1394, &H6BDD1FC1, &H810F, &H11D0, &HBE, &HC7, &H8, &H0, &H2B, &HE2, &H9, &H2F)
    Call DEFINE_GUID(GUID_DEVCLASS_ADAPTER, &H4D36E964, &HE325, &H11CE, &HBF, &HC1, &H8, &H0, &H2B, &HE1, &H3, &H18)
    Call DEFINE_GUID(GUID_DEVCLASS_CDROM, &H4D36E965, &HE325, &H11CE, &HBF, &HC1, &H8, &H0, &H2B, &HE1, &H3, &H18)
    Call DEFINE_GUID(GUID_DEVCLASS_COMPUTER, &H4D36E966, &HE325, &H11CE, &HBF, &HC1, &H8, &H0, &H2B, &HE1, &H3, &H18)
    Call DEFINE_GUID(GUID_DEVCLASS_DECODER, &H6BDD1FC2, &H810F, &H11D0, &HBE, &HC7, &H8, &H0, &H2B, &HE2, &H9, &H2F)
    Call DEFINE_GUID(GUID_DEVCLASS_DISKDRIVE, &H4D36E967, &HE325, &H11CE, &HBF, &HC1, &H8, &H0, &H2B, &HE1, &H3, &H18)
    Call DEFINE_GUID(GUID_DEVCLASS_DISPLAY, &H4D36E968, &HE325, &H11CE, &HBF, &HC1, &H8, &H0, &H2B, &HE1, &H3, &H18)
    Call DEFINE_GUID(GUID_DEVCLASS_FDC, &H4D36E969, &HE325, &H11CE, &HBF, &HC1, &H8, &H0, &H2B, &HE1, &H3, &H18)
    Call DEFINE_GUID(GUID_DEVCLASS_GPS, &H6BDD1FC3, &H810F, &H11D0, &HBE, &HC7, &H8, &H0, &H2B, &HE2, &H9, &H2F)
    Call DEFINE_GUID(GUID_DEVCLASS_HDC, &H4D36E96A, &HE325, &H11CE, &HBF, &HC1, &H8, &H0, &H2B, &HE1, &H3, &H18)
    Call DEFINE_GUID(GUID_DEVCLASS_IMAGE, &H6BDD1FC4, &H810F, &H11D0, &HBE, &HC7, &H8, &H0, &H2B, &HE2, &H9, &H2F)
    Call DEFINE_GUID(GUID_DEVCLASS_INFRARED, &H6BDD1FC5, &H810F, &H11D0, &HBE, &HC7, &H8, &H0, &H2B, &HE2, &H9, &H2F)
    Call DEFINE_GUID(GUID_DEVCLASS_KEYBOARD, &H4D36E96B, &HE325, &H11CE, &HBF, &HC1, &H8, &H0, &H2B, &HE1, &H3, &H18)
    Call DEFINE_GUID(GUID_DEVCLASS_LEGACYDRIVER, &H8ECC055D, &H47F, &H11D1, &HA5, &H37, &H0, &H0, &HF8, &H75, &H3E, &HD1)
    Call DEFINE_GUID(GUID_DEVCLASS_MEDIA, &H4D36E96C, &HE325, &H11CE, &HBF, &HC1, &H8, &H0, &H2B, &HE1, &H3, &H18)
    Call DEFINE_GUID(GUID_DEVCLASS_MODEM, &H4D36E96D, &HE325, &H11CE, &HBF, &HC1, &H8, &H0, &H2B, &HE1, &H3, &H18)
    Call DEFINE_GUID(GUID_DEVCLASS_MONITOR, &H4D36E96E, &HE325, &H11CE, &HBF, &HC1, &H8, &H0, &H2B, &HE1, &H3, &H18)
    Call DEFINE_GUID(GUID_DEVCLASS_MOUSE, &H4D36E96F, &HE325, &H11CE, &HBF, &HC1, &H8, &H0, &H2B, &HE1, &H3, &H18)
    Call DEFINE_GUID(GUID_DEVCLASS_MTD, &H4D36E970, &HE325, &H11CE, &HBF, &HC1, &H8, &H0, &H2B, &HE1, &H3, &H18)
    Call DEFINE_GUID(GUID_DEVCLASS_MULTIFUNCTION, &H4D36E971, &HE325, &H11CE, &HBF, &HC1, &H8, &H0, &H2B, &HE1, &H3, &H18)
    Call DEFINE_GUID(GUID_DEVCLASS_NET, &H4D36E972, &HE325, &H11CE, &HBF, &HC1, &H8, &H0, &H2B, &HE1, &H3, &H18)
    Call DEFINE_GUID(GUID_DEVCLASS_NETCLIENT, &H4D36E973, &HE325, &H11CE, &HBF, &HC1, &H8, &H0, &H2B, &HE1, &H3, &H18)
    Call DEFINE_GUID(GUID_DEVCLASS_NETSERVICE, &H4D36E974, &HE325, &H11CE, &HBF, &HC1, &H8, &H0, &H2B, &HE1, &H3, &H18)
    Call DEFINE_GUID(GUID_DEVCLASS_NETTRANS, &H4D36E975, &HE325, &H11CE, &HBF, &HC1, &H8, &H0, &H2B, &HE1, &H3, &H18)
    Call DEFINE_GUID(GUID_DEVCLASS_NODRIVER, &H4D36E976, &HE325, &H11CE, &HBF, &HC1, &H8, &H0, &H2B, &HE1, &H3, &H18)
    Call DEFINE_GUID(GUID_DEVCLASS_PARALLE, &H811FC6A5, &HF728, &H11D0, &HA5, &H37, &H0, &H0, &HF8, &H75, &H3E, &HD1)
    Call DEFINE_GUID(GUID_DEVCLASS_PCMCIA, &H4D36E977, &HE325, &H11CE, &HBF, &HC1, &H8, &H0, &H2B, &HE1, &H3, &H18)
    Call DEFINE_GUID(GUID_DEVCLASS_PORTS, &H4D36E978, &HE325, &H11CE, &HBF, &HC1, &H8, &H0, &H2B, &HE1, &H3, &H18)
    Call DEFINE_GUID(GUID_DEVCLASS_PRINTER, &H4D36E979, &HE325, &H11CE, &HBF, &HC1, &H8, &H0, &H2B, &HE1, &H3, &H18)
    Call DEFINE_GUID(GUID_DEVCLASS_PRINTERUPGRADE, &H4D36E97A, &HE325, &H11CE, &HBF, &HC1, &H8, &H0, &H2B, &HE1, &H3, &H18)
    Call DEFINE_GUID(GUID_DEVCLASS_SCSIADAPTER, &H4D36E97B, &HE325, &H11CE, &HBF, &HC1, &H8, &H0, &H2B, &HE1, &H3, &H18)
    Call DEFINE_GUID(GUID_DEVCLASS_SOUND, &H4D36E97C, &HE325, &H11CE, &HBF, &HC1, &H8, &H0, &H2B, &HE1, &H3, &H18)
    Call DEFINE_GUID(GUID_DEVCLASS_STILLIMAGE, &H6BDD1FC6, &H810F, &H11D0, &HBE, &HC7, &H8, &H0, &H2B, &HE2, &H9, &H2F)
    Call DEFINE_GUID(GUID_DEVCLASS_SYSTEM, &H4D36E97D, &HE325, &H11CE, &HBF, &HC1, &H8, &H0, &H2B, &HE1, &H3, &H18)
    Call DEFINE_GUID(GUID_DEVCLASS_TAPEDRIVE, &H6D807884, &H7D21, &H11CF, &H80, &H1C, &H8, &H0, &H2B, &HE1, &H3, &H18)
    Call DEFINE_GUID(GUID_DEVCLASS_UNKNOWN, &H4D36E97E, &HE325, &H11CE, &HBF, &HC1, &H8, &H0, &H2B, &HE1, &H3, &H18)
    Call DEFINE_GUID(GUID_DEVCLASS_VOLUME, &H71A27CDD, &H812A, &H11D0, &HBE, &HC7, &H8, &H0, &H2B, &HE2, &H9, &H2F)
End Sub

Private Sub Class_Initialize()
    Call InitGuids
End Sub


'**************************************************************************
'******************************** 私有函数 ********************************
'**************************************************************************

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -