Attribute VB_Name = "RegKeys" ' Questo modulo legge e scrive chiavi del registro. A differenza del metodo ' di accesso al registro nativo di Visual Basic, permette di leggere e ' scrivere ogni chiave del registro con valori stringa. Option Explicit '--------------------------------------------------------------- 'Dichiarazioni API del registro di configurazione '--------------------------------------------------------------- Private Declare Function RegCloseKey Lib "advapi32" (ByVal hKey As Long) As Long Private Declare Function RegCreateKeyEx Lib "advapi32" 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, ByRef lpSecurityAttributes As SECURITY_ATTRIBUTES, ByRef phkResult As Long, ByRef lpdwDisposition As Long) As Long Private Declare Function RegOpenKeyEx Lib "advapi32" Alias "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, ByRef phkResult As Long) As Long Private Declare Function RegQueryValueEx Lib "advapi32" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, ByRef lpType As Long, ByVal lpData As String, ByRef lpcbData As Long) As Long Private Declare Function RegSetValueEx Lib "advapi32" 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 '--------------------------------------------------------------- 'Costanti API del registro di configurazione '--------------------------------------------------------------- ' Tipi di dati del registro di configurazione Const REG_SZ = 1 ' Stringa Unicode che termina con un carattere Null Const REG_EXPAND_SZ = 2 ' Stringa Unicode che termina con un carattere Null Const REG_DWORD = 4 ' Numero a 32 bit ' Valori per il tipo di chiave del registro di configurazione Const REG_OPTION_NON_VOLATILE = 0 ' La chiave viene mantenuta anche dopo il riavvio ' del sistema ' Opzioni di protezione per le chiavi del registro di configurazione Const READ_CONTROL = &H20000 Const KEY_QUERY_VALUE = &H1 Const KEY_SET_VALUE = &H2 Const KEY_CREATE_SUB_KEY = &H4 Const KEY_ENUMERATE_SUB_KEYS = &H8 Const KEY_NOTIFY = &H10 Const KEY_CREATE_LINK = &H20 Const KEY_READ = KEY_QUERY_VALUE + KEY_ENUMERATE_SUB_KEYS + KEY_NOTIFY + READ_CONTROL Const KEY_WRITE = KEY_SET_VALUE + KEY_CREATE_SUB_KEY + READ_CONTROL Const KEY_EXECUTE = KEY_READ Const KEY_ALL_ACCESS = KEY_QUERY_VALUE + KEY_SET_VALUE + _ KEY_CREATE_SUB_KEY + KEY_ENUMERATE_SUB_KEYS + _ KEY_NOTIFY + KEY_CREATE_LINK + READ_CONTROL ' Chiavi principali del registro di configurazione Const HKEY_CLASSES_ROOT = &H80000000 Const HKEY_CURRENT_USER = &H80000001 Const HKEY_LOCAL_MACHINE = &H80000002 Const HKEY_USERS = &H80000003 Const HKEY_PERFORMANCE_DATA = &H80000004 ' Valore restituito Const ERROR_NONE = 0 Const ERROR_BADKEY = 2 Const ERROR_ACCESS_DENIED = 8 Const ERROR_SUCCESS = 0 '--------------------------------------------------------------- 'Tipo per gli attributi di protezione del registro di configurazione '--------------------------------------------------------------- Private Type SECURITY_ATTRIBUTES nLength As Long lpSecurityDescriptor As Long bInheritHandle As Boolean End Type ' La risorse stringa verranno caricate ed assegnate alle proprietà dei ' controlli nel seguente modo: ' Oggetto Proprietà ' Form Caption ' Menu Caption ' TabStrip Caption, ToolTipText ' Toolbar ToolTipText ' ListView ColumnHeader.Text Sub LoadResStrings(frm As Form) On Error Resume Next Dim ctl As Control Dim obj As Object 'imposta la proprietà Caption del Form If IsNumeric(frm.Tag) Then frm.Caption = LoadResString(CInt(frm.Tag)) End If 'Imposta la proprietà caption dei controlli usando la ' proprietà caption degli elementi di menu e la proprietà Tag ' per tutti gli altri controlli For Each ctl In frm.Controls Err.Clear If TypeName(ctl) = "Menu" Then If IsNumeric(ctl.Caption) Then If Err = 0 Then ctl.Caption = LoadResString(CInt(ctl.Caption)) End If End If ElseIf TypeName(ctl) = "TabStrip" Then For Each obj In ctl.Tabs Err.Clear If IsNumeric(obj.Tag) Then obj.Caption = LoadResString(CInt(obj.Tag)) End If 'controlla la proprietà TooltipText If IsNumeric(obj.ToolTipText) Then If Err = 0 Then obj.ToolTipText = LoadResString(CInt(obj.ToolTipText)) End If End If Next ElseIf TypeName(ctl) = "Toolbar" Then For Each obj In ctl.Buttons Err.Clear If IsNumeric(obj.Tag) Then obj.ToolTipText = LoadResString(CInt(obj.Tag)) End If Next ElseIf TypeName(ctl) = "ListView" Then For Each obj In ctl.ColumnHeaders Err.Clear If IsNumeric(obj.Tag) Then obj.Text = LoadResString(CInt(obj.Tag)) End If Next Else If IsNumeric(ctl.Tag) Then If Err = 0 Then ctl.Caption = LoadResString(CInt(ctl.Tag)) End If End If 'controlla la proprietà TooltipText If IsNumeric(ctl.ToolTipText) Then If Err = 0 Then ctl.ToolTipText = LoadResString(CInt(ctl.ToolTipText)) End If End If End If Next End Sub