- Crear clave
- Eliminar clave
- Crear valor
- Eliminar valor
- Obtener los datos de un valor
- Exportar clave
- Importar archivo
- Saltar a clave (abrir Regedit en clave específica)
- Comprobar si un valor existe
- Comprobar si los datos de un valor están vacíos
- Copiar clave a otro lugar del registro
- Copiar valor a otro lugar del registro
- Establecer permisos de usuario para una clave
Código
#Region " RegEdit " ' [ RegEdit Functions ] ' ' // By Elektro H@cker ' ' Examples : ' ' ----------- ' Create Key: ' ----------- ' RegEdit.Create_Key("HKCU\Software\MyProgram") ' Creates "HKCU\Software\MyProgram" ' RegEdit.Create_Key("HKEY_CURRENT_USER\Software\MyProgram\Settings\") ' Creates "HKCU\Software\MyProgram\Settings" ' ' ----------- ' Delete Key: ' ----------- ' RegEdit.Delete_Key("HKLM\Software\7-zip") ' Deletes the "7-zip" tree including subkeys ' RegEdit.Delete_Key("HKEY_LOCAL_MACHINE\Software\7-zip\") ' Deletes the "7-zip" tree including subkeys ' ' ------------- ' Delete Value: ' ------------- ' RegEdit.Delete_Value("HKCU\Software\7-Zip", "Lang") ' Deletes "Lang" Value ' RegEdit.Delete_Value("HKEY_CURRENT_USER\Software\7-Zip\", "Lang") ' Deletes "Lang" Value ' ' ---------- ' Get Value: ' ---------- ' Dim Data As String = RegEdit.Get_Value("HKCU\Software\MyProgram", "Value name")) ' Dim Data As String = RegEdit.Get_Value("HKEY_CURRENT_USER\Software\MyProgram", "Value name")) ' ' ---------- ' Set Value: ' ---------- ' RegEdit.Set_Value("HKCU\Software\MyProgram", "Value name", "Data", Microsoft.Win32.RegistryValueKind.String) ' Create/Replace "Value Name" with "Data" as string data ' RegEdit.Set_Value("HKEY_CURRENT_USER\Software\MyProgram\", "Value name", "Data", Microsoft.Win32.RegistryValueKind.String) ' Create/Replace "Value Name" with "Data" as string data ' ' ----------- ' Export Key: ' ----------- ' RegEdit.Export_Key("HKLM", "C:\HKLM.reg") ' Export entire "HKEY_LOCAL_MACHINE" Tree to "C:\HKLM.reg" file. ' RegEdit.Export_Key("HKLM\Software\7-zip\", "C:\7-zip.reg") ' Export entire "7-zip" Tree to "C:\7-zip.reg" file. ' ' ------------ ' Import File: ' ------------ ' RegEdit.Import_RegFile("C:\Registry_File.reg") ' Install a registry file. ' ' ------------ ' Jump To Key: ' ------------ ' RegEdit.Jump_To_Key("HKLM") ' Opens Regedit at "HKEY_LOCAL_MACHINE" Root. ' RegEdit.Jump_To_Key("HKEY_LOCAL_MACHINE\Software\7-zip\") ' Opens Regedit at "HKEY_LOCAL_MACHINE\Software\7-zip" tree. ' ' ------------- ' Exist Value?: ' ------------- ' MsgBox(RegEdit.Exist_Value("HKLM\software\7-zip", "Path") ' Checks if "Path" value exist. ' ' ------------ ' Exist Data?: ' ------------ ' MsgBox(RegEdit.Exist_Data("HKLM\software\7-zip", "Path") ' Checks if "Path" value have empty data. ' ' --------- ' Copy Key: ' --------- ' RegEdit.Copy_Key("HKCU", "Software", "7-Zip", "HKLM", "Software", "7-zip") ' Copies "HKCU\Software\7-Zip" to "HKLM\Software\7-Zip" ' RegEdit.Copy_Key("HKCU", "Software", "7-Zip", Nothing, "Software", "7-zip") ' Copies "HKCU\Software\7-Zip" to "HKCU\Software\7-Zip" ' RegEdit.Copy_Key("HKCU", "Software", "7-Zip", "HKLM", "Software", Nothing) ' Copies "HKCU\Software\7-Zip" to "HKLM\Software\" ' RegEdit.Copy_Key("HKCU", "Software", "7-Zip", "HKLM", Nothing, Nothing) ' Copies "HKCU\Software\7-Zip" to "HKLM\" ' RegEdit.Copy_Key("HKCU", "\Software\", "\7-Zip\", "HKLM", "\Software\", "\7-zip\") ' Copies "HKCU\Software\7-Zip" to "HKLM\Software\7-Zip" ' ' ----------- ' Copy Value: ' ----------- ' RegEdit.Copy_Value("HKLM\software\7-zip", "path", "HKLM\software\7-zip", "path_backup") ' Copies "Path" value with their data to "HKLM\software\7-zip" "path_backup". ' ' ----------- ' Set_UserAccess_Key: ' ----------- ' RegEdit.Set_UserAccess_Key("HKCU\Software\7-Zip", {RegEdit.RegUserAccess.Administrators_Full_Access}) ' RegEdit.Set_UserAccess_Key("HKEY_CURRENT_USER\Software\7-Zip", {RegEdit.RegUserAccess.Administrators_Full_Access, RegEdit.RegUserAccess.Creator_Full_Access, RegEdit.RegUserAccess.System_Full_Access}) #Region " RegEdit Class " Public Class RegEdit ''' <summary> ''' Create a new registry key. ''' </summary> Public Shared Function Create_Key(ByVal RegKey As String) As Boolean Dim RootKey As Microsoft.Win32.RegistryKey = Get_Root_Key(RegKey) Dim KeyPath As String = Get_Key_Path(RegKey) Try RootKey.CreateSubKey(KeyPath) RootKey.Close() RootKey.Dispose() Return True Catch ex As Exception ' MsgBox(ex.Message) ' Throw New Exception(ex.Message) Return False End Try End Function ''' <summary> ''' Delete a registry key. ''' </summary> Public Shared Function Delete_Key(ByVal RegKey As String) As Boolean Dim RootKey As Microsoft.Win32.RegistryKey = Get_Root_Key(RegKey) Dim KeyPath As String = Get_Key_Path(RegKey) Try RootKey.DeleteSubKeyTree(KeyPath) RootKey.Close() RootKey.Dispose() Return True Catch ex As Exception ' MsgBox(ex.Message) ' Throw New Exception(ex.Message) Return False End Try End Function ''' <summary> ''' Delete a registry key. ''' </summary> Public Shared Function Delete_Value(ByVal RegKey As String, ByVal RegValue As String) As Boolean Dim RootKey As Microsoft.Win32.RegistryKey = Get_Root_Key(RegKey) Dim KeyPath As String = Get_Key_Path(RegKey) Try RootKey.OpenSubKey(KeyPath, True).DeleteValue(RegValue) RootKey.Close() RootKey.Dispose() Return True Catch ex As Exception ' MsgBox(ex.Message) ' Throw New Exception(ex.Message) Return False End Try End Function ''' <summary> ''' Get the data of a registry value. ''' </summary> Public Shared Function Get_Value(ByVal RegKey As String, ByVal RegValue As String) As String Dim RootKey As String = Get_Root_Key(RegKey).ToString Dim KeyPath As String = RootKey & "\" & Get_Key_Path(RegKey) Try Return My.Computer.Registry.GetValue(KeyPath, RegValue, Nothing) Catch ex As Exception ' MsgBox(ex.Message) ' Throw New Exception(ex.Message) Return False End Try End Function ''' <summary> ''' Set the data of a registry value. ''' If the Key or value don't exist it will be created automatically. ''' </summary> Public Shared Function Set_Value(ByVal RegKey As String, _ ByVal RegValue As String, _ ByVal RegData As String, _ ByVal RegDataType As Microsoft.Win32.RegistryValueKind) As Boolean Dim RootKey As String = Get_Root_Key(RegKey).ToString Dim KeyPath As String = RootKey & "\" & Get_Key_Path(RegKey) Try If RegDataType = Microsoft.Win32.RegistryValueKind.Binary Then My.Computer.Registry.SetValue(KeyPath, RegValue, System.Text.Encoding.ASCII.GetBytes(RegData), Microsoft.Win32.RegistryValueKind.Binary) Else My.Computer.Registry.SetValue(KeyPath, RegValue, RegData, RegDataType) End If Return True Catch ex As Exception ' MsgBox(ex.Message) ' Throw New Exception(ex.Message) Return False End Try End Function ''' <summary> ''' Export a registry key (including sub-keys) to a file. ''' </summary> Public Shared Function Export_Key(ByVal RegKey As String, ByVal OutputFile As String) As Boolean Dim RootKey As String = Get_Root_Key(RegKey).ToString Dim KeyPath As String = RootKey & "\" & Get_Key_Path(RegKey) If KeyPath.EndsWith("\") Then KeyPath = KeyPath.Substring(0, KeyPath.Length - 1) Try Dim Regedit As New Process() Dim Regedit_Info As New ProcessStartInfo() Regedit_Info.FileName = "Reg.exe" Regedit_Info.Arguments = "Export " & """" & KeyPath & """" & " " & """" & OutputFile & """" & " /y" Regedit_Info.CreateNoWindow = True Regedit_Info.WindowStyle = ProcessWindowStyle.Hidden Regedit_Info.UseShellExecute = False Regedit.StartInfo = Regedit_Info Regedit.Start() Regedit.WaitForExit() If Regedit.ExitCode <> 0 Then Return False Else Return True End If Catch ex As Exception ' MsgBox(ex.Message) ' Throw New Exception(ex.Message) Return False End Try End Function ''' <summary> ''' Import a registry file. ''' </summary> Public Shared Function Import_RegFile(ByVal RegFile As String) As Boolean Try Dim Regedit As New Process() Dim Regedit_Info As New ProcessStartInfo() Regedit_Info.FileName = "Reg.exe" Regedit_Info.Arguments = "Import " & """" & RegFile & """" Regedit_Info.CreateNoWindow = True Regedit_Info.WindowStyle = ProcessWindowStyle.Hidden Regedit_Info.UseShellExecute = False Regedit.StartInfo = Regedit_Info Regedit.Start() Regedit.WaitForExit() If Regedit.ExitCode <> 0 Then Return False Else Return True End If Catch ex As Exception ' MsgBox(ex.Message) ' Throw New Exception(ex.Message) Return False End Try Else ' MsgBox("File don't exist") Return False End If End Function ''' <summary> ''' Open Regedit at specific key. ''' </summary> Public Shared Function Jump_To_Key(ByVal RegKey As String) As Boolean Dim RootKey As String = Get_Root_Key(RegKey).ToString Dim KeyPath As String = RootKey & "\" & Get_Key_Path(RegKey) If KeyPath.EndsWith("\") Then KeyPath = KeyPath.Substring(0, KeyPath.Length - 1) Try Set_Value("HKCU\Software\Microsoft\Windows\CurrentVersion\Applets\Regedit", "LastKey", "" & KeyPath & "", Microsoft.Win32.RegistryValueKind.String) Process.Start("Regedit.exe") Return True Catch ex As Exception ' MsgBox(ex.Message) ' Throw New Exception(ex.Message) Return False End Try End Function ''' <summary> ''' Check if a value exist. ''' </summary> Public Shared Function Exist_Value(ByVal RegKey As String, ByVal RegValue As String) As Boolean Dim RootKey As Microsoft.Win32.RegistryKey = Get_Root_Key(RegKey) Dim KeyPath As String = Get_Key_Path(RegKey) Try If RootKey.OpenSubKey(KeyPath, False).GetValue(RegValue) = String.Empty Then Return False Else Return True End If Catch ex As Exception ' MsgBox(ex.Message) ' Throw New Exception(ex.Message) Return False End Try End Function ''' <summary> ''' Check if a value have empty data. ''' </summary> Public Shared Function Exist_Data(ByVal RegKey As String, ByVal RegValue As String) As Boolean Dim RootKey As String = Get_Root_Key(RegKey).ToString Dim KeyPath As String = RootKey & "\" & Get_Key_Path(RegKey) Try If My.Computer.Registry.GetValue(KeyPath, RegValue, Nothing) = Nothing Then Return False Else Return True End If Catch ex As Exception ' MsgBox(ex.Message) ' Throw New Exception(ex.Message) Return False End Try End Function ''' <summary> ''' Copy a key tree to another location of the registry. ''' </summary> Public Shared Function Copy_Key(ByVal OldRootKey As String, _ ByVal OldPath As String, _ ByVal OldName As String, _ ByVal NewRootKey As String, _ ByVal NewPath As String, _ ByVal NewName As String) As Boolean If OldPath Is Nothing Then OldPath = "" If NewRootKey Is Nothing Then NewRootKey = OldRootKey If NewPath Is Nothing Then NewPath = "" If NewName Is Nothing Then NewName = "" If OldRootKey.EndsWith("\") Then OldRootKey = OldRootKey.Substring(0, OldRootKey.Length - 1) If NewRootKey.EndsWith("\") Then NewRootKey = NewRootKey.Substring(0, NewRootKey.Length - 1) If OldPath.StartsWith("\") Then OldPath = OldPath.Substring(1, OldPath.Length - 1) If OldPath.EndsWith("\") Then OldPath = OldPath.Substring(0, OldPath.Length - 1) If NewPath.StartsWith("\") Then NewPath = NewPath.Substring(1, NewPath.Length - 1) If NewPath.EndsWith("\") Then NewPath = NewPath.Substring(0, NewPath.Length - 1) If OldName.StartsWith("\") Then OldName = OldName.Substring(1, OldName.Length - 1) If OldName.EndsWith("\") Then OldName = OldName.Substring(0, OldName.Length - 1) If NewName.StartsWith("\") Then NewName = NewName.Substring(1, NewName.Length - 1) If NewName.EndsWith("\") Then NewName = NewName.Substring(0, NewName.Length - 1) Dim OrigRootKey As Microsoft.Win32.RegistryKey = Get_Root_Key(OldRootKey) Dim DestRootKey As Microsoft.Win32.RegistryKey = Get_Root_Key(NewRootKey) Dim oldkey As Microsoft.Win32.RegistryKey = OrigRootKey.OpenSubKey(OldPath + "\" + OldName, True) Dim newkey As Microsoft.Win32.RegistryKey = DestRootKey.OpenSubKey(NewPath, True).CreateSubKey(NewName) Reg_Copy_SubKeys(oldkey, newkey) Return True End Function Private Shared Sub Reg_Copy_SubKeys(OrigKey As Microsoft.Win32.RegistryKey, DestKey As Microsoft.Win32.RegistryKey) Dim ValueNames As String() = OrigKey.GetValueNames() Dim SubKeyNames As String() = OrigKey.GetSubKeyNames() For i As Integer = 0 To ValueNames.Length - 1 Application.DoEvents() DestKey.SetValue(ValueNames(i), OrigKey.GetValue(ValueNames(i))) Next For i As Integer = 0 To SubKeyNames.Length - 1 Application.DoEvents() Reg_Copy_SubKeys(OrigKey.OpenSubKey(SubKeyNames(i), True), DestKey.CreateSubKey(SubKeyNames(i))) Next End Sub ''' <summary> ''' Copy a value with their data to another location of the registry. ''' If the Key don't exist it will be created automatically. ''' </summary> Public Shared Function Copy_Value(ByVal RegKey As String, ByVal RegValue As String, _ ByVal NewRegKey As String, ByVal NewRegValue As String) As Boolean Dim OldRootKey As String = Get_Root_Key(RegKey).ToString Dim OldKeyPath As String = OldRootKey & "\" & Get_Key_Path(RegKey) Dim NewRootKey As String = Get_Root_Key(NewRegKey).ToString Dim NewKeyPath As String = NewRootKey & "\" & Get_Key_Path(NewRegKey) Dim RegData = Get_Value(OldKeyPath, RegValue) Try Set_Value(NewKeyPath, NewRegValue, RegData, Microsoft.Win32.RegistryValueKind.Unknown) Return True Catch ex As Exception ' MsgBox(ex.Message) ' Throw New Exception(ex.Message) Return False End Try End Function ''' <summary> ''' Valid User identifiers for Regini.exe command. ''' </summary> Public Enum RegUserAccess As Short Administrators_Full_Access = 1 Administrators_Read_Access = 2 Administrators_Read_and_Write_Access = 3 Administrators_Read_Write_and_Delete_Access4 Administrators_Read_Write_and_Execute_Access = 20 Creator_Full_Access = 5 Creator_Read_and_Write_Access = 6 Interactive_User_Full_Access = 21 Interactive_User_Read_and_Write_Access = 22 Interactive_User_Read_Write_and_Delete_Access = 23 Power_Users_Full_Access = 11 Power_Users_Read_and_Write_Access = 12 Power_Users_Read_Write_and_Delete_Access = 13 System_Full_Access = 17 System_Operators_Full_Access = 14 System_Operators_Read_and_Write_Access = 15 System_Operators_Read_Write_and_Delete_Access = 16 System_Read_Access = 19 System_Read_and_Write_Access = 18 World_Full_Access = 7 World_Read_Access = 8 World_Read_and_Write_Access = 9 World_Read_Write_and_Delete_Access = 10 End Enum ''' <summary> ''' Modify the User permissions of a registry key. ''' </summary> Public Shared Function Set_UserAccess_Key(ByVal RegKey As String, ByVal RegUserAccess() As RegUserAccess) As Boolean Dim PermissionString As String = Nothing Dim RootKey As String = Get_Root_Key(RegKey).ToString Dim KeyPath As String = RootKey & "\" & Get_Key_Path(RegKey) If KeyPath.EndsWith("\") Then KeyPath = KeyPath.Substring(0, KeyPath.Length - 1) For Each user In RegUserAccess Application.DoEvents() PermissionString += " " & user Next PermissionString = "[" & PermissionString & "]" PermissionString = PermissionString.Replace("[ ", "[") Try Using TextFile As New IO.StreamWriter(System.IO.Path.GetTempPath() & "Regini.ini", False, System.Text.Encoding.ASCII) TextFile.WriteLine("""" & KeyPath & """" & " " & PermissionString) End Using Dim Regini As New Process() Dim Regini_Info As New ProcessStartInfo() Regini_Info.FileName = "Regini.exe" MsgBox(PermissionString) MsgBox("Regini.exe " & """" & System.IO.Path.GetTempPath() & "Regini.ini" & """") Regini_Info.Arguments = """" & System.IO.Path.GetTempPath() & "Regini.ini" & """" Regini_Info.CreateNoWindow = True Regini_Info.WindowStyle = ProcessWindowStyle.Hidden Regini_Info.UseShellExecute = False Regini.StartInfo = Regini_Info Regini.Start() Regini.WaitForExit() If Regini.ExitCode <> 0 Then Return False Else Return True End If Catch ex As Exception ' MsgBox(ex.Message) ' Throw New Exception(ex.Message) Return False End Try End Function ' Returns the RootKey formatted Private Shared Function Get_Root_Key(ByVal RegKey As String) As Microsoft.Win32.RegistryKey Select Case RegKey.ToUpper.Split("\").First Case "HKCR", "HKEY_CLASSES_ROOT" : Return Microsoft.Win32.Registry.ClassesRoot Case "HKCC", "HKEY_CURRENT_CONFIG" : Return Microsoft.Win32.Registry.CurrentConfig Case "HKCU", "HKEY_CURRENT_USER" : Return Microsoft.Win32.Registry.CurrentUser Case "HKLM", "HKEY_LOCAL_MACHINE" : Return Microsoft.Win32.Registry.LocalMachine Case "HKEY_PERFORMANCE_DATA" : Return Microsoft.Win32.Registry.PerformanceData Case Else : Return Nothing End Select End Function ' Returns the KeyPath formatted Private Shared Function Get_Key_Path(ByVal RegKey As String) As String Dim KeyPath As String = String.Empty For i As Integer = 1 To RegKey.Split("\").Length - 1 Application.DoEvents() KeyPath += RegKey.Split("\")(i) & "\" Next If Not KeyPath.Contains("\") Then KeyPath = KeyPath & "\" KeyPath = KeyPath.Substring(0, KeyPath.LastIndexOf("\")) Return KeyPath End Function End Class #End Region #End Region