Explicación del código fuente de la política
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 = &H4
const KEY_ENUMERATE_SUB_KEYS = &H8
p>Const KEY _ NOTIFY = & ampH10
Const KEY _ CREATE _ LINK = & ampH20
Const KEY _ READ = KEY _ QUERY _ VALUE+KEY _ ENUMERATE _ SUB _ KEYS+KEY _ NOTIFY+READ _ CONTROL
Escritura de clave constante = valor de conjunto de claves + subclave de creación de clave + control de lectura
Constante KEY_EXECUTE = KEY_READ
const KEY_ALL_ACCESS = KEY_QUERY_VALUE+KEY_SET_VALUE+_
keyword_create_subkeyword+keyword_enum_sub Palabra clave + _
Notificación de clave + clave enlace de creación + control de lectura
Tipo raíz de clave de registro...
Constante pública HKEY_class_ROOT = & H80000000
HKEY pública _CURRENT_USER = & H80000001
Constante pública HKEY _ LOCAL _ MACHINE = & H80000002
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
Constante pública ERROR_SUCCESS = 0
-
-Tipo de atributo de seguridad de tabla de registro...
-
Atributo de seguridad de tipo privado
n tiene la misma longitud
lpSecurityDescriptor es largo
bInheritHandle es un valor booleano
Tipo final
-
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<>Error_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<>Error_success) luego vaya a manejo de errores "Crear error de clave"
-
-Cerrar clave de registro...
-
RC = RegCloseKey(hKey)"Tecla Cerrar.
"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. Imprimir GetKeyValue(raíz de clase HKEY. ListviewCtrl.1\CLSID ","")
-
Recuperar datos
Función pública GetKeyValue(KeyRoot es larga, KeyName es String, SubKeyRef es String) es String
Contador de bucle Dim i As Long
Dim rc As Long 'código de retorno
Dim hKey As Long 'procesamiento en Clave de registro.
' Dim hDepth As Long '
Dim sKeyVal como cadena
El tipo de valor Dimlkey es largo 'Tipo de datos de clave de registro
Almacene temporalmente Dim tmpVal como una clave de registro de cadena.
Tamaño de variable de clave de registro "Dim KeyValSize As Long"
Abra KeyRoot {palabra clave de registro en HKEY _ LOCAL _ MACHINE...}
-
RC = regopenkeyex (keyroot, keyname, 0, key_all_access, HKEY) 'Abrir clave de registro.
if(RC<>Error_success) then gotogetkeyerror 'Manejar el error. ...
TmpVal = String$(1024, 0)' asigna 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 del palabra clave.
if(RC<>Error_success)entonces gotogetkeyerror 'manejo de errores
tmpVal = Left$(tmpVal,InStr(tmpVal,Chr(0))-1)
-
Determina 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" 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)'Convertir 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" Conjuntos el valor de retorno a la cadena vacía.
Rc = RegCloseKey(hKey)' Cierra la 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<& gtERROR_SUCCESS entonces vaya a ErrorTary
rc = RegDeleteValue(hKey, SubKeyName)
Si rc & lt& gtERROR_SUCCESS entonces vaya a ErrorTary
DeleteValues = True
rc = RegCloseKey (hKey) p>
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.