home *** CD-ROM | disk | FTP | other *** search
/ Planet Source Code Jumbo …e CD Visual Basic 1 to 7 / 3_2004-2005.ISO / Data / Zips / Retrieve_C1869213292005.psc / cRegistry.cls < prev   
Text File  |  2005-03-28  |  21KB  |  474 lines

  1. VERSION 1.0 CLASS
  2. BEGIN
  3.   MultiUse = -1  'True
  4. END
  5. Attribute VB_Name = "cRegistry"
  6. Attribute VB_GlobalNameSpace = False
  7. Attribute VB_Creatable = True
  8. Attribute VB_PredeclaredId = False
  9. Attribute VB_Exposed = False
  10. 'Uknown Author
  11. 'http://www.vbaccelerator.com/home/VB/Code/Libraries/Registry_and_Ini_Files/Complete_Registry_Control/article.asp
  12. 'found above url on 11-30-03
  13.  
  14. Option Explicit
  15. Private Const KEY_QUERY_VALUE = &H1
  16. Private Const KEY_SET_VALUE = &H2
  17. Private Const KEY_CREATE_SUB_KEY = &H4
  18. Private Const KEY_ENUMERATE_SUB_KEYS = &H8
  19. Private Const KEY_NOTIFY = &H10
  20. Private Const KEY_CREATE_LINK = &H20
  21. Private Const KEY_ALL_ACCESS = &H3F
  22. Private Const REG_OPTION_NON_VOLATILE = 0&
  23. Private Const REG_OPTION_VOLATILE = &H1
  24. Private Const REG_CREATED_NEW_KEY = &H1
  25. Private Const REG_OPENED_EXISTING_KEY = &H2
  26. Private Const STANDARD_RIGHTS_ALL = &H1F0000
  27. Private Const SPECIFIC_RIGHTS_ALL = &HFFFF
  28. Private Const ERROR_SUCCESS = 0&
  29. Private Const ERROR_ACCESS_DENIED = 5
  30. Private Const ERROR_INVALID_DATA = 13&
  31. Private Const ERROR_MORE_DATA = 234
  32. Private Const ERROR_NO_MORE_ITEMS = 259
  33. Private Type SECURITY_ATTRIBUTES
  34.   nLength As Long
  35.   lpSecurityDescriptor As Long
  36.   bInheritHandle As Boolean
  37. End Type
  38.  
  39. Private Type FILETIME
  40.   dwLowDateTime As Long
  41.   dwHighDateTime As Long
  42. End Type
  43.  
  44. Private Declare Function RegOpenKeyEx Lib "advapi32" Alias "RegOpenKeyExA" _
  45.   (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, _
  46.   ByVal samDesired As Long, phkResult As Long) As Long
  47.  
  48. Private Declare Function RegSetValueExStr Lib "advapi32" Alias "RegSetValueExA" _
  49.   (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, _
  50.    ByVal dwType As Long, ByVal szData As String, ByVal cbData As Long) As Long
  51. Private Declare Function RegSetValueExLong Lib "advapi32" Alias "RegSetValueExA" _
  52.   (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, _
  53.    ByVal dwType As Long, szData As Long, ByVal cbData As Long) As Long
  54. Private Declare Function RegSetValueExByte Lib "advapi32" Alias "RegSetValueExA" _
  55.   (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, _
  56.    ByVal dwType As Long, szData As Byte, ByVal cbData As Long) As Long
  57.  
  58. Private Declare Function RegCloseKey Lib "advapi32" (ByVal hKey As Long) As Long
  59.  
  60. Private Declare Function RegQueryValueExStr Lib "advapi32" Alias "RegQueryValueExA" _
  61.   (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, _
  62.    ByRef lpType As Long, ByVal szData As String, ByRef lpcbData As Long) As Long
  63. Private Declare Function RegQueryValueExLong Lib "advapi32" Alias "RegQueryValueExA" _
  64.   (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, _
  65.    ByRef lpType As Long, szData As Long, ByRef lpcbData As Long) As Long
  66. Private Declare Function RegQueryValueExByte Lib "advapi32" Alias "RegQueryValueExA" _
  67.   (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, _
  68.    ByRef lpType As Long, szData As Byte, ByRef lpcbData As Long) As Long
  69.    
  70. Private Declare Function RegCreateKeyEx Lib "advapi32" Alias "RegCreateKeyExA" _
  71.   (ByVal hKey As Long, ByVal lpSubKey As String, ByVal Reserved As Long, _
  72.    ByVal lpClass As String, ByVal dwOptions As Long, ByVal samDesired As Long, _
  73.    lpSecurityAttributes As SECURITY_ATTRIBUTES, phkResult As Long, _
  74.    lpdwDisposition As Long) As Long
  75.  
  76. Private Declare Function RegEnumKeyEx Lib "advapi32.dll" Alias "RegEnumKeyExA" _
  77.   (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpName As String, _
  78.    lpcbName As Long, ByVal lpReserved As Long, ByVal lpClass As String, _
  79.    lpcbClass As Long, lpftLastWriteTime As FILETIME) As Long
  80.  
  81. Private Declare Function RegEnumKey Lib "advapi32.dll" Alias "RegEnumKeyA" ( _
  82.     ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpName As String, _
  83.     ByVal cbName As Long) As Long
  84.  
  85. Private Declare Function RegEnumValue Lib "advapi32.dll" Alias "RegEnumValueA" _
  86.   (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpValueName As String, _
  87.    lpcbValueName As Long, ByVal lpReserved As Long, ByVal lpType As Long, _
  88.    ByVal lpData As Long, ByVal lpcbData As Long) As Long
  89.    
  90. Private Declare Function RegEnumValueLong Lib "advapi32.dll" Alias "RegEnumValueA" _
  91.   (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpValueName As String, _
  92.    lpcbValueName As Long, ByVal lpReserved As Long, lpType As Long, _
  93.    lpData As Long, lpcbData As Long) As Long
  94. Private Declare Function RegEnumValueStr Lib "advapi32.dll" Alias "RegEnumValueA" _
  95.   (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpValueName As String, _
  96.    lpcbValueName As Long, ByVal lpReserved As Long, lpType As Long, _
  97.    ByVal lpData As String, lpcbData As Long) As Long
  98. Private Declare Function RegEnumValueByte Lib "advapi32.dll" Alias "RegEnumValueA" _
  99.   (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpValueName As String, _
  100.    lpcbValueName As Long, ByVal lpReserved As Long, lpType As Long, _
  101.    lpData As Byte, lpcbData As Long) As Long
  102.  
  103. Private Declare Function RegQueryInfoKey Lib "advapi32.dll" Alias "RegQueryInfoKeyA" _
  104.    (ByVal hKey As Long, ByVal lpClass As String, _
  105.    lpcbClass As Long, ByVal lpReserved As Long, lpcSubKeys As Long, _
  106.    lpcbMaxSubKeyLen As Long, lpcbMaxClassLen As Long, lpcValues As Long, _
  107.    lpcbMaxValueNameLen As Long, lpcbMaxValueLen As Long, lpcbSecurityDescriptor As Long, _
  108.    lpftLastWriteTime As Any) As Long
  109.  
  110. Private Declare Function RegDeleteKey Lib "advapi32.dll" Alias "RegDeleteKeyA" _
  111.   (ByVal hKey As Long, ByVal lpSubKey As String) As Long
  112.  
  113. Private Declare Function RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA" _
  114.   (ByVal hKey As Long, ByVal lpValueName As String) As Long
  115.  
  116. Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" ( _
  117.     lpvDest As Any, lpvSource As Any, ByVal cbCopy As Long)
  118. Private Declare Function ExpandEnvironmentStrings Lib "kernel32" Alias "ExpandEnvironmentStringsA" (ByVal lpSrc As String, ByVal lpDst As String, ByVal nSize As Long) As Long
  119.  
  120.  
  121. Public Enum ERegistryClassConstants
  122.     HKEY_CLASSES_ROOT = &H80000000
  123.     HKEY_CURRENT_USER = &H80000001
  124.     HKEY_LOCAL_MACHINE = &H80000002
  125.     HKEY_USERS = &H80000003
  126.     HKEY_CURRENT_CONFIG = &H80000005
  127.     HKEY_DYN_DATA = &H80000006
  128. End Enum
  129.  
  130. Public Enum ERegistryValueTypes
  131.     REG_NONE = (0)
  132.     REG_SZ = (1)
  133.     REG_EXPAND_SZ = (2)
  134.     REG_BINARY = (3)
  135.     REG_DWORD = (4)
  136.     REG_DWORD_LITTLE_ENDIAN = (4)
  137.     REG_DWORD_BIG_ENDIAN = (5)
  138.     REG_LINK = (6)
  139.     REG_MULTI_SZ = (7)
  140.     REG_RESOURCE_LIST = (8)
  141.     REG_FULL_RESOURCE_DESCRIPTOR = (9)
  142.     REG_RESOURCE_REQUIREMENTS_LIST = (10)
  143. End Enum
  144.  
  145. Private m_hClassKey As Long
  146. Private m_sSectionKey As String
  147. Private m_sValueKey As String
  148. Private m_vValue As Variant
  149. Private m_sSetValue As String
  150. Private m_vDefault As Variant
  151. Private m_eValueType As ERegistryValueTypes
  152.  
  153. Public Property Get KeyExists() As Boolean
  154. Dim hKey As Long
  155.     If RegOpenKeyEx(m_hClassKey, m_sSectionKey, 0, 1, hKey) = ERROR_SUCCESS Then
  156.         KeyExists = True
  157.         RegCloseKey hKey
  158.     Else
  159.         KeyExists = False
  160.     End If
  161.     
  162. End Property
  163. Public Function CreateKey() As Boolean
  164. Dim tSA As SECURITY_ATTRIBUTES
  165. Dim hKey As Long
  166. Dim lCreate As Long
  167. Dim e As Long
  168.     e = RegCreateKeyEx(m_hClassKey, m_sSectionKey, 0, "", REG_OPTION_NON_VOLATILE, _
  169.                  KEY_ALL_ACCESS, tSA, hKey, lCreate)
  170.     If e Then
  171.         Err.Raise 26001, App.EXEName & ".cRegistry", "Failed to create registry Key: '" & m_sSectionKey
  172.     Else
  173.         CreateKey = (e = ERROR_SUCCESS)
  174.         RegCloseKey hKey
  175.     End If
  176. End Function
  177. Public Function DeleteKey() As Boolean
  178. Dim e As Long
  179.     e = RegDeleteKey(m_hClassKey, m_sSectionKey)
  180.     If e Then
  181.         Err.Raise 26001, App.EXEName & ".cRegistry", "Failed to delete registry Key: '" & m_hClassKey & "',Section: '" & m_sSectionKey
  182.     Else
  183.         DeleteKey = (e = ERROR_SUCCESS)
  184.     End If
  185.     
  186. End Function
  187. Public Function DeleteValue() As Boolean
  188. Dim e As Long
  189. Dim hKey As Long
  190.  
  191.     e = RegOpenKeyEx(m_hClassKey, m_sSectionKey, 0, KEY_ALL_ACCESS, hKey)
  192.     If e Then
  193.         Err.Raise 26001, App.EXEName & ".cRegistry", "Failed to open key '" & m_hClassKey & "',Section: '" & m_sSectionKey & "' for delete access"
  194.     Else
  195.         e = RegDeleteValue(hKey, m_sValueKey)
  196.         If e Then
  197.             'Err.Raise 26001, App.EXEName & ".cRegistry", "Failed to delete registry Key: '" & m_hClassKey & "',Section: '" & m_sSectionKey & "',Key: '" & m_sValueKey
  198.         Else
  199.             DeleteValue = (e = ERROR_SUCCESS)
  200.         End If
  201.     End If
  202.  
  203. End Function
  204. Public Property Get Value() As Variant
  205. Dim vValue As Variant
  206. Dim cData As Long, sData As String, ordType As Long, e As Long
  207. Dim hKey As Long
  208.  
  209.     e = RegOpenKeyEx(m_hClassKey, m_sSectionKey, 0, KEY_QUERY_VALUE, hKey)
  210.  
  211.     e = RegQueryValueExLong(hKey, m_sValueKey, 0&, ordType, 0&, cData)
  212.     If e And e <> ERROR_MORE_DATA Then
  213.         Value = m_vDefault
  214.         Exit Property
  215.     End If
  216.     
  217.     m_eValueType = ordType
  218.     Select Case ordType
  219.     Case REG_DWORD, REG_DWORD_LITTLE_ENDIAN
  220.         Dim iData As Long
  221.         e = RegQueryValueExLong(hKey, m_sValueKey, 0&, _
  222.                                ordType, iData, cData)
  223.         vValue = CLng(iData)
  224.         
  225.     Case REG_DWORD_BIG_ENDIAN
  226.         Dim dwData As Long
  227.         e = RegQueryValueExLong(hKey, m_sValueKey, 0&, _
  228.                                ordType, dwData, cData)
  229.         vValue = SwapEndian(dwData)
  230.         
  231.     Case REG_SZ, REG_MULTI_SZ
  232.         sData = String$(cData - 1, 0)
  233.         e = RegQueryValueExStr(hKey, m_sValueKey, 0&, _
  234.                                ordType, sData, cData)
  235.         vValue = sData
  236.         
  237.     Case REG_EXPAND_SZ
  238.         sData = String$(cData - 1, 0)
  239.         e = RegQueryValueExStr(hKey, m_sValueKey, 0&, _
  240.                                ordType, sData, cData)
  241.         vValue = ExpandEnvStr(sData)
  242.         
  243.     Case Else
  244.         Dim abData() As Byte
  245.         ReDim abData(cData)
  246.         e = RegQueryValueExByte(hKey, m_sValueKey, 0&, _
  247.                                 ordType, abData(0), cData)
  248.         vValue = abData
  249.         
  250.     End Select
  251.     Value = vValue
  252.     
  253. End Property
  254. Public Property Let Value( _
  255.         ByVal vValue As Variant _
  256.     )
  257. Dim ordType As Long
  258. Dim c As Long
  259. Dim hKey As Long
  260. Dim e As Long
  261. Dim lCreate As Long
  262. Dim tSA As SECURITY_ATTRIBUTES
  263.  
  264.     e = RegCreateKeyEx(m_hClassKey, m_sSectionKey, 0, "", REG_OPTION_NON_VOLATILE, _
  265.                  KEY_ALL_ACCESS, tSA, hKey, lCreate)
  266.     
  267.     If e Then
  268.         Err.Raise 26001, App.EXEName & ".cRegistry", "Failed to set registry value Key: '" & m_hClassKey & "',Section: '" & m_sSectionKey & "',Key: '" & m_sValueKey & "' to value: '" & m_vValue & "'"
  269.     Else
  270.  
  271.         Select Case m_eValueType
  272.         Case REG_BINARY
  273.             If (VarType(vValue) = vbArray + vbByte) Then
  274.                 Dim ab() As Byte
  275.                 ab = vValue
  276.                 ordType = REG_BINARY
  277.                 c = UBound(ab) - LBound(ab) - 1
  278.                 e = RegSetValueExByte(hKey, m_sValueKey, 0&, ordType, ab(0), c)
  279.             Else
  280.                 Err.Raise 26001
  281.             End If
  282.         Case REG_DWORD, REG_DWORD_BIG_ENDIAN, REG_DWORD_LITTLE_ENDIAN
  283.             If (VarType(vValue) = vbInteger) Or (VarType(vValue) = vbLong) Then
  284.                 Dim i As Long
  285.                 i = vValue
  286.                 ordType = REG_DWORD
  287.                 e = RegSetValueExLong(hKey, m_sValueKey, 0&, ordType, i, 4)
  288.             End If
  289.         Case REG_SZ, REG_EXPAND_SZ
  290.             Dim S As String, iPos As Long
  291.             S = vValue
  292.             ordType = REG_SZ
  293.             iPos = InStr(S, "%")
  294.             If iPos Then
  295.                 If InStr(iPos + 2, S, "%") Then ordType = REG_EXPAND_SZ
  296.             End If
  297.             c = Len(S) + 1
  298.             e = RegSetValueExStr(hKey, m_sValueKey, 0&, ordType, S, c)
  299.             
  300.         Case Else
  301.             e = ERROR_INVALID_DATA
  302.             
  303.         End Select
  304.         
  305.         If Not e Then
  306.             m_vValue = vValue
  307.         Else
  308.             Err.Raise vbObjectError + 1048 + 26001, App.EXEName & ".cRegistry", "Failed to set registry value Key: '" & m_hClassKey & "',Section: '" & m_sSectionKey & "',Key: '" & m_sValueKey & "' to value: '" & m_vValue & "'"
  309.         End If
  310.         
  311.         RegCloseKey hKey
  312.     
  313.     End If
  314.     
  315. End Property
  316. Public Function EnumerateValues( _
  317.         ByRef sKeyNames() As String, _
  318.         ByRef iKeyCount As Long _
  319.     ) As Boolean
  320. Dim lResult As Long
  321. Dim hKey As Long
  322. Dim sName As String
  323. Dim lNameSize As Long
  324. Dim sData As String
  325. Dim lIndex As Long
  326. Dim cJunk As Long
  327. Dim cNameMax As Long
  328. Dim ft As Currency
  329.  
  330.    iKeyCount = 0
  331.    Erase sKeyNames()
  332.     
  333.    lIndex = 0
  334.    lResult = RegOpenKeyEx(m_hClassKey, m_sSectionKey, 0, KEY_QUERY_VALUE, hKey)
  335.    If (lResult = ERROR_SUCCESS) Then
  336.       lResult = RegQueryInfoKey(hKey, "", cJunk, 0, _
  337.                                cJunk, cJunk, cJunk, cJunk, _
  338.                                cNameMax, cJunk, cJunk, ft)
  339.        Do While lResult = ERROR_SUCCESS
  340.    
  341.            lNameSize = cNameMax + 1
  342.            sName = String$(lNameSize, 0)
  343.            If (lNameSize = 0) Then lNameSize = 1
  344.            
  345.            lResult = RegEnumValue(hKey, lIndex, sName, lNameSize, _
  346.                                   0&, 0&, 0&, 0&)
  347.            If (lResult = ERROR_SUCCESS) Then
  348.        
  349.                sName = Left$(sName, lNameSize)
  350.                  
  351.                iKeyCount = iKeyCount + 1
  352.                ReDim Preserve sKeyNames(1 To iKeyCount) As String
  353.                sKeyNames(iKeyCount) = sName
  354.            End If
  355.            lIndex = lIndex + 1
  356.        Loop
  357.    End If
  358.    If (hKey <> 0) Then
  359.       RegCloseKey hKey
  360.    End If
  361.  
  362.    EnumerateValues = True
  363.    Exit Function
  364.    
  365. EnumerateValuesError:
  366.    If (hKey <> 0) Then
  367.       RegCloseKey hKey
  368.    End If
  369.    Err.Raise vbObjectError + 1048 + 26003, App.EXEName & ".cRegistry", Err.Description
  370.    Exit Function
  371.  
  372. End Function
  373. Public Function EnumerateSections( _
  374.         ByRef sSect() As String, _
  375.         ByRef iSectCount As Long _
  376.     ) As Boolean
  377. Dim lResult As Long
  378. Dim hKey As Long
  379. Dim dwReserved As Long
  380. Dim szBuffer As String
  381. Dim l e <> ERROR_MORE_DATAVc    iKeyCount = iKeyCounted As Long
  382. DimtCount As <>           Long
  383. Dim im Preserve sKeyNames(1 To iKeyCount) As String
  384.                sKeyNamssKey, m_sSectoxA       S = vValue
  385.             ordType = REG_SZ
  386.             iPos = InStr(S, "%")ue        Case ElsaI
  387.             ue
  388.     Do While lvValue) = T, e As Long
  389. Dim hKeyseSey & "',ISy & s = InStr(S, "%")ueE"   f
  390.  EiKeyCount As Longf
  391.  EiKeyCount As Value & "'"
  392.         End IfSUCes() As Stringx(m_hClassKey, m
  393.  
  394.                sKeYCreateKey() As B EnKeyCounted As Lo($(sName, R
  395.         ClassKe"    KeYCreateKeSountmtCount As <>   ehIon EnumerateSections( _
  396.        4LCounted As Long
  397. DimtCount As <>           Long
  398. Dim im Preserve sKeyNames(1 To iKeyCount) As String
  399.          2u As <>   ehIon EnumerateSe      4LCounted As Long
  400. DimtCount As <v     ClassKe"    KeYCreateKeSounCN :::::: <>   ehIon Enul::::: <>Eh     E0Eue & "'"
  401.      o REG_SZ
  402. 3e, i, 4)
  403.             
  404. 3e                
  405.         skemKeyExt>(_               
  406.  & ".cRegistry",reateKeSountmtCoewWInde ERROR_unt As <v     ClassKe"    Ke, _
  407.         ByRef iS<   Ie SUCCDim ST _If iPos TByRe         sKeyNamssKey, m_sSectoxA       S = vValueIirateSumerateSections(y.cRegise AsenZ
  408. As Boolean
  409. m
  410.  
  411. enumerateVatr(iPos Long
  412. Dim im Preserve sKeyNames(1 To iKeyCount) As Strin rmIions(y.cJnim \     ons(y.cJnim \     ons(y.cJnim \     ons(y.cJnim \     ons(y.cJnim \     ons(y    ons(y.cJnb          sK5.cJnetValueESeAE            sKeyNaS) The_If iPos TByRe  d   E2, Function Enumiwp2(eIcType As Lon    sK5.cJnetValueESeAK5.cJnetValueEistry",reaKeyNaS) The_Idt)LLLLLLLLLLLLLLLLLLLLLcRegDeleteKey Lib O Preserve sKen Pos _(im PresIf (hKey <> Poeserve sKeyNamesot=M Preserve sKen PiKey Lib O sKen PosKeyNameit=M osKeyNam
  413.   ttVallueE"   f
  414.  EiKeyCount As Longf
  415.  EiKs( _
  416.        4LCount      S = vValueIirhen
  417.  =d Za o REG_SZ
  418. 3Derve sKeyNamesot=M Preserve sKen PiKeyunction Enumiwp2(eIcType As Lon  an
  419. m(CbameS/1s(y.,
  420. m(Crm(CbameS/1s(y. lpey, m_Ntdy, m_Ntdy, m_Ntdy, m_N, m_Ntdy, jaue vdll" Alias "RegELon  naPdll" Alias "RegELon  naPdll" Alisype(vValue) = vQDwp2(eIcType As L"cVVal0ai5al0ai5   ClassKL"cVVal0ai5al0ai5   Clstr  ClassKL"cVVal0ai5al0ai5   Clstr  Clasit=M 'lueIoI" Alias "RegELon  naPdll" Alias "RegELon    sKeYCreateKey() As B EnKeyCounted The_Idt)LLLLcd Za o REG_ValueIirateSum Strin           sNamai5   ClassKL"ateSum Strin           sNamai5   ClassKL"ateSum Strin           sNamai5   Clasre/Rh       sKL"a    ,c  sNaIIirDX,sKL        sp REG_SZ
  421.            "asre/Rh       sKL"a    ,c  sNaIIirDX,sKL        l0ai5GEHblg
  422. Dim im Prest        If (lResult = ERROR_SUCCESS) l0aiibH( "asre/Rh    nction
  423. Public FunctiKeyNamesot=M 
  424. Public FunctiKsKL"aa        sp REG_SZ
  425.            "asre/Rh  oT4sKey & "',Section:, sKen PiKeyunction EnumiEvapi3Valuewltion Ei3Value <>eH( "asre/Rh  
  426. PNEtttttttttttttttttttttttttttttttttp
  427. Private m_sValueKey As String
  428. Private msep
  429. Private m_sValueKey As StrinaasriKs( _
  430.      iKey, 0, KEY_QUERY_VALUE, hKey)
  431.    If (UCC-ERY_VALivate m_sValueKt    R=I lt 0eEE,iaLmLonmeratCESS) l0aiibH( "asre/Rh    nction
  432. Public FunctiKeyNamesot=M 
  433. Pal0ai5   Clstron
  434. Public Fu2m_sValmesot=M 
  435. Pal0ai5   Clstronreserve sKen Pos UE, hnim \     on Namesot=M 
  436. Pal0a FuRFEnim \_ FuRFEnim \_ FuRFEniheI" A.FuRFEnim KeyC            "asrw , hnim \     on Namesot=M 
  437. Pal0a FuRFEnim \_ FuRFEnim \_ FuRFEniheI" A.FuRFEnim KeyC            "asrw , hnim \     on Namesot=M 
  438. Pal0a FuRFEnim \_ FuRFa Fu0aiibH( "asrpe"IIRFEnEh(CheI" A.FuRFEnim KeyC  Strin        _   "asrw , hnidzpS3tr  Clasit=MM FuRAnRFEniheI" A.FuRFEnim KeyC            "asrw , hnim \        ordType, "pXi   S =ewIValues( _
  439.       D    "asrw ,y3e 104d ZaCn
  440. zpS3i "asrw ,yyyyyFuRFEnim KeyC            miEvapi3Valuewltion Ei3Value <>eH( "asre/Rh  
  441. PNEttttttttttttp  
  442. PNEtttttttt    R=I lt m \    et m \    et R=I lEnKeyCounrw ,y3eD, _
  443.                                 unrw ,y3eD, _
  444.                                 un R=I lteounCN 0_i"NEttttCa Ftring, _
  445.    lpcbValueName As Long, ByVal lpReserved As Long, lpType As Long, _
  446.    ByVal lpData As String, lpcbData As Long) As Long
  447. Private Declare FunctypData As String, lpcbData As Long) As Long
  448. PSStr"Ey    unrSe t  un R=I lteounCN 0_iS e As L"cVV) As Longn
  449. )m(sSectoxA   s       
  450.  R=It=MM FuRAnRFAs L"cVV) As LonKeyR=I ebValf
  451.  Ees       
  452.  R=It=MM FuRAnRFAs L"cVV)   3,i   Scc_   "ttt un R=I lteounCN 0_iong) As LeteKey Lib O XbValfwwwwwwwwwwwwwwwwwwwwwwrAet m \    meit=M os)Wserved AP 0_i"NEttttCa Ftring, wwwww fIos Value & "cVV) 0_i"NEt     tonKey, 0kLong, lpType As Long, _
  453.    ByVal lpDlue & ePNEttttttttth  
  454. PNEttttbksep
  455. Private m_sValueKtth  
  456. PNEttttbkseksep
  457. Private m_ibH(     PAng
  458. PSStr"Ey , ByVal A)httts   et R=I lEnKeyCounrw ,y3eD," Alias "RegELkE_DATAVc    iKeyCounNtttttsOuPrivGa Ftring, _
  459.    lpc As Long) As Long
  460. Private Declare FunctypData As String, lpcbData As Loivate Declare
  461.    lpc As Long) AeyExata As String, lpcbData A    _   aaleota A   meit=M o alueName As Long, ByVal lpReserved As Long, lpType As Long, U)ey, 0kLoe ElsaI
  462.  r, 0kLoEOeoExata As String, lpcbDg, lpcbData A pType As Long, et R=i "asrw ,yy    l ReDim abData(cDatayPrivate pLong,eclar0kLonpDatayPrivate pLoDy, 0kLong, lpType As    l/e_ea       "aGieLong, et R=i "asrw ,yy teounCN 0_iong)a A    _)yyyFuRFEnim KeyC            miEvapi3Valuewltion Ei3Value <>eH( "aIIiData As L5          Long
  463. Dim im PreservPStringpshCsKeyNaS) The_If iPosntion Ei3Value <>e Long
  464. Private ntion Ev5/e_ea    hCsK(CbameS/1s(y.S(lSxeate _
  465.    ByVal lpData As String, lpcbData As Long) PtIa"aIIamai:, sKen PiKeyunc 0_i"vate pLoDy, 0kLong, lpType As    l/e_ea      weNekLong, lpEeounnUremKeyExt>(_               
  466.  &lL"aLLLLLLLLLC>(_x    _)yyyFLLC>(_x  Ny.S(lSxeate _
  467.    ByVal    
  468.  &lL"aLs_
  469.    ByVal    
  470.  &lL"aN" Alias i      LonTSV              sKeyNaS) The_If iPosntion Ei3Value <>e Long
  471. PrD Alias irl    a i"hea      weNekLong, lpEeounnUremKeyExe pLoDy, 0kiebI _) <>e Long
  472. PrD Alias 1      4O im Long) PtIa"aIIamai:, KeyExe pLor c  l ReDimxe pLoDy, 0kiebI _) <>e Long
  473. PrD AliayEExe pLoDy, 0kiebI _n            sKeyNaS) PosntioI naPdlliU ByVal    
  474.  n) <