Código fuente subyacente volátil
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 de API de registro...
-
Declaración privada Función RegCloseKey Lib " advapi 32 "(ByVal hKey As Long) As Long
Función de declaración privada RegCreateKeyEx Lib "advapi32 "Alias" RegCreateKeyExA" (ByVal hKey es larga, ByVal lpSubKey es cadena, ByVal reservado es larga, ByVal lpClass es String, ByVal dwOptions es Long, ByVal samDesired es Long, ByRef lpSecurityAttributes es SECURITY_ATTRIBUTES, ByRef phkResult es Long, ByRef lpdwDisposition es Long)
Función de declaración privada RegOpenKeyEx Lib "advapi32 "alias" RegOpenKeyExA" ( ByVal hKey es largo, ByVal lpSubKey es cadena, ByVal ulOptions es largo, ByVal samDesired es largo, ByRef phkResult es largo) es largo
función de declaración privada RegQueryValueEx Lib " advapi 32 " Alias " regqueryvaluexa "(ByVal hKey es largo, ByVal lpValueName es cadena, ByVal lpReserved es largo, ByRef lpType es largo, ByVal lpData es cadena, ByRef lpcbData es largo) es largo
Función de declaración privada RegSetValueEx Lib "advapi32 "alias" RegSetValueExA" ( ByVal hKey es Long, ByVal lpValueName es String, ByVal Reserved es Long, ByVal dwType es Long, ByVal lpData es String, ByVal cbData es Long) es Long
Función de declaración privada RegDeleteKey Lib alias "advapi32.dll" " RegDeleteKeyA" (ByVal hKey es Long, ByVal lpSubKey es String) es Long
Función de declaración privada RegDeleteValue Lib "advapi32.dll "Alias" RegDeleteValueA" (ByVal hKey es Long, ByVal lpValueName es String) es Long
-
-Constantes de API de registro...
-
Tipo de datos de registro...
Const REG_SZ = 1' Cadena terminada en nulo Unicode.
"const REG_EXPAND_SZ=2" Cadena Unicode terminada en nulo.
Const REG_DWORD = 4' Número de 32 bits
Público Const REG_BINARY = 3' Binario de formato libre
Valor del tipo de creación del registro...
Const REG_OPTION_NON_VOLATILE = 0 'Esta palabra clave se conserva cuando se reinicia el sistema.
Opciones de seguridad de palabras clave del registro...
READ_CONTROL constante = ampH20000
Valor de consulta de palabra clave constante = ampH1
Const KEY_CREATE_SUB_KEY = ampH4
const KEY _ ENUMERATE _ SUB _ KEYS = ampH8
Const KEY _ NOTIFY = ampH10
Const KEY _ CREATE _ LINK = ampH20
Const KEY _ READ = KEY _ QUERY _ VALUE KEY _ ENUMERATE _ SUB _ KEYS KEY _ NOTIFY READ _ CONTROL
Const Key Write = Clave Establecer valor Clave Crear subclave Control de lectura
Const KEY_EXECUTE = KEY_READ
const KEY _ ALL _ ACCESS = KEY _ QUERY _ VALUE KEY _ SET _ VALUE _
keyword_create_subkeywordkeyword_enum_subkeyword_
KeyNotificationKey Crear control de lectura de enlace
Tipo de raíz de clave de registro...
Constante pública HKEY_class_ROOT = & H80000000
Const pública HKEY_Current _user = ampH80000001
Constante pública HKEY_LOCAL_MACHINE = ampH80000002
Construcción pública HKEY _user = ampH80000003
Construcción pública HKEY _PERFORMANCE_DATA = ampH80000004
Valor de retorno...
Constante pública ERROR_NONE = 0
Constante pública ERROR_BADKEY = 2
Constante pública ERROR_ACCESS_DENIED = 8
p>Constante pública ERROR_SUCCESS = 0
-
-Tipo de atributo de seguridad del registro...
-
Atributos de seguridad de tipo privado
n tiene la misma longitud
lpSecurityDescriptor es largo
bInheritHandle es booleano
Tipo de finalización
-
Ejemplo de uso: depuración.
Imprimir UpdateKey(HKEY_Class_Root, "Nombre de clave", "Nuevo valor")
-
Modificar valor de clave
Clave de actualización de función pública (la raíz de la clave es larga, KeyName es String, SubKeyName es String, SubKeyValue es String) es booleano
Dim rc As Long 'código de retorno
' Dim hKey As Long 'palabra clave de registro de procesamiento.
' Dim hDepth As Long '
Dim lpAttr As SECURITY_ATTRIBUTES Tipo de seguridad del registro
' Establece los atributos de seguridad en los valores predeterminados. ...
lpAttr.lpSecurityDescriptor = 0 '...
' lpAttr.bInheritHandle = True '...
-
-Crear/abrir clave de registro...
-
rc = RegCreateKeyEx(KeyRoot, KeyName, _
0, REG_SZ, _ p>
REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, lpAttr, _
HKey, hDepth)' Crear/Abrir //KeyRoot//KeyName.
if(RC lt; gtError_success) luego vaya a "crear error de clave" manejo de errores...
-
-Crear/modificar valor de palabra clave.. .
-
Si (valor de subclave = " ")entonces valor de subclave = " " "Necesita ingresar un espacio para que RegSetValueEx() funcione. ...
Crear/modificar valores de palabras clave
rc = RegSetValueEx(hKey, SubKeyName, _
0, REG_SZ, _
SubKeyValue, LenB (StrConv( SubKeyValue, vbFromUnicode)))
if(RC lt; gtError_success) luego vaya a manejo de errores "Crear error de clave"
-
-Cerrar clave de registro. ..
-
RC = RegCloseKey(hKey)"Clave de cierre.
"UpdateKey = True" se devolvió correctamente.
Salida de "función de salida"
CreateKeyError:
"UpdateKey = False" establece el código de retorno de error.
Rc = RegCloseKey(hKey)'Intenta cerrar la palabra clave.
Función final
-
Ejemplo de uso: depuración. PrintGetKeyValue (raíz de clase HKEY.
ListviewCtrl.1\CLSID ","")
-
Recuperar datos
Función pública GetKeyValue(KeyRoot es Long, KeyName es String, SubKeyRef es String) Para String
Contador de bucle Dim i As Long
Dim rc As Long 'Código de retorno
Dim hKey As Long 'Maneja la clave de registro abierta /p>.
' Dim hDepth As Long '
Atenuar sKeyVal como cadena
El tipo de valor Dimlkey es largo 'Tipo de datos de clave de registro
Atenuar tmpVal como registro de cadena clave almacenada temporalmente
Tamaño de variable de clave de registro "Dim KeyValSize As Long"
Abra KeyRoot {HKEY _ LOCAL _ MACHINE bajo la clave de registro...}
RC = regopenkeyex(keyroot,keyname,0,key_all_access,HKEY)'Abrir clave de registro.
if(RC lt; gtError _ Success) then gotogetkeyerror 'Manejar el 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) 'Obtiene/crea el valor de la clave.
if (RC lt; gtError_success) then gotogetkeyerror 'Manejo de errores
p>tmpVal = Left$(tmpVal,InStr( tmpVal,Chr(0)) - 1)
-
Determina el tipo de conversión del valor de la palabra clave...
-
<. p>Seleccione Case lKeyValType 'Tipo de datos de búsqueda...Case REG_SZ, REG_EXPAND_SZ 'Tipo de datos de clave de registro de cadena.
"SKeyVal = tmpVal" copia el valor de una cadena.
Tipo de datos de clave de registro de cuatro bytes "Case REG_DWORD"
Para I = len (tmpval) a 1 paso-1 'Convierta cada bit.
skeyval = skeyval hex(ASC(mid(tmp val, I, 1))' Genera valores carácter por carácter.
Luego
sKeyVal = Formato $( "&H" sKeyVal)'Convierte cuatro bytes en una cadena
Finalizar selección
GetKeyValue = sKeyVal 'Valor de retorno
Rc = RegCloseKey(hKey). )' Cerrar clave de registro.
Salida de "función de salida"
'Borrar después de que se produzca un error.
...
"GetKeyValue = vbNullString" establece el valor de retorno en la cadena vacía.
Rc = RegCloseKey(hKey)' Cerrar clave de registro.
Función final
Eliminar valor clave
La función pública DeleteValues (KeyRoot es Long, KeyName es String, SubKeyName es String) es booleana
Dim rc es tan largo
Dim hKey es tan largo
Dim hDepth As Long
Dim lpAttr como atributo de seguridad
lpAttr.nLength = 50
lpAttr.lpSecurityDescriptor = 0
lpAttr.bInheritHandle = True
rc = RegCreateKeyEx(KeyRoot, KeyName,_
0, REG_SZ, _
REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, lpAttr, _
hKey, hDepth)
Si rc lt gtERROR_SUCCESS entonces vaya a ErrorTary p>
rc = RegDeleteValue(hKey,SubKeyName)
Si rc lt gtERROR_SUCCESS entonces vaya a ErrorTary
DeleteValues = True
rc = RegCloseKey (hKey)
Salir de la función
Lista de errores:
DeleteValues = False
rc = RegCloseKey(hKey)
Función final
Esta es una API de llamada de registro completa que se puede modificar a voluntad. Se ha comentado el significado y uso de la función, y otras funciones son como gatos y tigres. En cuanto a los datos binarios, simplemente cambie REG_SZ a REG_BINARY en la función que abre el elemento.