Administración del registro

Librerías finalizadas programadas por usuarios entusiastas

Administración del registro

Notapor PowerDeath » Mar Jul 22, 2014 6:02 pm

Les dejo este código que permite administrar el registro de windows.
Los siguientes procedimientos no funcionan, se produce un error al devolver la matriz.

  • RegEnumerarValores

Código: Seleccionar todo
Importar "Cadena.prp"
Importar "Utiles.prp"
Importar "APIError.prp" ' De: http://www.pauscal.com.ar/foro/viewtopic.php?f=19&t=295

$ADV-

Privado:
'VARIABLES

'ESTRUCTURAS
Estruc SECURITY_ATTRIBUTES_B,nLength,lpSecurityDescriptor:Entero,bInheritHandle:Booleano
'typedef struct _FILETIME {
  'DWORD dwLowDateTime;
  'DWORD dwHighDateTime;
'Estruc FILETIME, dwLowDateTime,dwHighDateTime:Entero
'CONSTANTES

'Const ERROR_NO_MORE_ITEMS = &259

'Accesos
'Const ERROR_SUCCESS = &0
'Permission for all types of access.
Const KEY_ALL_ACCESS = &F003F
'Permission to create symbolic links.
Const KEY_CREATE_LINK = &20
'Permission to create subkeys.
Const KEY_CREATE_SUB_KEY = &4
'Permission to enumerate subkeys.
Const KEY_ENUMERATE_SUB_KEYS = &0008
'Same as KEY_READ.
Const KEY_EXECUTE = &20019
'Permission to give change notification.
Const KEY_NOTIFY = &10
'Permission to query subkey data.
Const KEY_QUERY_VALUE = &1
'Permission for general read access.
Const KEY_READ = &20019
'Permission to set subkey data.
Const KEY_SET_VALUE = &2
'Permission for general write access.
Const KEY_WRITE = &20006

Const Value_Size = 16383
Const Key_Size = 255

' Registros

'Declare Function RegEnumKeyEx Lib "advapi32.dll" Alias "RegEnumKeyExA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpName As String, lpcbName As Long, lpReserved As Long, ByVal lpClass As String, lpcbClass As Long, lpftLastWriteTime As FILETIME) As Long
Proc RegEnumKeyEx(hKey:Entero,dwIndex:Entero,Referencia lpName:Cadena,Referencia lpcbName:Entero,lpReserverd:Entero,lpClass:Cadena,Referencia lpcbClass:Entero,Referencia lpftLastWriteTime:Entero):Entero, "Advapi32.dll" "RegEnumKeyExA"

'Declare Function RegEnumValue Lib "advapi32.dll" Alias "RegEnumValueA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpValueName As String, lpcbValueName As Long, ByVal lpReserved As Long, lpType As Long, lpData As Byte, lpcbData As Long) As Long
Proc RegEnumValue(hKey:Entero,dwIndex:Entero,Referencia lpValueName:Cadena,Referencia lpcchValueName:Entero,lpReserved,lpType,lpData:Entero,Referencia lpcbData:Entero):Entero, "Advapi32.dll" "RegEnumValueA"

'APIS
Proc RegOpenKey(hKey:Entero,lpSubKey:Cadena,ulOptions,samDesired:Entero,Referencia phkResult:Entero):Entero, "Advapi32.dll" "RegOpenKeyExA"
Proc RegCloseKey(hKey:Entero):Entero, "Advapi32.dll"
Proc RegCreateKey(hKey:Entero,lpSubKey:Cadena,Reserved:Entero,lpClass:Cadena,dwOptions:Entero,samDesired:Entero,Referencia lpSecurityAttributes:SECURITY_ATTRIBUTES_B,Referencia PhkResult:Entero,Referencia lpdwDisposition:Entero):Entero, "Advapi32.dll" "RegCreateKeyExA"
Proc RegDeleteValue(hKey:Entero,lpValueName:Cadena):Entero, "Advapi32.dll" "RegDeleteValueA"
Proc RegQueryValueEx(hKey:Entero,lpValueName:Cadena,lpReserved:Entero,Referencia lpType:Entero,Referencia lpData:Cadena,Referencia lpcbData:Entero):Entero, "Advapi32.dll" "RegQueryValueExA"
Proc RegQueryValueExEnt(hKey:Entero,lpValueName:Cadena,lpReserved:Entero,Referencia lpType:Entero,Referencia lpData:Entero,Referencia lpcbData:Entero):Entero, "Advapi32.dll" "RegQueryValueExA"
Proc RegSetValueEx(hKey:Entero,lpValueName:Cadena,Reserver:Entero,dwType:Entero,Referencia lpData:Cadena,cbData:Entero):Entero, "Advapi32.dll" "RegSetValueExA"
Proc RegSetValueExEnt(hKey:Entero,lpValueName:Cadena,Reserver:Entero,dwType:Entero,Referencia lpData:Entero,cbData:Entero):Entero, "Advapi32.dll" "RegSetValueExA"
Proc RegSetValueExReal(hKey:Entero,lpValueName:Cadena,Reserver:Entero,dwType:Entero,Referencia lpData:Real,cbData:Entero):Entero, "Advapi32.dll" "RegSetValueExA"

Público:
'Tipos de valores del Registro
Const REG_NONE = 0
Const REG_SZ = 1
Const REG_EXPAND_SZ = 2
Const REG_BINARY = 3
Const REG_DWORD = 4
Const REG_DWORD_LITTLE_ENDIAN = 4
Const REG_DWORD_BIG_ENDIAN = 5
Const REG_LINK = 6
Const REG_MULTI_SZ = 7
Const REG_RESOURCE_LIST = 8
Const REG_FULL_RESOURCE_DESCRIPTOR = 9
Const REG_RESOURCE_REQUIREMENTS_LIST = 10
Const REG_QWORD = 11
Const REG_QWORD_LITTLE_ENDIAN = 11

Const HKEY_CLASSES_ROOT = &80000000
Const HKEY_CURRENT_USER = &80000001
Const HKEY_LOCAL_MACHINE = &80000002
Const HKEY_USERS = &80000003
Const HKEY_PERFORMANCE_DATA = &80000004
Const HKEY_CURRENT_CONFIG = &80000005
Const HKEY_DYN_DATA = &80000006

' # REGLeerClave # ========================================================================
' Estado: Funciónal
' Autor: PowerDeath
' # FIN # =================================================================================
Proc REGLeerClave(s_Registro:Entero,Seccion,Clave:Cadena):Cadena
Var h_ValueOpen,s_Check,c_Value,Tipo,c_Ent_Return:Entero,c_Cad_Return:Cadena
s_Check = RegOpenKey(s_Registro,Seccion,0,KEY_READ,h_ValueOpen)
Si (s_Check <> ERROR_SUCCESS) Salir
'c_Cad_Return = RepCarac(0,255)
s_Check = RegQueryValueEx(h_ValueOpen,Clave,0,Tipo,c_Cad_Return,c_Value)
Si (s_Check <> ERROR_SUCCESS) Salir
Seleccionar Tipo
   Caso REG_SZ
      c_Cad_Return = RepCarac(0,c_Value)
      s_Check = RegQueryValueEx(h_ValueOpen,Clave,0,0,c_Cad_Return,c_Value)
      Si (s_Check <> ERROR_SUCCESS) Salir
      RegCloseKey(h_ValueOpen)
      Devolver c_Cad_Return
   Caso REG_EXPAND_SZ
      c_Cad_Return = RepCarac(0,c_Value)
      s_Check = RegQueryValueEx(h_ValueOpen,Clave,0,0,c_Cad_Return,c_Value)
      Si (s_Check <> ERROR_SUCCESS) Salir
      RegCloseKey(h_ValueOpen)
      Devolver c_Cad_Return
   Caso REG_BINARY
      s_Check = RegQueryValueExEnt(h_ValueOpen,Clave,0,0,c_Ent_Return,c_Value)
      Si (s_Check <> ERROR_SUCCESS) Salir
      RegCloseKey(h_ValueOpen)
      Devolver EntCad(c_Ent_Return)
   Caso REG_DWORD
      s_Check = RegQueryValueExEnt(h_ValueOpen,Clave,0,0,c_Ent_Return,c_Value)
      Si (s_Check <> ERROR_SUCCESS) Salir
      RegCloseKey(h_ValueOpen)
      Devolver EntCad(c_Ent_Return)
   Caso 4
      s_Check = RegQueryValueExEnt(h_ValueOpen,Clave,0,0,c_Ent_Return,c_Value)
      Si (s_Check <> ERROR_SUCCESS) Salir
      RegCloseKey(h_ValueOpen)
      Devolver EntCad(c_Ent_Return)
   Caso REG_DWORD_BIG_ENDIAN
      s_Check = RegQueryValueExEnt(h_ValueOpen,Clave,0,0,c_Ent_Return,c_Value)
      Si (s_Check <> ERROR_SUCCESS) Salir
      RegCloseKey(h_ValueOpen)
      Devolver EntCad(c_Ent_Return)
   Caso REG_LINK
      c_Cad_Return = RepCarac(0,c_Value)
      s_Check = RegQueryValueEx(h_ValueOpen,Clave,0,0,c_Cad_Return,c_Value)
      Si (s_Check <> ERROR_SUCCESS) Salir
      RegCloseKey(h_ValueOpen)
      Devolver c_Cad_Return
   Caso REG_MULTI_SZ
      c_Cad_Return = RepCarac(0,c_Value)
      s_Check = RegQueryValueEx(h_ValueOpen,Clave,0,0,c_Cad_Return,c_Value)
      Si (s_Check <> ERROR_SUCCESS) Salir
      RegCloseKey(h_ValueOpen)
      Devolver c_Cad_Return
   Caso REG_QWORD
      s_Check = RegQueryValueExEnt(h_ValueOpen,Clave,0,0,c_Ent_Return,c_Value)
      Si (s_Check <> ERROR_SUCCESS) Salir
      RegCloseKey(h_ValueOpen)
      Devolver EntCad(c_Ent_Return)
   Caso REG_QWORD_LITTLE_ENDIAN
      s_Check = RegQueryValueExEnt(h_ValueOpen,Clave,0,0,c_Ent_Return,c_Value)
      Si (s_Check <> ERROR_SUCCESS) Salir
      RegCloseKey(h_ValueOpen)
      Devolver EntCad(c_Ent_Return)
   Caso Otro
   RegCloseKey(h_ValueOpen)
   Devolver c_Cad_Return
FinSeleccionar
FinProc

' # REGBorrarClave # ======================================================================
' Estado: Funciónal
' Autor: PowerDeath
' # FIN # =================================================================================
Proc REGBorrarClave(s_Registro:Entero,s_Sección,s_Clave:Cadena):Booleano
Var h_ValueOpen,s_Check:Entero
s_Check = RegOpenKey(s_Registro,s_Sección,0,KEY_SET_VALUE,h_ValueOpen)
Si (s_Check <> 0) Devolver Falso
s_Check = RegDeleteValue(h_ValueOpen,s_Clave)
RegCloseKey(h_ValueOpen)
Si (s_Check <> 0) Devolver Falso
Devolver Verd
FinProc

' # REGCrearClave # =======================================================================
' Estado: Funciónal
' Autor: PowerDeath
' # FIN # =================================================================================
Proc RegCrearClave(s_Registro,s_Tipo:Entero,S_Sección,s_Clave,s_Contenido:Cadena):Booleano
Var h_ValueOpen,s_Check,Estado,h_result:Entero,Estructura:SECURITY_ATTRIBUTES_B
Estructura.lpSecurityDescriptor = 0
Estructura.bInheritHandle = Verd
Estructura.nLength = Long(Estructura)
s_Check = RegCreateKey(s_Registro,s_Sección, 0,"", 0, KEY_WRITE,Estructura, h_result, Estado)
Si (s_Check <> 0) Salir
'Proc RegSetValueEx(hKey:Entero,lpValueName:Cadena,Reserver:Entero,dwType:Entero,Referencia lpData:Cadena,cbData:Entero)
s_Check = RegSetValueEx(h_result,s_Clave,0,s_Tipo,s_Contenido,CadLong(s_Contenido))
Si (s_Check <> ERROR_SUCCESS) Salir
Seleccionar Estado
Caso 1
   Resultado = h_result
Caso 2
   Resultado = 0
Caso Otro
   Resultado = 0
FinSeleccionar
RegCloseKey(h_result)
FinProc

' # REGEscribirClave # ======================================================================
' Estado: Funciónal
' Autor: PowerDeath
' # FIN # ===================================================================================
Proc RegEscribirClave(s_Registro,s_Tipo:Entero,S_Sección,s_Clave,s_Contenido:Cadena):Booleano
Var h_ValueOpen,s_Check,c_Value,Tipo,c_Ent_Return:Entero,c_Cad_Return:Cadena,c_Real_Return:Real
s_Check = RegOpenKey(s_Registro,s_Sección,0,KEY_WRITE,h_ValueOpen)
Si (s_Check <> ERROR_SUCCESS) Salir
Seleccionar s_Tipo
Caso REG_SZ
s_Check = RegSetValueEx(h_ValueOpen,s_Clave,0,s_Tipo,s_Contenido,CadLong(s_Contenido))
Si (s_Check <> ERROR_SUCCESS) Salir
RegCloseKey(h_ValueOpen)
Devolver 1
Caso Otro
Si EsDecimal(s_Contenido)
   c_Ent_Return = CadEnt(s_Contenido)
   s_Check = RegSetValueExEnt(h_ValueOpen,s_Clave,0,s_Tipo,c_Ent_Return,Long(c_Ent_Return))
   Si (s_Check <> ERROR_SUCCESS) Salir
   RegCloseKey(h_ValueOpen)
   Devolver 1
FinSi
Si EsNumero(s_Contenido)
   c_Real_Return = CadReal(s_Contenido)
   s_Check = RegSetValueExReal(h_ValueOpen,s_Clave,0,s_Tipo,c_Real_Return,Long(c_Real_Return))
   Si (s_Check <> ERROR_SUCCESS) Salir
   RegCloseKey(h_ValueOpen)
   Devolver 1
FinSi
FinSeleccionar
FinProc

' # RegEnumerar # ===========================================================================
' Estado: Funciónal
' Autor: PowerDeath
' # FIN # ===================================================================================
Proc RegEnumerar(s_Registro:Entero,S_Sección:Cadena):Cadena[]
Var c_i,s_Contedor,h_ValueOpen,s_Long:Entero,s_Matriz[]:Cadena
   c_i = RegOpenKey(s_Registro,s_Sección,0,KEY_ENUMERATE_SUB_KEYS,h_ValueOpen)
   Si (c_i <> ERROR_SUCCESS) Salir
   s_Contedor = 0
   ReDim s_Matriz,1
   s_Matriz[s_Contedor] = RepCarac(0,255)
   s_Long = 255
Mientras RegEnumKeyEx(h_ValueOpen,s_Contedor,s_Matriz[s_Contedor],s_Long,0,0,0,0) <> ERROR_NO_MORE_ITEMS
   'Si c_i =  Entonces Salir Repetir
   s_Matriz[s_Contedor] = IzquierdaCad(s_Matriz[s_Contedor],s_Long)
   ReDim Preservar s_Matriz,LongMat(s_Matriz) + 1
   Incrementar(s_Contedor)
   s_Long = 255
   s_Matriz[s_Contedor] = RepCarac(0,255)
FinMientras
   's_Matriz[Límite(s_Matriz)] = EntCad(Límite(s_Matriz))
   RegCloseKey(h_ValueOpen)
   'MostrarMatrizCad(s_Matriz)
   Resultado = s_Matriz
FinProc

' # RegEnumerar # ===========================================================================
' Estado: No Funciónal
' Autor: PowerDeath
' # FIN # ===================================================================================
Proc RegEnumerarValores(s_Registro:Entero,S_Sección:Cadena):Cadena[]
Var c_i,s_Contedor,h_ValueOpen,s_Long,Error:Entero,s_Matriz[]:Cadena
   c_i = RegOpenKey(s_Registro,s_Sección,0,KEY_QUERY_VALUE,h_ValueOpen)
   Si (c_i <> ERROR_SUCCESS) Salir
   s_Contedor = 0
   ReDim s_Matriz,1
   s_Matriz[s_Contedor] = RepCarac(0,255)
   s_Long = 255
Mientras RegEnumValue(h_ValueOpen,s_Contedor,s_Matriz[s_Contedor],s_Long,0,0,0,0) <> ERROR_NO_MORE_ITEMS
   'Si c_i =  Entonces Salir Repetir
   s_Matriz[s_Contedor] = IzquierdaCad(s_Matriz[s_Contedor],s_Long)
   ReDim Preservar s_Matriz,LongMat(s_Matriz) + 1
   Incrementar(s_Contedor)
   s_Long = 255
   s_Matriz[s_Contedor] = RepCarac(0,255)
FinMientras
   ReDim Preservar s_Matriz,LongMat(s_Matriz) - 1
   RegCloseKey(h_ValueOpen)
   Resultado = s_Matriz
FinProc


La librería utiliza los siguientes procedimientos importados de "Utiles.prp"

Código: Seleccionar todo
Proc Incrementar(Referencia i_Valor:Entero,Opcional i_b_Valor:Entero = 1)
   i_Valor = i_Valor + i_b_Valor
FinProc


Código: Seleccionar todo
Proc EsDecimal(Referencia PalabraA:Cadena):Booleano ' VERIFICAR
Var Valor:Booleano
Var i:Entero
Var nums,a:Cadena
nums = "123456789.,@"
Valor = Verd
Contar i = 1 a CadLong(PalabraA)
   a = ParteCad(PalabraA,i,1)
      Si BuscarEnCad(Nums,a) = 0 Entonces
         Valor = Falso
         Salir Contar
      FinSi
Seguir
   Devolver Valor
FinProc


Código: Seleccionar todo
Proc EsNumero(Referencia NumeroA:Cadena):Booleano
Var Valor:Booleano
Var i:Entero
Var nums,a:Cadena
nums = "0123456789"
Valor = Verd
Contar i = 1 a CadLong(NumeroA)
   a = ParteCad(NumeroA,i,1)
      Si BuscarEnCad(Nums,a) = 0 Entonces
         Valor = Falso
         Salir Contar
      FinSi
Seguir
   Devolver Valor
FinProc


Nota: Esta librería puede contener errores y no ha sido optimizada. La razón es que es la primera vez que trabajo con estas Apis.
Imagen
PowerDeath
 
Mensajes: 160
Registrado: Sab Ago 11, 2012 5:29 am

Sponsor


Volver a Librerias

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado

cron