COMO EDITAR Y ELIMINAR UN REGISTRO EN EL REGEDIT
Hola como estan, soy un programador de Visual Basic que esta interesado en saber como puedo editar un valor en un campo del REGEDIT y como eliminarlo sin dañar nada. Me ha sido dificil encontrar la manera si alguien sabe los codes de como hacerlo se lo agradeceria.
GRACIAZ
GRACIAZ
Una tecnica muy cencilla, 1ero debes saber el lenguaje vbs pero no te preocupes si no sabes usarlo, pues microsoft esta de nuestro lade en este aspecto, hay unos documentos hechos en vbs en todas las maquinas con windows y te enseñan a modificar el registro!!! bueno solo tienes que hacer que visual basic escriba un txt con la informacion en vbs y luego le haces shell(lo ejecutas) y el archivo vbs modifica el registro.
Vbasic añade 4 funciones para modificar el registro: GetSetting, DeleteSetting, GetAllSetting y SaveSetting, aunque parece que sólo puedes guardar registros a partir de la clave HKCUSoftwareVBA (o algo así... también he leído en un tutorial por la red que se puede evitar esto poniendo la ruta completa)
Yo para acceder al registro uso las llamadas a APIs RegOpenKeyEx & cía (busca en el google por RegOpenKeyEx visual basic y a tirar millas)
Te puedo poner un ejemplo que usé para una aplicación; seguro que tiene unas cuantas pegas, pero como en su momento me tiró y no tenía tiempo para más investigaciones así se quedó XD (en muchos sitios he puesto valores numéricos en lugar de una constante que dé una idea de lo que ese campo vale, todo por vagueza, por supuesto; para saber qué es cada campo googlea un poco ;); también puedes buscar en la página de microsoft y obtener resultados como éste: http://support.microsoft.com/default.aspx?scid=http://support.microsoft.com:80/support/kb/articles/Q240/7/94.asp&NoWebContent=1 )
****************************************
' declaración de las funciones para modificar registro
Private Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long
Private Declare Function RegCreateKeyEx Lib "advapi32.dll" Alias "RegCreateKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal Reserved As Long, ByVal lpClass As String, ByVal dwOptions As Long, ByVal samDesired As Long, lpSecurityAttributes As Any, phkResult As Long, lpdwDisposition As Long) As Long
Private 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 ' Note that if you declare the lpData parameter as String, you must pass it By Value.
Private 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 ' Note that if you declare the lpData parameter as String, you must pass it By Value.
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
' constantes de registro
Private Const HKEY_CURRENT_USER = &H80000001
' crear o modificar entrada de registro
Public Sub SetEntrada(Optional strValor As String = "")
Dim hKey As Long
Dim intResultado As Integer
If strValor = "" Then
strValor = App.Path & "hpr.mdb"
End If
If RegCreateKeyEx(HKEY_CURRENT_USER, gstrCadena, 0&, vbNullString, 0, &H3F, ByVal 0&, hKey, (intResultado)) = 0& Then
RegSetValueEx hKey, "ArchivoPorDefecto", 0&, 1, ByVal strValor, Len(strValor)
End If
Call RegCloseKey(hKey)
Exit Sub
End Sub
' recuperar valor
Public Function GetEntrada()
Dim hKey As Long
Dim lngTipo&, strResultado$, lngBytes&
If RegOpenKeyEx(HKEY_CURRENT_USER, gstrCadena, 0&, &H3F, hKey) = 0& Then
If RegQueryValueEx(hKey, "ArchivoPorDefecto", 0&, lngTipo, ByVal strResultado, lngBytes) = 0& Then
If lngBytes > 0 Then
strResultado = Space(lngBytes)
If RegQueryValueEx(hKey, "ArchivoPorDefecto", 0&, lngTipo, ByVal strResultado, Len(strResultado) + 1) = 0& Then
GetEntrada = Left(strResultado, lngBytes - 1)
Else
GetEntrada = ""
End If
Else
GetEntrada = ""
End If
End If
Call RegCloseKey(hKey)
End If
Exit Function
End Function
Yo para acceder al registro uso las llamadas a APIs RegOpenKeyEx & cía (busca en el google por RegOpenKeyEx visual basic y a tirar millas)
Te puedo poner un ejemplo que usé para una aplicación; seguro que tiene unas cuantas pegas, pero como en su momento me tiró y no tenía tiempo para más investigaciones así se quedó XD (en muchos sitios he puesto valores numéricos en lugar de una constante que dé una idea de lo que ese campo vale, todo por vagueza, por supuesto; para saber qué es cada campo googlea un poco ;); también puedes buscar en la página de microsoft y obtener resultados como éste: http://support.microsoft.com/default.aspx?scid=http://support.microsoft.com:80/support/kb/articles/Q240/7/94.asp&NoWebContent=1 )
****************************************
' declaración de las funciones para modificar registro
Private Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long
Private Declare Function RegCreateKeyEx Lib "advapi32.dll" Alias "RegCreateKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal Reserved As Long, ByVal lpClass As String, ByVal dwOptions As Long, ByVal samDesired As Long, lpSecurityAttributes As Any, phkResult As Long, lpdwDisposition As Long) As Long
Private 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 ' Note that if you declare the lpData parameter as String, you must pass it By Value.
Private 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 ' Note that if you declare the lpData parameter as String, you must pass it By Value.
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
' constantes de registro
Private Const HKEY_CURRENT_USER = &H80000001
' crear o modificar entrada de registro
Public Sub SetEntrada(Optional strValor As String = "")
Dim hKey As Long
Dim intResultado As Integer
If strValor = "" Then
strValor = App.Path & "hpr.mdb"
End If
If RegCreateKeyEx(HKEY_CURRENT_USER, gstrCadena, 0&, vbNullString, 0, &H3F, ByVal 0&, hKey, (intResultado)) = 0& Then
RegSetValueEx hKey, "ArchivoPorDefecto", 0&, 1, ByVal strValor, Len(strValor)
End If
Call RegCloseKey(hKey)
Exit Sub
End Sub
' recuperar valor
Public Function GetEntrada()
Dim hKey As Long
Dim lngTipo&, strResultado$, lngBytes&
If RegOpenKeyEx(HKEY_CURRENT_USER, gstrCadena, 0&, &H3F, hKey) = 0& Then
If RegQueryValueEx(hKey, "ArchivoPorDefecto", 0&, lngTipo, ByVal strResultado, lngBytes) = 0& Then
If lngBytes > 0 Then
strResultado = Space(lngBytes)
If RegQueryValueEx(hKey, "ArchivoPorDefecto", 0&, lngTipo, ByVal strResultado, Len(strResultado) + 1) = 0& Then
GetEntrada = Left(strResultado, lngBytes - 1)
Else
GetEntrada = ""
End If
Else
GetEntrada = ""
End If
End If
Call RegCloseKey(hKey)
End If
Exit Function
End Function
