regprocess.bas

来自「一个clock的 vb 源码」· BAS 代码 · 共 133 行

BAS
133
字号
Attribute VB_Name = "RegProcess"
Option Explicit
'-------------------------------------------------------------------------------
' Registry Functions
' RegCreateKeyEx        在指定项下创建新的注册表项
' RegSetValueEx         用于设置指定项的值
' RegOpenKeyEx          在指定的项下创建或打开一个项
' RegQueryValueEx       用于获取一个项的设置值
' RegCloseKey           用于关闭系统注册表中的一个项(或键)
' RegDeleteKey          删除现有项下方一个指定的子项
' RegDeleteValue        删除指定项下方的一个值
'-------------------------------------------------------------------------------
Public 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 SECURITY_ATTRIBUTES, phkResult As Long, lpdwDisposition As Long) As Long

Public Declare Function RegSetValueExAny Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpValue As Any, ByVal cbData As Long) As Long
Public Declare Function RegSetValueExLong Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpValue As Long, ByVal cbData As Long) As Long
Public Declare Function RegSetValueExString Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, ByVal lpData As String, ByVal cbData As Long) As Long

Public Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, ByRef lpType As Long, lpData As Long, ByRef pcbData As Long) As Long
Public Declare Function RegQueryValueExString Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, ByVal lpData As String, lpcbData As Long) As Long
Public Declare Function RegQueryValueExByte Lib "advapi32" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, ByRef lpType As Long, szData As Byte, ByRef lpcbData As Long) As Long

Public 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
Public Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
Public Declare Function RegDeleteKey Lib "advapi32.dll" Alias "RegDeleteKeyA" (ByVal hKey As Long, ByVal lpSubKey As String) As Long
Public Declare Function RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName As String) As Long
'--------------------------------------------------------------------------------

Public Function CreateRegKey(KeyRoot As Long, lpSubKey As String, lpValueName As String, ValueType As Long, SubKeyValue As Variant) As Boolean
    Dim lpAttr As SECURITY_ATTRIBUTES
    Dim hKey As Long, RValues As Long, lpdwDisposition As Long
    
    lpAttr.nLength = 50                  ' 设置安全属性为缺省值...
    lpAttr.lpSecurityDescriptor = 0          ' ...
    lpAttr.bInheritHandle = True
        
        RValues = RegCreateKeyEx(KeyRoot, lpSubKey, 0&, "", REG_OPTION_NON_VOLATILE, _
                  KEY_ALL_ACCESS, lpAttr, hKey, lpdwDisposition)
        If (RValues <> ERROR_SUCCESS) Then: GoTo CreateKeyError
    
    Select Case ValueType
        Case REG_SZ
            RValues = RegSetValueExString(hKey, lpValueName, 0&, ValueType, SubKeyValue, LenB(StrConv(SubKeyValue, vbFromUnicode)))
            If (RValues <> ERROR_SUCCESS) Then: GoTo CreateKeyError
        Case REG_DWORD
            RValues = RegSetValueExLong(hKey, lpValueName, 0&, ValueType, SubKeyValue, 4)
            If (RValues <> ERROR_SUCCESS) Then: GoTo CreateKeyError
    End Select
    Call RegCloseKey(hKey)
    CreateRegKey = True
    Exit Function
CreateKeyError:
    Call RegCloseKey(hKey)
    CreateRegKey = False
End Function

Public Function GetReghKey(KeyRoot As Long, KeyName As String) As Long
    Dim ReturnValues As Long
    Dim hKey As Long
    ReturnValues = RegOpenKeyEx(KeyRoot, KeyName, 0, KEY_ALL_ACCESS, hKey)
    If ReturnValues <> 0 Then
        GetReghKey = 0
        Call RegCloseKey(hKey)
        Exit Function
    Else
        GetReghKey = hKey
    End If
   
End Function

Public Function GetKeyValue(KeyRoot As Long, KeyName As String, SubKeyRef As String) As Variant
    Dim hKey As Long
    Dim hDepth As Long
    Dim RValues As Long
    Dim lKeyValType As Long             ' 数据类型
   
    Dim tmpVal As String                ' 临时存储器
    Dim KeyValSize As Long              ' 变量尺寸
    Dim sKeyVal As String
    
    ' 打开注册表关键字
    RValues = RegOpenKeyEx(KeyRoot, KeyName, 0, KEY_ALL_ACCESS, hKey)
    If (RValues <> ERROR_SUCCESS) Then: GoTo GetKeyError   ' 处理错误...
    
    tmpVal = String$(1024, 0)                             ' 分配变量空间
    KeyValSize = 1024                                      ' 标记变量尺寸
    
    Call RegQueryValueExString(hKey, SubKeyRef, 0&, lKeyValType, tmpVal, KeyValSize)
    Select Case lKeyValType                                 '
        Case REG_SZ
            GetKeyValue = Left$(tmpVal, InStr(tmpVal, vbNullChar) - 1)
        Case REG_DWORD
            Call RegQueryValueEx(hKey, SubKeyRef, 0, lKeyValType, hDepth, 4)
            GetKeyValue = CStr(hDepth)
        Case REG_BINARY
            Dim ByteData() As Byte
            ReDim ByteData(KeyValSize) '(KeyValSize 从1开始算即(01 01 01 01)为4而不是3)
            Call RegQueryValueExByte(hKey, SubKeyRef, 0&, lKeyValType, ByteData(0), KeyValSize)
            GetKeyValue = ByteData
        End Select
        Call RegCloseKey(hKey)
    Exit Function
GetKeyError:
    GetKeyValue = vbNullString
    Call RegCloseKey(hKey)
End Function

Public Function DelRegkey(KeyRoot As Long, lpSubKey As String, SubKeyName As String) As Boolean
    Dim hKey As Long, RValue As Long
    RValue = RegOpenKeyEx(KeyRoot, lpSubKey, 0, KEY_ALL_ACCESS, hKey)
    RValue = RegDeleteKey(hKey, SubKeyName)
    If RValue <> 0 Then
        Call RegCloseKey(hKey)
        Exit Function
    End If
    Call RegCloseKey(hKey)
End Function

Public Function DelRegSubkey(KeyRoot As Long, lpSubKey As String, lpValueName As String) As Boolean
    Dim hKey As Long, RValue As Long
    RValue = RegOpenKeyEx(KeyRoot, lpSubKey, 0, KEY_ALL_ACCESS, hKey)
    If RValue <> 0 Then: GoTo DelResError
    Call RegDeleteValue(hKey, lpValueName)
    Call RegCloseKey(hKey)
    Exit Function
DelResError:
    Call RegCloseKey(hKey)
    DelRegSubkey = False
End Function



⌨️ 快捷键说明

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