Les traigo este código el cual te facilita la creación, edición o eliminación de claves del Registro
Información
- Compatible con Cramel: 2.0.0.362
- Librerías requeridas: MSVBVM60.cml
Tiene los siguientes métodos:
- crearClaveCadena:Booleano - Crea un valor cadena, o una clave con su valor cadena
- crearClaveWord:Booleano - Crea un valor Dword, o una subclave con su valor Dword
- establecerClaveCadena:Booleano - Establece el valor cadena de una clave existente, sino crea el valor
- establecerClaveWord:Booleano - Establece el valor word de una clave existente, sino crea el valor
- leerClaveCadena:Cadena - Devuelve el valor cadena de una clave
- leerClaveWord:Word - Devuelve el valor word de una clave
- borrarValor:Booleano - Borra un valor de una clave
- borrarClave:Booleano - Borra una clave
Tiene las siguientes Propiedades:
- hClave - Establece la HKEY que se usara | HKEY_CLASSES_ROOT, HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE, HKEY_USERS, HKEY_PERFORMANCE_DATA, HKEY_PERFORMANCE_TEXT, HKEY_PERFORMANCE_NLSTEXT, HKEY_CURRENT_CONFIG o HKEY_DYN_DATA
- sClave - Establece la SubKEY que se usara
- Clave - Establece la clave o el valor que se recuperará, creará o borrará
- ValorCadena - Establece el contenido del valor
- ValorWord - Establece el contenido del valor
Para usarla solo es de Importar la librería Cramel, Regedit, su archivo de constantes y apis propia; después declaramos una variable del tipo Regedit y creamos el objecto.
Y es todo por el momento.
Aquí el código Regedit.cml:
'/**
' * Regedit
' *
' * @author Jovani Pérez Damián (@BlackBlex)
' *
' * ==============Information==============
' * Filename: Regedit.cml
' * ---------------------------------------
'*/
Clase Regedit,_
rhKey:Entero,_
rsKey,_
rKey,_
rValueC:Cadena,_
rType,_
rSize,_
rNorU,_
rPtr:Entero,_
rValueW:Word,_
rStrucSA:SECURITY_ATTRIBUTES
Sección Privada
Proc setrhKey(nuevo:Entero)
rhKey = nuevo
FinProc
Proc getrhKey:Entero
Resultado = rhKey
FinProc
Proc setrsKey(nuevo:Cadena)
rsKey = nuevo
FinProc
Proc getrsKey:Cadena
Resultado = rsKey
FinProc
Proc setrKey(nuevo:Cadena)
rKey = nuevo
FinProc
Proc getrKey:Cadena
Resultado = rKey
FinProc
Proc setrSize(nuevo:Entero)
rSize = nuevo
FinProc
Proc getrSize:Entero
Resultado = rSize
FinProc
Proc setrPtr(nuevo:Entero)
rPtr = nuevo
FinProc
Proc getrPtr:Entero
Resultado = rPtr
FinProc
Proc setrValueC(nuevo:Cadena)
rValueC = nuevo
FinProc
Proc getrValueC:Cadena
Resultado = rValueC
FinProc
Proc setrValueW(nuevo:Word)
rValueW = nuevo
FinProc
Proc getrValueW:Word
Resultado = rValueW
FinProc
Sección Pública
Prop hClave:Entero
Lectura:getrhKey
Escritura:setrhKey
FinProp
Prop sClave:Cadena
Lectura:getrsKey
Escritura:setrsKey
FinProp
Prop Clave:Cadena
Lectura:getrKey
Escritura:setrKey
FinProp
Prop Tamaño:Entero
Lectura:getrSize
Escritura:setrSize
FinProp
Prop Puntero:Entero
Lectura:getrPtr
Escritura:setrPtr
FinProp
Prop ValorCadena:Cadena
Lectura:getrValueC
Escritura:setrValueC
FinProp
Prop ValorWord:Word
Lectura:getrValueW
Escritura:setrValueW
FinProp
Proc crearClaveCadena:Booleano
Resultado = Falso
rStrucSA.lpSecurityDescriptor = 0
rStrucSA.bInheritHandle = 1
rStrucSA.nLength = &rStrucSA
Si (RegCreateKey(EsteObjeto.hClave, EsteObjeto.sClave, 0, "", 0, KEY_WRITE, rStrucSA@, rPtr@, rNorU@) = ERROR_SUCCESS) Entonces
rSize = CadLong(rValueC)
Si ( RegSetValue(EsteObjeto.Puntero, EsteObjeto.Clave, 0, REG_SZ, StrPtr(rValueC), rSize) = ERROR_SUCCESS ) Entonces
Resultado = Verdad
FinSi
FinSi
RegCloseKey(EsteObjeto.Puntero)
FinProc
Proc crearClaveWord:Booleano
Resultado = Falso
rStrucSA.lpSecurityDescriptor = 0
rStrucSA.bInheritHandle = 1
rStrucSA.nLength = &rStrucSA
Si (RegCreateKey(EsteObjeto.hClave, EsteObjeto.sClave, 0, "", 0, KEY_WRITE, rStrucSA@, rPtr@, rNorU@) = ERROR_SUCCESS) Entonces
rSize = &rValueW
rSize = rSize * 2
Si ( RegSetValue(EsteObjeto.Puntero, EsteObjeto.Clave, 0, REG_DWORD, rValueW@, rSize) = ERROR_SUCCESS ) Entonces
Resultado = Verdad
FinSi
FinSi
RegCloseKey(EsteObjeto.Puntero)
FinProc
Proc establecerClaveCadena:Booleano
Resultado = Falso
Si (RegOpenKey(EsteObjeto.hClave, EsteObjeto.sClave, 0, KEY_WRITE, rPtr@) = ERROR_SUCCESS) Entonces
rSize = CadLong(rValueC)
Si ( RegSetValue(EsteObjeto.Puntero, EsteObjeto.Clave, 0, REG_SZ, StrPtr(rValueC), rSize) = ERROR_SUCCESS ) Entonces
Resultado = Verdad
FinSi
FinSi
RegCloseKey(EsteObjeto.Puntero)
FinProc
Proc establecerClaveWord:Booleano
Resultado = Falso
Si (RegOpenKey(EsteObjeto.hClave, EsteObjeto.sClave, 0, KEY_WRITE, rPtr@) = ERROR_SUCCESS) Entonces
rSize = &rValueW
rSize = rSize * 2
Si ( RegSetValue(EsteObjeto.Puntero, EsteObjeto.Clave, 0, REG_DWORD, rValueW@, rSize) = ERROR_SUCCESS ) Entonces
Resultado = Verdad
FinSi
FinSi
RegCloseKey(EsteObjeto.Puntero)
FinProc
Proc leerClaveCadena:Cadena
Resultado = "Desconocido"
Si (RegOpenKey(EsteObjeto.hClave, EsteObjeto.sClave, 0, KEY_QUERY_VALUE, rPtr@) = ERROR_SUCCESS) Entonces
rType = REG_SZ
RegQueryValue(EsteObjeto.Puntero, EsteObjeto.Clave, 0, rType@, Nulo, rSize@)
Resultado = Espacio(EsteObjeto.Tamaño)
RegQueryValue(EsteObjeto.Puntero, EsteObjeto.Clave, 0, rType@, StrPtr(Resultado), rSize@)
Resultado = TruncarCadena(Resultado)
FinSi
RegCloseKey(EsteObjeto.Puntero)
FinProc
Proc leerClaveWord:Word
Resultado = -1
Si (RegOpenKey(EsteObjeto.hClave, EsteObjeto.sClave, 0, KEY_QUERY_VALUE, rPtr@) = ERROR_SUCCESS) Entonces
rType = REG_DWORD
RegQueryValue(EsteObjeto.Puntero, EsteObjeto.Clave, 0, rType@, Nulo, rSize@)
RegQueryValue(EsteObjeto.Puntero, EsteObjeto.Clave, 0, rType@, Resultado@, rSize@)
FinSi
RegCloseKey(EsteObjeto.Puntero)
FinProc
Proc borrarValor:Booleano
Resultado = Falso
Si (RegOpenKey(EsteObjeto.hClave, EsteObjeto.sClave, 0, KEY_SET_VALUE, rPtr@) = ERROR_SUCCESS) Entonces
Si ( RegDeleteValue(EsteObjeto.Puntero, EsteObjeto.Clave) = ERROR_SUCCESS ) Entonces
Resultado = Verdad
FinSi
FinSi
RegCloseKey(EsteObjeto.Puntero)
FinProc
Proc borrarClave:Booleano
Resultado = Falso
Si (RegOpenKey(EsteObjeto.hClave, EsteObjeto.sClave, 0, KEY_SET_VALUE, rPtr@) = ERROR_SUCCESS) Entonces
Si (RegDeleteKey(EsteObjeto.Puntero, "") = ERROR_SUCCESS) Entonces
Resultado = Verdad
FinSi
FinSi
RegCloseKey(EsteObjeto.Puntero)
FinProc
FinClase
Proc WordCad(Valor:Word, Opcional Base:Entero = 16):Cadena
Resultado = TruncarCadena(itoa(Valor,Espacio(10),Base))
FinProc
Archivo
Constantes.cml <- Se recomienda que tengan un archivo propio de constantes (y que sea global), donde puedan poner todas las constantes que no contenta Cramel por defecto.
'/**
' * Constantes para el Regedit
' *
' * @author Jovani Pérez Damián (@BlackBlex)
' *
' * ==============Information==============
' * Filename: Constantes.cml
' * ---------------------------------------
'*/
'Constantes Regedit'
'Registro'
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_PERFORMANCE_TEXT = &80000050
Const HKEY_PERFORMANCE_NLSTEXT = &80000060
Const HKEY_CURRENT_CONFIG = &80000005
Const HKEY_DYN_DATA = &80000006
'Registro'
'Desired Access'
Const KEY_ALL_ACCESS = &F003F
Const KEY_CREATE_LINK = &0020
Const KEY_CREATE_SUB_KEY = &0004
Const KEY_ENUMERATE_SUB_KEYS = &0008
Const KEY_EXECUTE = &20019
Const KEY_NOTIFY = &0010
Const KEY_QUERY_VALUE = &0001
Const KEY_READ = &20019
Const KEY_SET_VALUE = &0002
Const KEY_WOW64_32KEY = &0200
Const KEY_WOW64_64KEY = &0100
Const KEY_WRITE = &20006
'Desired Access'
'Registry Value Type'
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
'Registry Value Type'
'Error message'
Const ERROR_SUCCESS = &0
'Error message'
'Constantes Regedit'
Archivo
APIS.cml <- Se recomienda que tengan un archivo propio de APIS (y que sea global), donde puedan poner todas las APIS que no contenta Cramel por defecto.
'/**
' * APIS para el Editor de Registro
' *
' * @author Jovani Pérez Damián (@BlackBlex)
' *
' * ==============Information==============
' * Filename: APIS.cml
' * ---------------------------------------
'*/
'APIS Regedit'
API RegOpenKey(hKey:Entero, lpSubKey:Cadena, ulOptions, samDesired, phkResult:Entero):Entero, "Advapi32.dll" "RegOpenKeyExA"
API RegQueryValue(hKey:Entero, lpValueName:Cadena, lpReserved, lpType, lpData, lpcbData:Entero):Entero, "Advapi32.dll" "RegQueryValueExA"
API RegCloseKey(hKey:Entero):Entero, "Advapi32.dll"
API RegCreateKey(hKey:Entero, lpSubKey:Cadena, lpReserved:Entero, lpClass:Cadena, dwOptions:Entero, samDesired:Entero, lpSecurityAttributes:Entero, phkResult, lpdwDisposition:Entero):Entero, "Advapi32.dll" "RegCreateKeyExA"
API RegDeleteKey(hKey:Entero, lpSubKey:Cadena):Entero, "Advapi32.dll" "RegDeleteKeyA"
API RegSetValue(hKey:Entero, lpValueName:Cadena, lpReserved, lpType, lpData, cbData:Entero):Entero, "Advapi32.dll" "RegSetValueExA"
API RegDeleteValue(hKey:Entero, lpValueName:Cadena):Entero, "Advapi32.dll" "RegDeleteValueA"
'APIS Regedit'
Y aquí un ejemplo usando Regedit.cml
Importar "Cramel.cml"
Importar "MSVBVM60\MSVBVM60.cml"
Importar "Constantes.cml"
Importar "APIS.cml"
Importar "Regedit.cml"
Var registro:Regedit
Crear registro
'Creamos la subclave HelloCramel con una clave Test con valor "Prueba"'
registro.hClave = HKEY_CURRENT_USER
registro.sClave = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run\\HelloCramel"
registro.Clave = "Test"
registro.ValorCadena = "Prueba"
Si ( registro.crearClaveCadena ) Entonces
Mensaje("Correcto")
SiNo
Mensaje("Error")
FinSi
'Establecemos la clave HelloCramel'
registro.hClave = HKEY_CURRENT_USER
registro.sClave = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"
registro.Clave = "HelloCramel"
registro.ValorCadena = "Estamos aquí"
Si ( registro.crearClaveCadena ) Entonces
Mensaje("Correcto")
SiNo
Mensaje("Error")
FinSi
'SO'
registro.hClave = HKEY_LOCAL_MACHINE
registro.sClave = "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion"
registro.Clave = "ProductName"
Mensaje(registro.leerClaveCadena)
'Lang'
registro.hClave = HKEY_CURRENT_USER
registro.sClave = "Control Panel\\International"
registro.Clave = "LocaleName"
Mensaje(registro.leerClaveCadena)
'User path'
registro.hClave = HKEY_CURRENT_USER
registro.sClave = "Volatile Environment"
registro.Clave = "USERPROFILE"
Mensaje(registro.leerClaveCadena)
'Random Key value DWord'
registro.hClave = HKEY_LOCAL_MACHINE
registro.sClave = "SOFTWARE\\Microsoft\\Windows\\ScriptedDiagnosticsProvider"
registro.Clave = "RemoteServerResponseId"
Mensaje(WordCad(registro.leerClaveWord, 16))
'Borramos el valor HelloCramel'
registro.hClave = HKEY_CURRENT_USER
registro.sClave = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"
registro.Clave = "HelloCramel"
Si ( registro.borrarValor ) Entonces
Mensaje("Correcto")
SiNo
Mensaje("Error")
FinSi
'Borramos la subclave HelloCramel'
registro.hClave = HKEY_CURRENT_USER
registro.sClave = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run\\HelloCramel"
Si ( registro.borrarClave ) Entonces
Mensaje("Correcto")
SiNo
Mensaje("Error")
FinSi
'Establecemos una clave String'
registro.hClave = HKEY_CURRENT_USER
registro.sClave = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"
registro.Clave = "HelloCramelC"
registro.ValorCadena = "\"C:\test.exe\""
Si ( registro.crearClaveCadena ) Entonces
Mensaje("Correcto")
SiNo
Mensaje("Error")
FinSi
'Establecemos una clave DWord'
registro.hClave = HKEY_CURRENT_USER
registro.sClave = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"
registro.Clave = "HelloCramelW"
registro.ValorWord = &c0a
Si ( registro.crearClaveWord ) Entonces
Mensaje("Correcto")
SiNo
Mensaje("Error")
FinSi
'Cambiamos el valor de HelloCramelW'
registro.hClave = HKEY_CURRENT_USER
registro.sClave = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"
registro.Clave = "HelloCramelW"
registro.ValorWord = &fffc
Si ( registro.establecerClaveWord ) Entonces
Mensaje("Correcto")
SiNo
Mensaje("Error")
FinSi
Destruir registro
(http://i.imgur.com/tSY7Ovd.png)
De arriba hacia abajo, de izquierda a derecha.
Cualquier sugerencia, o error, comenten.