Registry.bas
上传用户:davilee3
上传日期:2015-04-22
资源大小:986k
文件大小:9k
源码类别:

浏览器

开发平台:

Visual Basic

  1. Attribute VB_Name = "mdlRegistry"
  2. '***********************By 陈锐******************************
  3. '这是一个操作注册表的Bas文件,其中包含可以建立新键值,删除
  4. '键值,查询键值的函数.
  5. 'Web Site: http://www.nease.net/~blackcat
  6. 'EMail: blackcat@nease.net
  7. Option Explicit
  8. Public Const REG_SZ As Long = 1
  9. Public Const REG_DWORD As Long = 4
  10. Public Const HKEY_CLASSES_ROOT = &H80000000
  11. Public Const HKEY_CURRENT_USER = &H80000001
  12. Public Const HKEY_LOCAL_MACHINE = &H80000002
  13. Public Const HKEY_USERS = &H80000003
  14. Public Const ERROR_NONE = 0
  15. Public Const ERROR_BADDB = 1
  16. Public Const ERROR_BADKEY = 2
  17. Public Const ERROR_CANTOPEN = 3
  18. Public Const ERROR_CANTREAD = 4
  19. Public Const ERROR_CANTWRITE = 5
  20. Public Const ERROR_OUTOFMEMORY = 6
  21. Public Const ERROR_INVALID_PARAMETER = 7
  22. Public Const ERROR_ACCESS_DENIED = 8
  23. Public Const ERROR_INVALID_PARAMETERS = 87
  24. Public Const ERROR_NO_MORE_ITEMS = 259
  25. Public Const ERROR_SUCCESS As Long = 0&
  26. Public Const KEY_ALL_ACCESS = &H3F
  27. Public Const REG_OPTION_NON_VOLATILE = 0
  28. Public Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
  29. Public Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, ByRef phkResult As Long) As Long
  30. 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, ByVal lpSecurityAttributes As Long, phkResult As Long, lpdwDisposition As Long) As Long
  31. Public Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, ByRef phkResult As Long) As Long
  32. 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
  33. 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
  34. Public Declare Function RegQueryValueExLong Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Long, lpcbData As Long) As Long
  35. Public Declare Function RegQueryValueExNULL Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, ByVal lpData As Long, lpcbData As Long) As Long
  36. 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 lpValue As String, ByVal cbData As Long) As Long
  37. 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
  38. Public Declare Function RegDeleteKey& Lib "advapi32.dll" Alias "RegDeleteKeyA" (ByVal hKey As Long, ByVal lpSubKey As String)
  39. Public Declare Function RegDeleteValue& Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName As String)
  40. Public Declare Function RegEnumValue Lib "advapi32.dll" Alias "RegEnumValueA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpValueName As String, ByRef lpcbValueName As Long, ByVal lpReserved As Long, ByRef lpType As Long, ByRef lpData As Byte, ByRef lpcbData As Long) As Long
  41. Public Declare Function SHDeleteKey Lib "shlwapi.dll" Alias "SHDeleteKeyA" (ByVal hKey As Long, ByVal pszSubKey As String) As Long
  42. 'Public Function DeleteKey(lPredefinedKey As Long, sKeyName As String)
  43. '    Dim lRetVal As Long
  44. '    Dim hKey As Long
  45. '
  46. '    lRetVal = RegOpenKeyEx(lPredefinedKey, sKeyName, 0, KEY_ALL_ACCESS, hKey)
  47. '    lRetVal = RegDeleteKey(lPredefinedKey, sKeyName)
  48. '    RegCloseKey (hKey)
  49. 'End Function
  50. '
  51. 'Public Function DeleteValue(lPredefinedKey As Long, sKeyName As String, sValueName As String)
  52. '       Dim lRetVal As Long
  53. '       Dim hKey As Long
  54. '
  55. '       lRetVal = RegOpenKeyEx(lPredefinedKey, sKeyName, 0, KEY_ALL_ACCESS, hKey)
  56. '       lRetVal = RegDeleteValue(hKey, sValueName)
  57. '       RegCloseKey (hKey)
  58. 'End Function
  59. '
  60. 'Public Function SetValueEx(ByVal hKey As Long, sValueName As String, lType As Long, vValue As Variant) As Long
  61. '    Dim lValue As Long
  62. '    Dim sValue As String
  63. '
  64. '    Select Case lType
  65. '        Case REG_SZ
  66. '            sValue = vValue
  67. '            SetValueEx = RegSetValueExString(hKey, sValueName, 0&, lType, sValue, Len(sValue))
  68. '        Case REG_DWORD
  69. '            lValue = vValue
  70. '            SetValueEx = RegSetValueExLong(hKey, sValueName, 0&, lType, lValue, 4)
  71. '        End Select
  72. '
  73. 'End Function
  74. '
  75. Function QueryValueEx(ByVal lhKey As Long, ByVal szValueName As String, vValue As Variant) As Long
  76.     Dim cch As Long
  77.     Dim lrc As Long
  78.     Dim lType As Long
  79.     Dim lValue As Long
  80.     Dim sValue As String
  81.     On Error GoTo QueryValueExError
  82.     lrc = RegQueryValueExNULL(lhKey, szValueName, 0&, lType, 0&, cch)
  83.     If lrc <> ERROR_NONE Then Error 5
  84.     Select Case lType
  85.         Case REG_SZ:
  86.             sValue = String(cch, 0)
  87.             lrc = RegQueryValueExString(lhKey, szValueName, 0&, lType, sValue, cch)
  88.             If lrc = ERROR_NONE Then
  89.                 vValue = Left$(sValue, cch)
  90.             Else
  91.                 vValue = Empty
  92.             End If
  93.         Case REG_DWORD:
  94.             lrc = RegQueryValueExLong(lhKey, szValueName, 0&, lType, lValue, cch)
  95.             If lrc = ERROR_NONE Then vValue = lValue
  96.         Case Else
  97.             lrc = -1
  98.     End Select
  99. QueryValueExExit:
  100.     QueryValueEx = lrc
  101.     Exit Function
  102. QueryValueExError:
  103.     Resume QueryValueExExit
  104. End Function
  105. 'Public Function CreateNewKey(lPredefinedKey As Long, sNewKeyName As String)
  106. '    Dim hNewKey As Long
  107. '    Dim lRetVal As Long
  108. '
  109. '    lRetVal = RegCreateKeyEx(lPredefinedKey, sNewKeyName, 0&, vbNullString, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, 0&, hNewKey, lRetVal)
  110. '    RegCloseKey (hNewKey)
  111. 'End Function
  112. '
  113. ''Sub Main()
  114. ''    '函数在注册表的"HKEY_CURRENT_USERSoftware"中建立了
  115. ''    '一个SubKey1项并在其中建立了值,并在显示后删除建立
  116. ''    '的值,如果你想通过RegEdit看到结果,可以将最后两句
  117. ''    '删除,不过要记得手动删除建立的键值
  118. ''    CreateNewKey HKEY_CURRENT_USER, "SoftwareSubKey1SubKey2"
  119. ''    SetKeyValue HKEY_CURRENT_USER, "SoftwareSubKey1SubKey2", "Test", "1000", REG_DWORD
  120. ''    MsgBox QueryValue(HKEY_CURRENT_USER, "SoftwareSubKey1SubKey2", "Test")
  121. ''    'DeleteValue HKEY_CURRENT_USER, "SoftwareSubKey1SubKey2", "Test"
  122. '''    DeleteKey HKEY_CURRENT_USER, "SoftwareSubKey1SubKey2"
  123. '''    DeleteKey HKEY_CURRENT_USER, "SoftwareSubKey1"
  124. ''    SHDeleteKey HKEY_CURRENT_USER, "SoftwareSubKey1"
  125. ''End Sub
  126. '
  127. '
  128. 'Public Function SetKeyValue(lPredefinedKey As Long, sKeyName As String, sValueName As String, vValueSetting As Variant, lValueType As Long)
  129. '       Dim lRetVal As Long
  130. '       Dim hKey As Long
  131. '
  132. '       lRetVal = RegOpenKeyEx(lPredefinedKey, sKeyName, 0, KEY_ALL_ACCESS, hKey)
  133. '       lRetVal = SetValueEx(hKey, sValueName, lValueType, vValueSetting)
  134. '       RegCloseKey (hKey)
  135. '
  136. 'End Function
  137. Public Function QueryValue(lPredefinedKey As Long, sKeyName As String, sValueName As String)
  138.        Dim lRetVal As Long
  139.        Dim hKey As Long
  140.        Dim vValue As Variant
  141.        lRetVal = RegOpenKeyEx(lPredefinedKey, sKeyName, 0, KEY_ALL_ACCESS, hKey)
  142.        lRetVal = QueryValueEx(hKey, sValueName, vValue)
  143.        QueryValue = vValue
  144.        RegCloseKey (hKey)
  145. End Function
  146. '---------------------------------------------------------------------------------------
  147. ' Procedure : EnumValue
  148. ' DateTime  : 2005-4-15 19:00
  149. ' Author    : Lingll
  150. ' Purpose   :
  151. '---------------------------------------------------------------------------------------
  152. Public Sub EnumRegValue(lPredefinedKey&, sKeyName$, _
  153.         coName As Collection, coType As Collection)
  154. Dim hKey&, i&
  155. Dim tName$, tcName&, tType&
  156. If coName Is Nothing Then
  157.     Set coName = New Collection
  158. End If
  159. If coType Is Nothing Then
  160.     Set coType = New Collection
  161. End If
  162. If RegOpenKeyEx(lPredefinedKey, sKeyName, 0, KEY_ALL_ACCESS, hKey) = 0 Then
  163.     tName = String(MAX_PATH + 1, vbNullChar)
  164.     i = 0
  165.     tcName = MAX_PATH + 1
  166.     While RegEnumValue(hKey, i, tName, tcName, 0, tType, ByVal 0&, ByVal 0&) = 0
  167.         coName.Add Left$(tName, tcName)
  168.         coType.Add tType
  169.         i = i + 1
  170.         tcName = MAX_PATH + 1
  171.     Wend
  172. End If
  173. End Sub