Classe Register
| Description | Cette Classe permet de manipuler la base de registre de Windows 95 et NT
4. |
| Utilise | |
| API | Incluses |
VERSION 1.0 CLASS
BEGIN
MultiUse = -1 'True
END
Attribute VB_Name = "Register"
Attribute VB_Creatable = True
Attribute VB_Exposed = True
Option Explicit
'************************************************
'API de lecture de la base de registre
'************************************************
Const SYNCHRONIZE = &H100000
Const READ_CONTROL = &H20000
Const REG_BINARY = 3
Const REG_CREATED_NEW_KEY = &H1
Const REG_DWORD = 4
Const REG_DWORD_BIG_ENDIAN = 5
Const REG_DWORD_LITTLE_ENDIAN = 4
Const REG_EXPAND_SZ = 2
Const REG_FULL_RESOURCE_DESCRIPTOR = 9
Const REG_LINK = 6
Const REG_MULTI_SZ = 7
Const REG_NONE = 0
Const REG_NOTIFY_CHANGE_ATTRIBUTES = &H2
Const REG_NOTIFY_CHANGE_LAST_SET = &H4
Const REG_NOTIFY_CHANGE_NAME = &H1
Const REG_NOTIFY_CHANGE_SECURITY = &H8
Const REG_OPENED_EXISTING_KEY = &H2
Const REG_OPTION_BACKUP_RESTORE = 4
Const REG_OPTION_CREATE_LINK = 2
Const REG_OPTION_NON_VOLATILE = 0
Const REG_OPTION_RESERVED = 0
Const REG_OPTION_VOLATILE = 1
Const REG_REFRESH_HIVE = &H2
Const REG_RESOURCE_LIST = 8
Const REG_RESOURCE_REQUIREMENTS_LIST = 10
Const REG_SZ = 1
Const REG_WHOLE_HIVE_VOLATILE = &H1
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)
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)
Const STANDARD_RIGHTS_ALL = &H1F0000
Const STANDARD_RIGHTS_EXECUTE = (READ_CONTROL)
Const STANDARD_RIGHTS_READ = (READ_CONTROL)
Const STANDARD_RIGHTS_REQUIRED = &HF0000
Const STANDARD_RIGHTS_WRITE = (READ_CONTROL)
Const HKEY_CLASSES_ROOT = &H80000000
Const HKEY_CURRENT_CONFIG = &H80000005
Const HKEY_CURRENT_USER = &H80000001
Const HKEY_DYN_DATA = &H80000006
Const HKEY_LOCAL_MACHINE = &H80000002
Const HKEY_PERFORMANCE_DATA = &H80000004
Const HKEY_USERS = &H80000003
Const KEY_CREATE_LINK = &H20
Const KEY_CREATE_SUB_KEY = &H4
Const KEY_ENUMERATE_SUB_KEYS = &H8
Const KEY_EVENT = &H1
Const KEY_NOTIFY = &H10
Const KEY_QUERY_VALUE = &H1
Const KEY_READ = ((STANDARD_RIGHTS_READ Or KEY_QUERY_VALUE Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY) And (Not SYNCHRONIZE))
Const KEY_SET_VALUE = &H2
Const KEY_WRITE = ((STANDARD_RIGHTS_WRITE Or KEY_SET_VALUE Or KEY_CREATE_SUB_KEY) And (Not SYNCHRONIZE))
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 Declare Function API_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 API_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 API_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
Public Function Create() As Boolean
Create = True
End Function
Public Function Key(ByVal strPath As String, ByVal strKey As String, ByVal Default As Variant) As Variant
Dim hkey As Long
Dim strSubKey As String
Dim strValName As String
Dim i As Integer
Dim s As String
If UCase(Left(strPath, 4)) <> "HKEY" Then
hkey = HKEY_CURRENT_USER
strPath = "Software\VB and VBA Program Settings\" & strPath
Else
i = InStr(strPath, "\")
s = Left(strPath, i - 1)
strPath = Mid(strPath, i + 1)
Select Case UCase(s)
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_CURRENT_CONFIG"
hkey = HKEY_CURRENT_CONFIG
Case "HKEY_DYN_DATA"
hkey = HKEY_DYN_DATA
Case Else
RaiseError REG_InvalidKey
Exit Function
End Select
End If
Key = fRegGetString(hkey, strPath, strKey, Default)
End Function
Private Function fRegGetString(hInkey As Long, ByVal strSubKey As String, ByVal strValName As String, Default As Variant) As Variant
Dim phkResult As Long
Dim strValeur As String * 256
Dim lngValeur As Long
Dim dummy As Long
dummy = API_RegOpenKeyEx(hInkey, strSubKey, 0, KEY_ALL_ACCESS, phkResult)
If dummy = 0 Then
lngValeur = 256
dummy = API_RegQueryValueEx(phkResult, strValName, 0, REG_SZ, ByVal strValeur, lngValeur)
If dummy = 0 Then
fRegGetString = Left(strValeur, Len(Trim(strValeur)) - 1)
Else
fRegGetString = Default
Err = dummy
End If
End If
End Function
Private Function fRegSetString(hInkey As Long, ByVal strSubKey As String, ByVal strValName As String, strValeur As String) As Long
Dim phkResult As Long
Dim dummy As Long
dummy = API_RegOpenKeyEx(hInkey, strSubKey, 0, KEY_ALL_ACCESS, phkResult)
If dummy = 0 Then
strValeur = strValeur & Chr$(0)
fRegSetString = API_RegSetValueEx(phkResult, strValName, 0, REG_SZ, ByVal strValeur, Len(strValeur))
End If
End Function