Pregunta: | 41555 - MANIPULAR REGISTRO |
Autor: | Janet marquet |
Como podria manipular el registro de windows para añadir una clave en HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run]?
Es para que el programa se ejecute siempre al iniciar windows. Gracias |
Respuesta: | E-Mondo . |
1ª PARTE
En un modulo pegar este código tal y como está: ' Este modulo es la forma basica de usar el registro ' de Windows, pero se puede implementar para: ' ' - Obtener valores binarios ' - Obtener un valor si la clave existe '------------------------------------------------------------- ' Formato del Editor del Registro (Regedit) ' ' Mi PC ' +__ HKEY_LOCAL_MACHINE ' +___ Software ' +___ Microsoft / ' +___ Windows | BootCount "3" ' +___ CurrentVersion --| BPC_Region "1" ' | ConfigPath "C:\WINDOWS\Config" ' \ ' ' Clave: HKEY_LOCAL_MACHINE ' Subclave: Software; Microsoft; Windows; CurrentVersion ' Entrada: BootCount; BPC_Region; ConfigPath ' Valor: "3"; "1"; "C:\WINDOWS\Config" Dim Ret As Long 'Valor de retorno para todos procedimientos Const REG_SZ = 1 ' Claves principales de Regedit (Solo lectura) Public Const HKEY_CLASSES_ROOT = &H80000000 Public Const HKEY_CURRENT_USER = &H80000001 Public Const HKEY_LOCAL_MACHINE = &H80000002 Public Const HKEY_USERS = &H80000003 Public Const HKEY_PERFORMANCE_DATA = &H80000004 Public Const HKEY_CURRENT_CONFIG = &H80000005 Public Const HKEY_DYN_DATA = &H80000006 Public Const HKEY1 = &H80000000 Public Const HKEY2 = &H80000001 Public Const HKEY3 = &H80000002 Public Const HKEY4 = &H80000003 Public Const HKEY5 = &H80000004 Public Const HKEY6 = &H80000005 Public Const HKEY7 = &H80000006 'Declaraciones API para acceder al registro Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long Declare Function RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName As String) As Long Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long Declare Function RegDeleteKey Lib "advapi32.dll" Alias "RegDeleteKeyA" (ByVal hKey As Long, ByVal lpSubKey As String) As Long Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long |
Respuesta: | E-Mondo em |
He puesto parte de un codigo para manipular el registro pero no he visto que salga, asi que lo pongo entero, si se corta, mandame un mail y lo mando. Un saludo.
Copia a partir de esta linea y pega el codigo en un modulo. ' Este modulo es la forma basica de usar el registro ' de Windows, pero se puede implementar para: ' ' - Obtener valores binarios ' - Obtener un valor si la clave existe '------------------------------------------------------------- ' Formato del Editor del Registro (Regedit) ' ' Mi PC ' +__ HKEY_LOCAL_MACHINE ' +___ Software ' +___ Microsoft / ' +___ Windows | BootCount "3" ' +___ CurrentVersion --| BPC_Region "1" ' | ConfigPath "C:\WINDOWS\Config" ' \ ' ' Clave: HKEY_LOCAL_MACHINE ' Subclave: Software; Microsoft; Windows; CurrentVersion ' Entrada: BootCount; BPC_Region; ConfigPath ' Valor: "3"; "1"; "C:\WINDOWS\Config" Dim Ret As Long 'Valor de retorno para todos procedimientos Const REG_SZ = 1 ' Claves principales de Regedit (Solo lectura) Public Const HKEY_CLASSES_ROOT = &H80000000 Public Const HKEY_CURRENT_USER = &H80000001 Public Const HKEY_LOCAL_MACHINE = &H80000002 Public Const HKEY_USERS = &H80000003 Public Const HKEY_PERFORMANCE_DATA = &H80000004 Public Const HKEY_CURRENT_CONFIG = &H80000005 Public Const HKEY_DYN_DATA = &H80000006 Public Const HKEY1 = &H80000000 Public Const HKEY2 = &H80000001 Public Const HKEY3 = &H80000002 Public Const HKEY4 = &H80000003 Public Const HKEY5 = &H80000004 Public Const HKEY6 = &H80000005 Public Const HKEY7 = &H80000006 'Declaraciones API para acceder al registro Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long Declare Function RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName As String) As Long Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long Declare Function RegDeleteKey Lib "advapi32.dll" Alias "RegDeleteKeyA" (ByVal hKey As Long, ByVal lpSubKey As String) As Long Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long Public Sub SaveValueKey(hKey As Long, strPath As String, strName As String, Optional strValue As String) ' Guarda el nombre de una clave, subclave, entrada y valor. ' ' SaveValueKey HKEY_LOCAL_MACHINE, "E-Mondo", "Number Version", "2.60" '_________________________________________________________________________________ ' ' Guarda el nombre de una clave, subclave y entrada sin valor. ' ' SaveValueKey HKEY_LOCAL_MACHINE, "E-Mondo", "Number Version", "" '_________________________________________________________________________________ ' ' Crea una subclave dentro de una clave existente. ' ' SaveValueKey HKEY_LOCAL_MACHINE, "Software\E-Mondo", "Number Version", "2.60" '_________________________________________________________________________________ ' ' Crea una subclave dentro de la clave (En el ejemplo se crea con valor). ' ' SaveValueKey HKEY_LOCAL_MACHINE, "E-Mondo\Help", "HelpPath", "C:\E-Mondo\Help" '_________________________________________________________________________________ ' ' Crea una clave con valor en la entrada denominada "(Predeterminado)". ' ' SaveValueKey HKEY_LOCAL_MACHINE, "E-Mondo", "", "Modulo VB" ' SaveValueKey HKEY_LOCAL_MACHINE, "E-Mondo\Help", "", "Modulo VB" '_________________________________________________________________________________ RegCreateKey hKey, strPath, Ret RegSetValueEx Ret, strName, 0, REG_SZ, ByVal strValue, Len(strValue) RegCloseKey Ret End Sub Public Sub DelValueKey(hKey As Long, strPath As String, strName As String) ' Elimina el valor de una entrada o nombre de la clave. ' Con esto se consigue que el valor sea una cadena vacia. ' ' DelValueKey HKEY_LOCAL_MACHINE, "E-Mondo", "Number Version" '_________________________________________________________________________________ RegCreateKey hKey, strPath, Ret RegDeleteValue Ret, strName RegCloseKey Ret End Sub Public Sub DelKey(hKey As Long, hSubKey As String) ' Elimina un subclave de una clave (con todos los valores incluidos). ' ' DelKey HKEY_LOCAL_MACHINE, "E-Mondo\Help" '_________________________________________________________________________________ ' ' Elimina una clave (y todas las subclaves y valores que contenga). ' ' DelKey HKEY_LOCAL_MACHINE, "E-Mondo" '_________________________________________________________________________________ RegCreateKey hKey, strPath, Ret RegDeleteKey Ret, hSubKey RegCloseKey Ret End Sub Public Function GetValueKey(hKey As Long, strPath As String, strName As String) As Variant ' Obtiene el valor de una entrada de una clave. (Modo de uso). ' ' Dim Variable As String ' Variable = GetValueKey(HKEY_LOCAL_MACHINE, "E-Mondo", "Number Version") ' ' [Variable contendria: "2.60"] '_________________________________________________________________________________ ' ' Obtener el valor de una entrada de una subclave de otra subclave. ' ' Dim Variable As String ' Variable = GetValueKey(HKEY_LOCAL_MACHINE, "E-Mondo\Help", "HelpPath") ' ' [Variable contendria: "C:\E-Mondo\Help"] '_________________________________________________________________________________ ' ' Todas las claves tienen un valor por defecto identificado como: (Predeterminado), ' pero es posible que no tenga valor y viene dado como: (valor no establecido) ' Pero en ocasiones si tienen valor, pero no se puede dirigir a él ' como si fuera una entrada de clave normal. ' ' Para obtener dicho valor escribir lo siguiente: ' ' Dim Variable As String ' Variable = GetValueKey(HKEY_LOCAL_MACHINE, "Clave", "") ' ' Poniendo "", recoge el valor que tenga (Predeterminado) de la clave, ' ya tenga o no tenga valor. '_________________________________________________________________________________ Dim strValue As String Dim lngLen As Long Dim lngType As Long Dim Key As Long Dim X As Long X = RegOpenKey(hKey, strPath, Key) strValue = Space$(256) lngLen = Len(strValue) X = RegQueryValueEx(Key, strName, 0, lngType, ByVal strValue, lngLen) If X = 0 And lngType = REG_SZ And lngLen > 1 Then strValue = Left$(strValue, lngLen - 1) Else strValue = "" End If GetValueKey = strValue X = RegCloseKey(Key) End Function |