[Cramel] Regedit.cml ~ Crea, Edita y Elimina claves del Registro

Iniciado por BlackBlex, Julio 05, 2017, 08:30:39 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

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:
Código: Cramel
'/**
' * 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.
Código: Cramel
'/**
' * 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.
Código: Cramel
'/**
' * 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
Código: Cramel
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



De arriba hacia abajo, de izquierda a derecha.

Cualquier sugerencia, o error, comenten.