VB 注册表操作模块 代码

这个模块提供了创建、删除、查询注册表键值的功能,包括RegCreateKey, RegDeleteKey, RegQueryValue等函数,适用于VB开发者进行注册表操作。" 109460657,9783028,Shell Here Document与Expect详解:自动化交互流程,"['shell', 'linux', 'expect', '免交互']
Attribute VB_Name  =   " Reg_Operation "
' 这是一个操作注册表的Bas文件,其中包含可以建立新键值,删除键值,查询键值的函数.Powered by barenx
Option   Explicit
Option  Base  0
Public   Declare   Function RegCloseKey Lib "advapi32.dll" (ByVal hkey As LongAs Long
Public Declare Function RegConnectRegistry Lib "advapi32.dll" Alias "RegConnectRegistryA" (ByVal lpMachineName As StringByVal hkey As Long, phkResult As LongAs Long
Public Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hkey As LongByVal lpSubKey As String, phkResult As LongAs Long
Public Declare Function RegCreateKeyEx Lib "advapi32.dll" Alias "RegCreateKeyExA" (ByVal hkey As LongByVal lpSubKey As StringByVal Reserved As LongByVal lpClass As StringByVal dwOptions As LongByVal samDesired As Long, lpSecurityAttributes As SECURITY_ATTRIBUTES, phkResult As Long, lpdwDisposition As LongAs Long
Public Declare Function RegDeleteKey Lib "advapi32.dll" Alias "RegDeleteKeyA" (ByVal hkey As LongByVal lpSubKey As StringAs Long
Public Declare Function RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal hkey As LongByVal lpValueName As StringAs Long
Public Declare Function RegEnumKey Lib "advapi32.dll" Alias "RegEnumKeyA" (ByVal hkey As LongByVal dwIndex As LongByVal lpName As StringByVal cbName As LongAs Long
Public Declare Function RegEnumKeyEx Lib "advapi32.dll" Alias "RegEnumKeyExA" (ByVal hkey As LongByVal dwIndex As LongByVal lpName As String, lpcbName As LongByVal lpReserved As LongByVal lpClass As String, lpcbClass As Long, lpftLastWriteTime As FILETIME) As Long
Public Declare Function RegEnumValue Lib "advapi32.dll" Alias "RegEnumValueA" (ByVal hkey As LongByVal dwIndex As LongByVal lpValueName As String, lpcbValueName As LongByVal lpReserved As Long, lpType As Long, lpData As Byte, lpcbData As LongAs Long
Public Declare Function RegFlushKey Lib "advapi32.dll" (ByVal hkey As LongAs Long
Public Declare Function RegGetKeySecurity Lib "advapi32.dll" (ByVal hkey As LongByVal SecurityInformation As Long, pSecurityDescriptor As SECURITY_DESCRIPTOR, lpcbSecurityDescriptor As LongAs Long
Public Declare Function RegLoadKey Lib "advapi32.dll" Alias "RegLoadKeyA" (ByVal hkey As LongByVal lpSubKey As StringByVal lpFile As StringAs Long
Public Declare Function RegNotifyChangeKeyValue Lib "advapi32.dll" (ByVal hkey As LongByVal bWatchSubtree As LongByVal dwNotifyFilter As LongByVal hEvent As LongByVal fAsynchronus As LongAs Long
Public Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hkey As LongByVal lpSubKey As String, phkResult As LongAs Long
Public Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" (ByVal hkey As LongByVal lpSubKey As StringByVal ulOptions As LongByVal samDesired As Long, phkResult As LongAs Long
Public Declare Function RegQueryInfoKey Lib "advapi32.dll" Alias "RegQueryInfoKeyA" (ByVal hkey As LongByVal lpClass As String, lpcbClass As LongByVal lpReserved As Long, lpcSubKeys As Long, lpcbMaxSubKeyLen As Long, lpcbMaxClassLen As Long, lpcValues As Long, lpcbMaxValueNameLen As Long, lpcbMaxValueLen As Long, lpcbSecurityDescriptor As Long, lpftLastWriteTime As FILETIME) As Long
Public Declare Function RegQueryValue Lib "advapi32.dll" Alias "RegQueryValueA" (ByVal hkey As LongByVal lpSubKey As StringByVal lpValue As String, lpcbValue As LongAs Long
Public Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hkey As LongByVal lpValueName As StringByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As LongAs Long
Public Declare Function RegReplaceKey Lib "advapi32.dll" Alias "RegReplaceKeyA" (ByVal hkey As LongByVal lpSubKey As StringByVal lpNewFile As StringByVal lpOldFile As StringAs Long
Public Declare Function RegRestoreKey Lib "advapi32.dll" Alias "RegRestoreKeyA" (ByVal hkey As LongByVal lpFile As StringByVal dwFlags As LongAs Long
Public Declare Function RegSaveKey Lib "advapi32.dll" Alias "RegSaveKeyA" (ByVal hkey As LongByVal lpFile As String, lpSecurityAttributes As SECURITY_ATTRIBUTES) As Long
Public Declare Function RegSetKeySecurity Lib "advapi32.dll" (ByVal hkey As LongByVal SecurityInformation As Long, pSecurityDescriptor As SECURITY_DESCRIPTOR) As Long
Public Declare Function RegSetValue Lib "advapi32.dll" Alias "RegSetValueA" (ByVal hkey As LongByVal lpSubKey As StringByVal dwType As LongByVal lpData As StringByVal cbData As LongAs Long
Public Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hkey As LongByVal lpValueName As StringByVal Reserved As LongByVal dwType As Long, lpData As Any, ByVal cbData As LongAs Long
Public Declare Function RegUnLoadKey Lib "advapi32.dll" Alias "RegUnLoadKeyA" (ByVal hkey As LongByVal lpSubKey As StringAs Long
Public Type FILETIME
        dwLowDateTime 
As Long
        dwHighDateTime 
As Long
End Type

Public Type SECURITY_ATTRIBUTES
        nLength 
As Long
        bInheritHandle 
As Long
        lpSecurityDescriptor 
As Long
End Type

Public Type ACL
        AclRevision 
As Byte
        AceCount 
As Integer
        Sbz2 
As Integer
        AclSize 
As Integer
        Sbz1 
As Byte
End Type

Public Type SECURITY_DESCRIPTOR
        Revision 
As Byte
        Sacl 
As ACL
        Dacl 
As ACL
        Owner 
As Long
        Group 
As Long
        Control 
As Long
        Sbz1 
As Byte
End Type
Public Const REG_BINARY = 3
Public Const REG_CREATED_NEW_KEY = &H1
Public Const REG_DWORD_BIG_ENDIAN = 5
Public Const REG_DWORD_LITTLE_ENDIAN = 4
Public Const REG_EXPAND_SZ = 2
Public Const REG_FORCE_RESTORE = (&H8)
Public Const REG_FULL_RESOURCE_DESCRIPTOR = 9
Public Const REG_KEY_INSTDEV = ("Installed")
Public Const REG_LINK = 6
Public Const REG_NONE = 0
Public Const REG_MULTI_SZ = 7
Public Const REG_NOTIFY_CHANGE_ATTRIBUTES = &H2
Public Const REG_NOTIFY_CHANGE_LAST_SET = &H4
Public Const REG_NOTIFY_CHANGE_NAME = &H1
Public Const REG_NOTIFY_CHANGE_SECURITY = &H8
Public Const REG_NO_LAZY_FLUSH = &H4
Public Const REG_OPENED_EXISTING_KEY = &H2
Public Const REG_OPTION_BACKUP_RESTORE = 4
Public Const REG_OPTION_CREATE_LINK = 2
Public Const REG_OPTION_NON_VOLATILE = 0
Public Const REG_OPTION_OPEN_LINK = &H8
Public Const REG_OPTION_RESERVED = 0
Public Const REG_OPTION_VOLATILE = 1
Public Const REG_QWORD = 11
Public Const REG_QWORD_LITTLE_ENDIAN = 11
Public Const REG_REFRESH_HIVE = &H2
Public Const REG_RESOURCE_LIST = 8
Public Const REG_RESOURCE_REQUIREMENTS_LIST = 10
Public Const REG_RESTORE_LOG_KEY = "RegRestoreLogFile"
Public Const MORE_ROWS = -1
Public Const REG_ROW = MORE_ROWS
Public Const REG_SAVE_LOG_KEY = "RegSaveLogFile"
Public Const REG_SZ = 1
Public Const REG_WHOLE_HIVE_VOLATILE = &H1
Public Const REG_LEGAL_OPTION = (REG_OPTION_RESERVED Or REG_OPTION_NON_VOLATILE Or REG_OPTION_VOLATILE Or REG_OPTION_CREATE_LINK Or REG_OPTION_BACKUP_RESTORE)
Public Const REG_LEGAL_CHANGE_FILTER = (REG_NOTIFY_CHANGE_NAME Or REG_NOTIFY_CHANGE_ATTRIBUTES Or REG_NOTIFY_CHANGE_LAST_SET Or REG_NOTIFY_CHANGE_SECURITY)

Public Const HKEY_CLASSES_ROOT = &H80000000
Public Const HKEY_CURRENT_CONFIG = &H80000005
Public Const HKEY_CURRENT_USER = &H80000001
Public Const HKEY_DYN_DATA = &H80000006
Public Const HKEY_LOCAL_MACHINE = &H80000002
Public Const HKEY_PERFORMANCE_DATA = &H80000004
Public Const HKEY_USERS = &H80000003

Public Const ERROR_SUCCESS = 0&
Public Const ERROR_NONE = 0
Public Const ERROR_BADDB = 1
Public Const ERROR_BADKEY = 2
Public Const ERROR_CANTOPEN = 3
Public Const ERROR_CANTREAD = 4
Public Const ERROR_CANTWRITE = 5
Public Const ERROR_OUTOFMEMORY = 6
Public Const ERROR_INVALID_PARAMETER = 7
Public Const ERROR_ACCESS_DENIED = 8
Public Const ERROR_INVALID_PARAMETERS = 87
Public Const ERROR_NO_MORE_ITEMS = 259&

Public Const BUFFER_SIZE As Long = 255

Public Const READ_CONTROL = &H20000
Public Const SYNCHRONIZE = &H100000

Public Const STANDARD_RIGHTS_ALL = &H1F0000
Public Const STANDARD_RIGHTS_EXECUTE = (READ_CONTROL)
Public Const STANDARD_RIGHTS_READ = (READ_CONTROL)
Public Const STANDARD_RIGHTS_REQUIRED = &HF0000
Public Const STANDARD_RIGHTS_WRITE = (READ_CONTROL)

Public Const KEY_CREATE_LINK = &H20
Public Const KEY_CREATE_SUB_KEY = &H4
Public Const KEY_ENUMERATE_SUB_KEYS = &H8
Public Const KEY_EVENT = &H1
Public Const KEY_LENGTH_MASK = &HFFFF0000
Public Const KEY_NOTIFY = &H10
Public Const KEY_QUERY_VALUE = &H1
Public Const KEY_SET_VALUE = &H2
Public Const KEY_READ = ((STANDARD_RIGHTS_READ Or KEY_QUERY_VALUE Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY) And (Not SYNCHRONIZE))
Public Const KEY_EXECUTE = (KEY_READ)
Public Const KEY_WRITE = ((STANDARD_RIGHTS_WRITE Or KEY_SET_VALUE Or KEY_CREATE_SUB_KEY) And (Not SYNCHRONIZE))
Public 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))

'*************************************************************************************

Public Function RegDelAllSubVal(ByVal hKeyR As LongByVal mKey As StringOptional ByVal Flush As Boolean = FalseAs Boolean
  
On Error Resume Next
  
Dim hkey As Long, Cnt As Long
  
Dim sName As String, Ret As Long: sName = Space(BUFFER_SIZE)
  
Dim sData(BUFFER_SIZE) As Byte, RetData As Long
  
Dim NameSpace() As StringReDim NameSpace(1)
  
  
If RegOpenKeyEx(ByVal hKeyR, ByVal mKey, ByVal 0&, KEY_ALL_ACCESS, hkey) = ERROR_SUCCESS Then
    Cnt 
= 0: Ret = BUFFER_SIZE: RetData = BUFFER_SIZE
    
If RegEnumValue(hkey, Cnt, sName, Ret, ByVal 0&ByVal 0&, sData(0), RetData) <> ERROR_NO_MORE_ITEMS Then
      
Do
        
ReDim Preserve NameSpace(Cnt)
        
NameSpace(Cnt) = Left$(sName, Ret)
        Cnt 
= Cnt + 1: Ret = BUFFER_SIZE: RetData = BUFFER_SIZE
      
Loop While RegEnumValue(hkey, Cnt, sName, Ret, ByVal 0&ByVal 0&, sData(0), RetData) <> ERROR_NO_MORE_ITEMS
    
      
For Cnt = 0 To UBound(NameSpace)
        
Call RegDeleteValue(ByVal hkey, NameSpace(Cnt))
      
Next Cnt
    
End If
    Cnt 
= 0:  Ret = BUFFER_SIZE:  RetData = BUFFER_SIZE
    RegDelAllSubVal 
= (RegEnumValue(hkey, Cnt, sName, Ret, ByVal 0&ByVal 0&, sData(0), RetData) = ERROR_NO_MORE_ITEMS)
    
If Flush Then RegFlushKey hkey
    RegCloseKey hkey
  
Else
    RegDelAllSubVal 
= False
  
End If
End Function


Public Function RegDelAllSubKey(ByVal hKeyRoot As LongByVal mKey1 As StringOptional ByVal Flush As Boolean = FalseAs Boolean ', mKey2 As String
  On Error Resume Next
  
Dim hkey As Long, Ret As Long, Cnt As Long
  
Dim i As Long, t As FILETIME
  
Dim sName As String: sName = Space(BUFFER_SIZE)
  
Dim NameSpace() As StringReDim NameSpace(1)
  
Call RegDelAllSubVal(ByVal hKeyRoot, ByVal mKey1, False)
  
If RegOpenKeyEx(ByVal hKeyRoot, ByVal mKey1, ByVal 0&, KEY_ALL_ACCESS, hkey) = ERROR_SUCCESS Then
    RegDelAllSubKey 
= True: Cnt = 0: Ret = BUFFER_SIZE
    
If RegEnumKeyEx(hkey, Cnt, sName, Ret, ByVal 0&, vbNullString, i, t) <> ERROR_NO_MORE_ITEMS Then
      
Do
        
ReDim Preserve NameSpace(Cnt)
        
NameSpace(Cnt) = Left$(sName, Ret)
        Cnt 
= Cnt + 1: Ret = BUFFER_SIZE
      
Loop While RegEnumKeyEx(hkey, Cnt, sName, Ret, ByVal 0&, vbNullString, i, t) <> ERROR_NO_MORE_ITEMS
      
      
For Cnt = LBound(NameSpaceTo UBound(NameSpace)
        
Call RegDelAllSubKey(ByVal hKeyRoot, ByVal mKey1 & "" & NameSpace(Cnt))
      
Next Cnt
    
End If
    RegDelAllSubKey 
= (RegDeleteKey(ByVal hKeyRoot, ByVal mKey1) = ERROR_SUCCESS)
    
If Flush Then RegFlushKey hkey
    RegCloseKey hkey
  
Else
    RegDelAllSubKey 
= False
  
End If
End Function


Public Function RegDelSingleValue(ByVal mKeyRoot As LongByVal sKeyName As StringByVal sValueName As StringAs Long
  
On Error Resume Next
  
Dim hkey As Long
  
If RegOpenKeyEx(mKeyRoot, ByVal sKeyName, ByVal 0&, KEY_ALL_ACCESS, hkey) = ERROR_SUCCESS Then
    RegDelSingleValue 
= RegDeleteValue(hkey, ByVal sValueName)
    
Call RegCloseKey(hkey)
  
Else
    RegDelSingleValue 
= ERROR_CANTOPEN
  
End If
End Function


Public Function RegSetSingleValue(ByVal mKeyRoot As LongByVal sKeyName As StringByVal sValueName As StringByVal sValueType As LongByVal sValue As StringAs Long
  
On Error Resume Next
  
Dim hkey As Long
  
If RegCreateKey(mKeyRoot, sKeyName, hkey) = ERROR_SUCCESS Then
    RegSetSingleValue 
= RegSetValueEx(hkey, ByVal sValueName, ByVal 0&ByVal sValueType, ByVal sValue, ByVal Len(sValue))
    
Call RegCloseKey(hkey)
  
Else
    RegSetSingleValue 
= ERROR_CANTOPEN
  
End If
End Function

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值