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

📄 registry.bas

📁 能处理星际争霸
💻 BAS
字号:
Attribute VB_Name = "RegistryFunctions"
Option Explicit

Private Const HKEY_CLASSES_ROOT = &H80000000
Private Const HKEY_CURRENT_USER = &H80000001
Private Const HKEY_LOCAL_MACHINE = &H80000002
Private Const HKEY_USERS = &H80000003
Private Const HKEY_PERFORMANCE_DATA = &H80000004
Private Const HKEY_CURRENT_CONFIG = &H80000005
Private Const HKEY_DYN_DATA = &H80000006
Private Const STANDARD_RIGHTS_ALL = &H1F0000
Private Const KEY_QUERY_VALUE = &H1
Private Const KEY_SET_VALUE = &H2
Private Const KEY_CREATE_SUB_KEY = &H4
Private Const KEY_ENUMERATE_SUB_KEYS = &H8
Private Const KEY_NOTIFY = &H10
Private Const SYNCHRONIZE = &H100000
Private Const KEY_CREATE_LINK = &H20
Private Const KEY_ALL_ACCESS = ((STANDARD_RIGHTS_ALL Or _
    KEY_QUERY_VALUE Or KEY_SET_VALUE Or KEY_CREATE_SUB_KEY _
    Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY Or _
    KEY_CREATE_LINK) And (Not SYNCHRONIZE))
Private Const REG_OPTION_NON_VOLATILE = 0
Global Const REG_NONE = 0
Global Const REG_SZ = 1
Global Const REG_EXPAND_SZ = 2
Global Const REG_BINARY = 3
Global Const REG_DWORD = 4
Global Const REG_DWORD_LITTLE_ENDIAN = 4 ' Same as REG_DWORD
Global Const REG_DWORD_BIG_ENDIAN = 5
Global Const REG_LINK = 6
Global Const REG_MULTI_SZ = 7
Global Const REG_RESOURCE_LIST = 8
Global Const REG_FULL_RESOURCE_DESCRIPTOR = 9
Global Const REG_RESOURCE_REQUIREMENTS_LIST = 10

Private Const REG_CREATED_NEW_KEY = &H1
Private Const REG_OPENED_EXISTING_KEY = &H2

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 RegEnumValue Lib "advapi32.dll" _
    Alias "RegEnumValueA" (ByVal hKey As Long, ByVal dwIndex _
    As Long, lpValueName As String, lpcbValueName As Long, ByVal _
    lpReserved As Long, lpType As Long, lpData As Any, lpcbData As _
    Long) As Long
Private Declare Function RegEnumKeyEx Lib "advapi32.dll" _
    Alias "RegEnumKeyExA" (ByVal hKey As Long, ByVal dwIndex _
    As Long, lpName As String, lpcbName As Long, ByVal _
    lpReserved As Long, lpClass As String, lpcbClass As _
    Long, lpftLastWriteTime As Any) 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 Function RegCreateKeyEx Lib "advapi32.dll" _
    Alias "RegCreateKeyExA" (ByVal hKey As Long, ByVal lpSubKey _
    As String, ByVal Reserved As Long, ByVal lpClass As String, _
    ByVal dwOptions As Long, ByVal samDesired As Long, _
    lpSecurityAttributes As Any, phkResult _
    As Long, lpdwDisposition As Long) As Long
Private Declare Function RegSetValueEx Lib "advapi32.dll" _
    Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName _
    As String, ByVal Reserved As Long, ByVal dwType As Long, _
    lpData As Any, ByVal cbData As Long) As Long
Private Declare Function RegDeleteValue Lib "advapi32.dll" _
    Alias "RegDeleteValueA" (ByVal hKey As Long, ByVal _
    lpValueName As String) As Long
Private Declare Function RegDeleteKey Lib "advapi32.dll" Alias _
    "RegDeleteKeyA" (ByVal hKey As Long, ByVal lpSubKey As String) As Long
Sub ConvertValueName(Path As String, ByRef hKey As Long, ByRef Key As String, ValueName As String)
Dim Data As String, bNum As Long
Data = Mid$(Path, 1, InStr(Path, "\") - 1)
Select Case Data
Case "HKEY_CLASSES_ROOT"
hKey = HKEY_CLASSES_ROOT
Case "HKEY_CURRENT_USER"
hKey = HKEY_CURRENT_USER
Case "HKEY_LOCAL_MACHINE"
hKey = HKEY_LOCAL_MACHINE
Case "HKEY_USERS"
hKey = HKEY_USERS
Case "HKEY_PERFORMANCE_DATA"
hKey = HKEY_PERFORMANCE_DATA
Case "HKEY_CURRENT_CONFIG"
hKey = HKEY_CURRENT_CONFIG
Case "HKEY_DYN_DATA"
hKey = HKEY_DYN_DATA
End Select
bNum = 1
Do Until InStr(bNum, Path, "\") = 0
bNum = InStr(bNum, Path, "\") + 1
Loop
On Error Resume Next
Key = Mid$(Path, Len(Data) + 2, bNum - 2 - (Len(Data) + 1))
ValueName = Mid$(Path, bNum)
On Error GoTo 0
End Sub
Function GetReg(Path As String, Optional Default)
Attribute GetReg.VB_Description = "Reads a value from the registry."
Dim hKey As Long, kHandle As Long, Key As String, ValueName As String, Data As String, vLen As Long, vType As Long, NumData As Long
ConvertValueName Path, hKey, Key, ValueName
If RegOpenKeyEx(hKey, Key, 0&, KEY_QUERY_VALUE, kHandle) = 0 Then
    If RegQueryValueEx(kHandle, ValueName, 0&, vType, ByVal 0&, vLen) = 0 Then
        Data = String$(vLen, Chr$(0))
        If vType = REG_DWORD Or vType = REG_DWORD_BIG_ENDIAN Then
            If RegQueryValueEx(kHandle, ValueName, 0&, 0&, NumData, vLen) = 0 Then
                GetReg = NumData
            End If
        Else
            If RegQueryValueEx(kHandle, ValueName, 0&, 0&, ByVal Data, vLen) = 0 Then
                If vType = REG_SZ Or vType = REG_EXPAND_SZ Or vType = REG_MULTI_SZ Then
                    Data = Left$(Data, vLen - 1)
                    If Data <> "" Then GetReg = Data
                Else
                    GetReg = Data
                End If
            End If
        End If
    End If
    RegCloseKey kHandle
    If Not IsEmpty(GetReg) Then Exit Function
End If
If Not IsError(Default) Then GetReg = Default
End Function
Function GetRegType(Path As String) As Long
Dim hKey As Long, kHandle As Long, Key As String, ValueName As String, Data As String, vLen As Long, vType As Long
ConvertValueName Path, hKey, Key, ValueName
If RegOpenKeyEx(hKey, Key, 0&, KEY_QUERY_VALUE, kHandle) = 0 Then
    If RegQueryValueEx(kHandle, ValueName, 0&, vType, ByVal 0&, ByVal 0&) Then
        GetRegType = vType
    End If
    RegCloseKey kHandle
End If
End Function
Function EnumReg(ByVal Path As String, Index As Long) As String
Dim hKey As Long, kHandle As Long, Key As String, ValueName As String, Data As String, vLen As Long
If Right$(Path, 1) <> "\" Then Path = Path + "\"
ConvertValueName Path, hKey, Key, ValueName
ValueName = ""
If RegOpenKeyEx(hKey, Key, 0&, KEY_QUERY_VALUE, kHandle) = 0 Then
    vLen = 255
    Data = String$(255, Chr$(0))
    If RegEnumValue(kHandle, Index, ByVal Data, vLen, 0&, 0&, ByVal 0&, 0&) = 0 Then
        Data = Left$(Data, vLen)
        If Data = String$(255, Chr$(0)) Then Data = ""
        EnumReg = Data
    End If
    RegCloseKey kHandle
End If
End Function
Function EnumKey(ByVal Path As String, Index As Long) As String
Dim hKey As Long, kHandle As Long, Key As String, ValueName As String, Data As String, vLen As Long
If Right$(Path, 1) <> "\" Then Path = Path + "\"
ConvertValueName Path, hKey, Key, ValueName
ValueName = ""
If RegOpenKeyEx(hKey, Key, 0&, KEY_ENUMERATE_SUB_KEYS, kHandle) = 0 Then
    vLen = 255
    Data = String$(255, Chr$(0))
    If RegEnumKeyEx(kHandle, Index, ByVal Data, vLen, 0&, ByVal 0&, 0&, ByVal 0&) = 0 Then
        Data = Left$(Data, vLen)
        If Data = String$(255, Chr$(0)) Then Data = ""
        EnumKey = Data
    End If
    RegCloseKey kHandle
End If
End Function
Sub MultiStringToArray(MultiString As String, ByRef StrArray() As String)
Dim cNum As Long, cNum2 As Long
ReDim StrArray(0)
For cNum = 1 To Len(MultiString)
    cNum2 = InStr(cNum, MultiString, Chr(0))
    If cNum2 = 0 Then cNum2 = Len(MultiString) + 1
    ReDim Preserve StrArray(UBound(StrArray) + 1)
    StrArray(UBound(StrArray)) = Mid$(MultiString, cNum, cNum2 - cNum)
    cNum = cNum2
Next cNum
End Sub
Sub ArrayToMultiString(StrArray() As String, ByRef MultiString As String)
Dim sNum As Long
MultiString = ""
For sNum = 1 To UBound(StrArray)
    MultiString = MultiString + StrArray(sNum) + Chr$(0)
Next sNum
End Sub
Sub NewKey(ByVal Path As String, Optional Default, Optional vType)
Attribute NewKey.VB_Description = "Creates a new key in the registry."
Dim hKey As Long, kHandle As Long, Key As String, ValueName As String, Temp As Long, Setg As String, NumData As Long
If Right$(Path, 1) <> "\" Then Path = Path + "\"
ConvertValueName Path, hKey, Key, ValueName
ValueName = ""
If RegCreateKeyEx(hKey, Key, 0&, 0&, REG_OPTION_NON_VOLATILE, KEY_CREATE_SUB_KEY Or KEY_SET_VALUE, ByVal 0&, kHandle, Temp) = 0 Then
    If Not IsError(Default) Then
        If IsError(vType) Then vType = REG_SZ
        If vType = REG_DWORD Or vType = REG_DWORD_BIG_ENDIAN Then
            NumData = Default
            RegSetValueEx kHandle, ValueName, 0&, vType, NumData, 4
        Else
            Setg = Default
            If vType = REG_SZ Or vType = REG_EXPAND_SZ Or vType = REG_MULTI_SZ Then _
                Setg = Setg + Chr$(0)
            RegSetValueEx kHandle, ValueName, 0&, vType, ByVal Setg, Len(Setg)
        End If
    End If
    RegCloseKey kHandle
End If
End Sub
Sub SetReg(Path As String, NewValue, Optional vType)
Attribute SetReg.VB_Description = "Writes a value to the registry."
Dim hKey As Long, kHandle As Long, Key As String, ValueName As String, Setg As String, NumData As Long
ConvertValueName Path, hKey, Key, ValueName
If RegOpenKeyEx(hKey, Key, 0&, KEY_SET_VALUE, kHandle) = 0 Then
    If IsError(vType) Then vType = REG_SZ
    If vType = REG_DWORD Or vType = REG_DWORD_BIG_ENDIAN Then
        NumData = NewValue
        RegSetValueEx kHandle, ValueName, 0&, vType, NumData, 4
    Else
        Setg = NewValue
        If vType = REG_SZ Or vType = REG_EXPAND_SZ Or vType = REG_MULTI_SZ Then _
            Setg = Setg + Chr$(0)
        RegSetValueEx kHandle, ValueName, 0&, vType, ByVal Setg, Len(Setg)
    End If
    RegCloseKey kHandle
End If
End Sub
Sub DelReg(Path As String)
Attribute DelReg.VB_Description = "Deletes a value from the registry."
Dim hKey As Long, kHandle As Long, Key As String, ValueName As String
ConvertValueName Path, hKey, Key, ValueName
If RegOpenKeyEx(hKey, Key, 0&, KEY_SET_VALUE, kHandle) = 0 Then
    RegDeleteValue kHandle, ValueName
    RegCloseKey kHandle
End If
End Sub
Sub DelKey(ByVal Path As String)
Attribute DelKey.VB_Description = "Deletes a key from the registry."
Dim hKey As Long, Key As String, Data As String
If Right$(Path, 1) <> "\" Then Path = Path + "\"
ConvertValueName Path, hKey, Key, Data
RegDeleteKey hKey, Key
End Sub

⌨️ 快捷键说明

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