Red de conocimientos sobre prescripción popular - Colección de remedios caseros - Acerca del procesamiento de valores de clave binaria del registro por parte de vbs

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

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

Por favor consúltelo