Informace o BIOSu

Postup:
V deklarační části formuláře zapište:

Private Declare Function RegOpenKeyEx Lib "advapi32.dll" _
    Alias "RegOpenKeyExA" (ByVal hKey As Long, _
    ByVal lpSubKey As String, ByVal ulOptions As Long, _
    ByVal samDesired As Long, phkResult As Long) As Long

Private Declare Function RegCloseKey Lib "advapi32.dll" _
    (ByVal hKey As Long) As Long

Private Declare Function RegQueryValueEx Lib "advapi32.dll" Alias _
    "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, _
    ByVal lpReserved As Long, lpType As Long, lpData As Any, _
    lpcbData As Long) As Long

Private Declare Sub CopyMemory Lib "kernel32" Alias _
"RtlMoveMemory" (dest As  Any, source As Any, ByVal numBytes As Long)

Const KEY_READ = &H20019 
Const REG_SZ = 1
Const REG_EXPAND_SZ = 2
Const REG_BINARY = 3
Const REG_DWORD = 4
Const REG_MULTI_SZ = 7
Const ERROR_MORE_DATA = 234
Const HKEY_LOCAL_MACHINE = &H80000002

Function GetRegistryValue(ByVal hKey As Long, ByVal KeyName As String, _
    ByVal ValueName As String, Optional DefaultValue As Variant) As Variant

    Dim handle As Long
    Dim resLong As Long
    Dim resString As String
    Dim resBinary() As Byte
    Dim length As Long
    Dim retVal As Long
    Dim valueType As Long
    
    GetRegistryValue = IIf(IsMissing(DefaultValue), Empty, DefaultValue)
    
    If RegOpenKeyEx(hKey, KeyName, 0, KEY_READ, handle) Then
        Exit Function
    End If
    
    length = 1024
    ReDim resBinary(0 To length - 1) As Byte
    
    retVal = RegQueryValueEx(handle, ValueName, 0, valueType, resBinary(0), _
        length)
    If retVal = ERROR_MORE_DATA Then
        ReDim resBinary(0 To length - 1) As Byte
        retVal = RegQueryValueEx(handle, ValueName, 0, _
            valueType, resBinary(0), length)
    End If
    
    Select Case valueType
        Case REG_DWORD
            CopyMemory resLong, resBinary(0), 4
            GetRegistryValue = resLong
        Case REG_SZ, REG_EXPAND_SZ
            resString = Space$(length - 1)
            CopyMemory ByVal resString, resBinary(0), length - 1
            GetRegistryValue = resString
        Case REG_BINARY
            If length <> UBound(resBinary) + 1 Then
                ReDim Preserve resBinary(0 To length - 1) As Byte
            End If
            GetRegistryValue = resBinary()
        Case REG_MULTI_SZ
            resString = Space$(length - 2)
            CopyMemory ByVal resString, resBinary(0), length - 2
            GetRegistryValue = resString
        Case Else
            RegCloseKey handle
            Err.Raise 1001, , "Neznámý typ hodnoty"
    End Select
    
    RegCloseKey handle

End Function


Sub GetBiosInfo(BiosDate As String, BiosVersion As String)

    BiosDate = GetRegistryValue(HKEY_LOCAL_MACHINE, _
        "Hardware\Description\System", "SystemBiosDate", "")
    BiosVersion = GetRegistryValue(HKEY_LOCAL_MACHINE, _
        "Hardware\Description\System", "SystemBiosVersion", "")

End Sub

Použití:
Na formulář přidejte tlačítko a na jeho událost Click zapište:

Dim Datum as String
Dim Verze as String

Call GetBiosInfo (Datum, Verze)
MsgBox Verze & Chr(13) & Datum

Zpět

Autor: The Bozena