Acerca del procesamiento de valores de clave binaria del registro por parte de vbs
Microsoft tiene un módulo para operar el registro, el texto completo es el siguiente:
' Este módulo se utiliza para leer y escribir palabras clave del registro.
' A diferencia del método de acceso al registro interno de VB, puede
' leer y escribir cualquier clave de registro a través del valor de una cadena.
Opción explícita
'--------------------------------- ----------------------------------
'-Declaración API de registro...
'------------------------------------------- ------ ------------------
Función de declaración privada RegCloseKey Lib "advapi32" (ByVal hKey As Long) As Long
Función de declaración privada RegCreateKeyEx Lib "advapi32" Alias "RegCreateKeyExA" (ByVal hKey mientras, ByVal lpSubKey como cadena, ByVal reservado mientras, ByVal lpClass como cadena, ByVal dwOptions mientras, ByVal samDesired mientras, ByRef lpSecurityAttributes As SECURITY_ATTRIBUTES, ByRef phkResult As Long, ByRef lpdwDisposition As Long) As Long
Función de declaración privada RegOpenKeyEx Lib "advapi32" Alias "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions Mientras, ByVal samDesired Mientras, ByRef phkResult Mientras) Mientras
Función de declaración privada RegQueryValueEx Lib "advapi32" Alias "RegQueryValueExA" (ByVal hKey Mientras, ByVal lpValueName Como cadena, ByVal lpReserved Como Long, ByRef lpType As Long, ByVal lpData As String, ByRef lpcbData As Long) As Long
Función de declaración privada RegSetValueEx Lib "advapi32" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String , ByVal Reservado mientras, ByVal dwType Mientras, ByVal lpData Como cadena, ByVal cbData Mientras) Mientras
'------------------- --------------- --------------------------
'- Constantes de la API del Registro...
'------------------------------------ ------------- ----------------
' Tipos de datos de registro...
>
Const REG_SZ = 1 ' Cadena Unicode terminada en nulo
Const REG_EXPAND_SZ = 2 ' Cadena Unicode terminada en nulo
Const REG_DWORD = 4 ' Número de 32 bits
' Valor del tipo de creación del registro...
Const REG_OPTION_NON_VOLATILE = 0 ' Las palabras clave se conservan cuando se reinicia el sistema
' Opciones de seguridad de palabras clave del registro ..
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
' Tipo raíz de clave de registro...
Const HKEY_CLASSES_ROOT = &H80000000
Const HKEY_CURRENT_USER = &H80000001
Const HKEY_LOCAL_MACHINE = &H80000002
Const HKEY_USERS = &H80000003
Const HKEY_PERFORMANCE_DATA = &H80000004
' Valor de retorno...
Const ERROR_NONE = 0
Const ERROR_BADKEY = 2
Const ERROR_ACCESS_DENIED = 8
Const ERROR_SUCCESS = 0
'-- ------ -------------------------------------- ------ -----
'- Tipo de atributo de seguridad del registro...
'--------------------- ----- ------------------
----------------------------------
Tipo privado SECURITY_ATTRIBUTES
nLongitud tan larga
lpSecurityDescriptor tan larga
bInheritHandle como booleano
Tipo de fin
'--------- --- ----------------------------------------------- --- ----------------------------------
Uso de muestra: Depuración. Imprimir UpodateKey (HKEY_CLASSES_ROOT, "keyname", "newvalue")
'----------------------- ---- ---------------------------------------------- ---- ----------------
Función pública UpdateKey (KeyRoot siempre, KeyName como cadena, SubKeyName como cadena, SubKeyValue como cadena) como booleano
Dim rc As Long ' Código de retorno
Dim hKey As Long ' Procesar una clave de registro
Dim hDepth As Long '
Dim lpAttr As SECURITY_ATTRIBUTES 'Tipo de seguridad del registro
lpAttr.nLength = 50 'Establecer atributos de seguridad con los valores predeterminados...
lpAttr.lpSecurityDescriptor = 0 ' ...
lpAttr.bInheritHandle = True ' ...
'-------------------------------- ----------------------
'-Crear/abrir palabras clave de registro...
'------------------------------------------------------ -- -------------
rc = RegCreateKeyEx(KeyRoot, KeyName, _
0, REG_SZ, _
REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, lpAttr, _
hKey, hDepth)
'Crear/Abrir//KeyRoot//KeyName
Si (rc <> ERROR_SUCCESS) Then GoTo CreateKeyError 'Manejo de errores...
'--------- -------------------------------------------------- -
'- Crear/modificar valores de palabras clave...
'----------------------- - ------------------------------------
Si (SubKeyValue = "" ) Luego SubKeyValue = " " ' Necesita ingresar un espacio para que RegSetValueEx() funcione...
' Crear/modificar valores clave
rc = RegSetValueEx(hKey, SubKeyName, _
0, REG_SZ, _
SubKeyValue, LenB(StrConv(SubKeyValue, vbFromUnicode)))
Si (rc <> ERROR_SUCCESS) Then GoTo CreateKeyError ' Error Proceso
'---------------------------------------- - -----------------
'- Cerrar palabras clave del registro...
'------ ---- ---------------------------------------------- ----
rc = RegCloseKey(hKey) 'Cerrar palabra clave
UpdateKey = True 'Regresar correctamente
Salir de la función 'Salir
CreateKeyError:
UpdateKey = False 'Establecer código de retorno de error
rc = RegCloseKey(hKey) 'Intenta cerrar la palabra clave
Finalizar función
'- ------------------------------------------------ -- ------------------------------------------------ -
Uso de muestra: Debug.Print GetKeyValue(HKEY_CLASSES_ROOT, "COMCTL.ListviewCtrl.1\CLSID", "")
'--------- --- ----------------------------------------- --- ------------
-----------------------
Función pública GetKeyValue(KeyRoot tan larga, KeyName como cadena, SubKeyRef como cadena) como cadena p>
Dim i As Long ' Contador de ciclos
Dim rc As Long ' Código de retorno
Dim hKey As Long ' Procesa la clave de registro abierta
Dim hDepth As Long '
Dim sKeyVal As String
Dim lKeyValType As Long ' Tipo de datos de clave de registro
Dim tmpVal As String ' Registro Almacenamiento temporal de palabras clave
Dim KeyValSize As Long ' Tamaño de variable de palabra clave de registro
' Abra la palabra clave de registro en KeyRoot {HKEY_LOCAL_MACHINE...}
'------- ------------------------------------------ -------- -----
rc = RegOpenKeyEx(KeyRoot, KeyName, 0, KEY_ALL_ACCESS, hKey) 'Abre la clave de registro
Si (rc <> ERROR_SUCCESS) Then GoTo GetKeyError 'Manejo error...
tmpVal = String$(1024, 0) 'Asignar espacio variable
KeyValSize = 1024 'Marcar tamaño de variable
'---- ----------------------------------------- --------- ------
'Recuperar el valor de la clave de registro...
'--------- --------- ----------------------------------------- -
rc = RegQueryValueEx(hKey, SubKeyRef, 0, _
lKeyValType, tmpVal, KeyValSize) ' Obtener/crear el valor de la palabra clave
If (rc <> ERROR_SUCCESS) Then GoTo GetKeyError
'Manejo de errores
tmpVal = Left$(tmpVal, InStr(tmpVal, Chr(0)) - 1)
'------------- -----------------------------------------
'Determinar el tipo de conversión del valor de la palabra clave...
'-------------------------- ----------------------------------
Seleccione Caso lKeyValType ' Tipo de datos de búsqueda..
Caso REG_SZ, REG_EXPAND_SZ 'Tipo de datos de clave de registro de cadena
sKeyVal = tmpVal 'Copiar el valor de la cadena
Caso REG_DWORD 'Tabla de registro de cuatro bytes. tipo de datos clave
For i = Len(tmpVal) To 1 Step -1 ' Convertir cada bit
sKeyVal = sKeyVal + Hex(Asc(Mid(tmpVal, i, 1)) ) 'Generar valores carácter por carácter.
Siguiente
sKeyVal = Format$("&h" + sKeyVal) ' Convierte cuatro bytes en cadena
Finalizar selección
GetKeyValue = sKeyVal 'Valor de retorno
rc = RegCloseKey(hKey) 'Cerrar la clave de registro
Función de salida 'Salir
GetKeyError: 'Realizar después de que se produzca el error Borrar. ..
GetKeyValue = vbNullString 'Establece el valor de retorno en una cadena vacía
rc = RegCloseKey(hKey) 'Cierra la clave de registro
Finalizar función p>
Por favor consúltelo