Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
静音Vb/c++/C#应用_C#_C++_Vb.net_Internet Explorer_Mute - Fatal编程技术网

静音Vb/c++/C#应用

静音Vb/c++/C#应用,c#,c++,vb.net,internet-explorer,mute,C#,C++,Vb.net,Internet Explorer,Mute,我需要将我的应用程序静音,因为它使用5个网络浏览器,并使用flash导航到网站,这可能会导致很多恼人的声音,所以我到处搜索,但没有运气 我想知道是否有办法通过vb代码或任何其他语言(我将制作一个插件)使我的应用程序或网络浏览器静音。 提前感谢您的帮助。我想您需要设置IExplorer的配置,这是播放声音的过程 您可以使用注册表将标志设置为不播放声音: 按此键: HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main 值名称: Pl

我需要将我的应用程序静音,因为它使用5个网络浏览器,并使用flash导航到网站,这可能会导致很多恼人的声音,所以我到处搜索,但没有运气 我想知道是否有办法通过vb代码或任何其他语言(我将制作一个插件)使我的应用程序或网络浏览器静音。
提前感谢您的帮助。

我想您需要设置
IExplorer
的配置,这是播放声音的过程

您可以使用注册表将标志设置为不播放声音:

按此键:

HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main
值名称:

Play_Background_Sounds
数据:

很久以前,我创建了一个类来管理Regedit操作,您可以这样使用它:

    RegEdit.Set_Value("HKCU\Software\Microsoft\Internet Explorer\Main", _
                      "Play_Background_Sounds", _
                      "no", _
                      Microsoft.Win32.RegistryValueKind.String)

    RegEdit.Set_Value("HKCU\Software\Microsoft\Internet Explorer\Main", _
                      "Play_Background_Sounds", _
                      "yes", _
                      Microsoft.Win32.RegistryValueKind.String)
下面是课堂:

#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 Key?:
' -----------
' MsgBox(RegEdit.Exist_Key("HKCU\software") ' Checks if "Software" Key exist.

' -------------
' 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

    Private Shared RootKey As Microsoft.Win32.RegistryKey = Nothing
    Private Shared KeyPath As String = String.Empty

    ''' <summary>
    ''' Create a new registry key.
    ''' </summary>
    Public Shared Function Create_Key(ByVal RegKey As String) As Boolean

        RootKey = Get_Root_Key(RegKey)
        KeyPath = Get_Key_Path(RegKey)

        Try
            RootKey.CreateSubKey(KeyPath)
            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

        RootKey = Get_Root_Key(RegKey)
        KeyPath = Get_Key_Path(RegKey)

        Try
            RootKey.DeleteSubKeyTree(KeyPath)
            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

        RootKey = Get_Root_Key(RegKey)
        KeyPath = Get_Key_Path(RegKey)

        Try
            RootKey.OpenSubKey(KeyPath, True).DeleteValue(RegValue)
            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

        RootKey = Get_Root_Key(RegKey)
        KeyPath = RootKey.ToString & "\" & Get_Key_Path(RegKey)
        RootKey.Dispose()

        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

        RootKey = Get_Root_Key(RegKey)
        KeyPath = RootKey.ToString & "\" & 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)
                RootKey.Dispose()
            Else
                My.Computer.Registry.SetValue(KeyPath, RegValue, RegData, RegDataType)
                RootKey.Dispose()
            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
                Regedit.Dispose()
                Return False
            Else
                Regedit.Dispose()
                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

        If IO.File.Exists(RegFile) Then

            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
                    Regedit.Dispose()
                    Return False
                Else
                    Regedit.Dispose()
                    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

        RootKey = Get_Root_Key(RegKey)
        KeyPath = RootKey.ToString & "\" & 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)
            RootKey.Dispose()
            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>
    ''' Checks if a Key exist.
    ''' </summary>
    Public Shared Function Exist_Key(ByVal RegKey As String) As Boolean

        RootKey = Get_Root_Key(RegKey)
        KeyPath = Get_Key_Path(RegKey)

        If RootKey Is Nothing OrElse KeyPath Is Nothing Then Return False

        If RootKey.OpenSubKey(KeyPath, False) Is Nothing Then
            RootKey.Dispose()
            Return False
        Else
            RootKey.Dispose()
            Return True
        End If

    End Function

    ''' <summary>
    ''' Checks if a value exist.
    ''' </summary>
    Public Shared Function Exist_Value(ByVal RegKey As String, ByVal RegValue As String) As Boolean

        RootKey = Get_Root_Key(RegKey)
        KeyPath = Get_Key_Path(RegKey)

        Try
            If RootKey.OpenSubKey(KeyPath, False).GetValue(RegValue) = String.Empty Then
                RootKey.Dispose()
                Return False
            Else
                RootKey.Dispose()
                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

        RootKey = Get_Root_Key(RegKey)
        KeyPath = RootKey.ToString & "\" & Get_Key_Path(RegKey)

        Try
            If My.Computer.Registry.GetValue(KeyPath, RegValue, Nothing) = Nothing Then
                RootKey.Dispose()
                Return False
            Else
                RootKey.Dispose()
                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 = String.Empty
        RootKey = Get_Root_Key(RegKey)

        KeyPath = RootKey.ToString & "\" & 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.Default)
                TextFile.WriteLine("""" & KeyPath & """" & " " & PermissionString)
            End Using

            Dim Regini As New Process()
            Dim Regini_Info As New ProcessStartInfo()

            Regini_Info.FileName = "Regini.exe"
            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
                RootKey.Dispose()
                Regini.Dispose()
                Return False
            Else
                RootKey.Dispose()
                Regini.Dispose()
                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

        If RegKey Is Nothing Then Return Nothing

        Dim Path As String = String.Empty
        For i As Integer = 1 To RegKey.Split("\").Length - 1
            ' Application.DoEvents()
            Path &= RegKey.Split("\")(i) & "\"
        Next

        If Not Path.Contains("\") Then Path = Path & "\"
        Path = Path.Substring(0, Path.LastIndexOf("\"))

        Return Path

    End Function

End Class

#End Region

#End Region
#区域“RegEdit”
“[RegEdit函数]
'
“//作者:ElektroH@cker
'
例如:
'
' -----------
'创建密钥:
' -----------
“RegEdit.Create_Key(“HKCU\Software\MyProgram”)”创建“HKCU\Software\MyProgram”
“RegEdit.Create_Key(“HKEY_CURRENT_USER\Software\MyProgram\Settings\”)创建“HKCU\Software\MyProgram\Settings”
'
' -----------
'删除密钥:
' -----------
“RegEdit.Delete_Key(“HKLM\Software\7-zip”)”删除包含子键的“7-zip”树
“RegEdit.Delete_Key(“HKEY_LOCAL_MACHINE\Software\7-zip\”)删除包含子键的“7-zip”树
'
' -------------
'删除值:
' -------------
“RegEdit.Delete_值(“HKCU\Software\7-Zip”,“Lang”)”删除“Lang”值
“RegEdit.Delete_值(“HKEY_CURRENT_USER\Software\7-Zip\”,“Lang”)删除“Lang”值
'
' ----------
'获取值:
' ----------
'Dim Data As String=RegEdit.Get_值(“HKCU\Software\MyProgram”,“值名称”))
'Dim Data As String=RegEdit.Get_值(“HKEY_CURRENT_USER\Software\MyProgram”,“值名称”))
'
' ----------
'设定值:
' ----------
“RegEdit.Set_值(“HKCU\Software\MyProgram”、“值名”、“数据”、Microsoft.Win32.RegistryValueKind.String)”创建/将“值名”替换为“数据”作为字符串数据
“RegEdit.Set_Value(“HKEY_CURRENT_USER\Software\MyProgram\”、“Value name”、“Data”、Microsoft.Win32.RegistryValueKind.String)”创建/将“Value name”替换为“Data”作为字符串数据
'
' -----------
'导出密钥:
' -----------
“RegEdit.Export_Key(“HKLM”,“C:\HKLM.reg”)”将整个“HKEY_LOCAL_MACHINE”树导出到“C:\HKLM.reg”文件。
“RegEdit.Export_Key(“HKLM\Software\7-zip\,“C:\7-zip.reg”)”将整个“7-zip”树导出到“C:\7-zip.reg”文件。
'
' ------------
'导入文件:
' ------------
“RegEdit.Import\u RegFile(“C:\Registry\u File.reg”)”安装注册表文件。
'
' ------------
'跳转到关键点:
' ------------
“RegEdit.Jump_To_Key(“HKLM”)”在“HKEY_LOCAL_MACHINE”根目录下打开RegEdit。
“RegEdit.Jump_To_Key(“HKEY_LOCAL_MACHINE\Software\7-zip\”)在“HKEY_LOCAL_MACHINE\Software\7-zip”树中打开RegEdit。
'
' -----------
'存在密钥?:
' -----------
“MsgBox(RegEdit.Exist_Key(“HKCU\software”)”检查“software”Key是否存在。
' -------------
“存在价值吗?”
' -------------
“MsgBox(RegEdit.Exist_值(“HKLM\software\7-zip”,“Path”)”检查“Path”值是否存在。
'
' ------------
“是否存在数据?”
' ------------
“MsgBox(RegEdit.Exist_Data(“HKLM\software\7-zip”,“Path”)”检查“Path”值是否包含空数据。
'
' ---------
'复制密钥:
' ---------
“RegEdit.Copy_Key(“HKCU”、“Software”、“7-Zip”、“HKLM”、“Software”、“7-Zip”)”将“HKCU\Software\7-Zip”复制到“HKLM\Software\7-Zip”
'RegEdit.Copy_Key(“HKCU”,“Software”,“7-Zip”,Nothing,“Software”,“7-Zip”)'将“HKCU\Software\7-Zip”复制到“HKCU\Software\7-Zip”
“RegEdit.Copy_Key(“HKCU”、“Software”、“7-Zip”、“HKLM”、“Software”、Nothing)”将“HKCU\Software\7-Zip”复制到“HKLM\Software”
'RegEdit.Copy_Key(“HKCU”,“Software”,“7-Zip”,“HKLM”,Nothing,Nothing)'将“HKCU\Software\7-Zip”复制到“HKLM\”
“RegEdit.Copy_Key(“HKCU”、“\Software\”、“\7-Zip\”、“HKLM”、“\Software\”、“\7-Zip\”)将“HKCU\Software\7-Zip”复制到“HKLM\Software\7-Zip”
'
' -----------
'复制值:
' -----------
“RegEdit.Copy_值(“HKLM\software\7-zip”、“path”、“HKLM\software\7-zip”、“path_备份”)”将“path”值及其数据复制到“HKLM\software\7-zip”“path_备份”。
'
' -------------------
'设置用户访问密钥:
' -------------------
'RegEdit.Set_UserAccess_Key(“HKCU\Software\7-Zip”,{RegEdit.regseraccess.Administrators_Full_Access})
'RegEdit.Set_UserAccess_Key(“HKEY_CURRENT_USER\Software\7-Zip”,{RegEdit.regseraccess.Administrators_Full_Access,RegEdit.regseraccess.Creator_Full_Access,RegEdit.regseraccess.System_Full_Access})
#区域“RegEdit类”
公共类RegEdit
作为Microsoft.Win32.RegistryKey的专用共享根密钥=无
私有共享密钥路径为String=String.Empty
''' 
''创建一个新的注册表项。
''' 
公共共享函数Create_Key(ByVal RegKey作为字符串)作为布尔值
RootKey=Get\u Root\u Key(RegKey)
KeyPath=获取密钥路径(RegKey)
尝试
RootKey.CreateSubKey(KeyPath)
RootKey.Dispose()
返回真值
特例
'MsgBox(例如消息)
'引发新异常(例如消息)
返回错误
结束尝试
端函数
''' 
''删除注册表项。
''' 
作为布尔值的公共共享函数Delete_Key(ByVal RegKey作为字符串)
RootKey=Get\u Root\u Key(RegKey)
KeyPath=获取密钥路径(RegKey)
尝试
RootKey.DeleteSubKeyTree(KeyPath)
RootKey.Dispose()
返回真值
特例
'MsgBox(例如消息)
'引发新异常(例如消息)
返回错误
结束尝试
端函数
''' 
''删除注册表项。
''' 
公共共享函数Delete_Value(ByVal RegKey作为字符串,ByVal RegValue作为字符串)作为布尔值
RootKey=Get\u Root\u Key(RegKey)
KeyPath=获取密钥路径(RegKey)
Tr
#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 Key?:
' -----------
' MsgBox(RegEdit.Exist_Key("HKCU\software") ' Checks if "Software" Key exist.

' -------------
' 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

    Private Shared RootKey As Microsoft.Win32.RegistryKey = Nothing
    Private Shared KeyPath As String = String.Empty

    ''' <summary>
    ''' Create a new registry key.
    ''' </summary>
    Public Shared Function Create_Key(ByVal RegKey As String) As Boolean

        RootKey = Get_Root_Key(RegKey)
        KeyPath = Get_Key_Path(RegKey)

        Try
            RootKey.CreateSubKey(KeyPath)
            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

        RootKey = Get_Root_Key(RegKey)
        KeyPath = Get_Key_Path(RegKey)

        Try
            RootKey.DeleteSubKeyTree(KeyPath)
            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

        RootKey = Get_Root_Key(RegKey)
        KeyPath = Get_Key_Path(RegKey)

        Try
            RootKey.OpenSubKey(KeyPath, True).DeleteValue(RegValue)
            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

        RootKey = Get_Root_Key(RegKey)
        KeyPath = RootKey.ToString & "\" & Get_Key_Path(RegKey)
        RootKey.Dispose()

        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

        RootKey = Get_Root_Key(RegKey)
        KeyPath = RootKey.ToString & "\" & 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)
                RootKey.Dispose()
            Else
                My.Computer.Registry.SetValue(KeyPath, RegValue, RegData, RegDataType)
                RootKey.Dispose()
            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
                Regedit.Dispose()
                Return False
            Else
                Regedit.Dispose()
                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

        If IO.File.Exists(RegFile) Then

            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
                    Regedit.Dispose()
                    Return False
                Else
                    Regedit.Dispose()
                    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

        RootKey = Get_Root_Key(RegKey)
        KeyPath = RootKey.ToString & "\" & 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)
            RootKey.Dispose()
            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>
    ''' Checks if a Key exist.
    ''' </summary>
    Public Shared Function Exist_Key(ByVal RegKey As String) As Boolean

        RootKey = Get_Root_Key(RegKey)
        KeyPath = Get_Key_Path(RegKey)

        If RootKey Is Nothing OrElse KeyPath Is Nothing Then Return False

        If RootKey.OpenSubKey(KeyPath, False) Is Nothing Then
            RootKey.Dispose()
            Return False
        Else
            RootKey.Dispose()
            Return True
        End If

    End Function

    ''' <summary>
    ''' Checks if a value exist.
    ''' </summary>
    Public Shared Function Exist_Value(ByVal RegKey As String, ByVal RegValue As String) As Boolean

        RootKey = Get_Root_Key(RegKey)
        KeyPath = Get_Key_Path(RegKey)

        Try
            If RootKey.OpenSubKey(KeyPath, False).GetValue(RegValue) = String.Empty Then
                RootKey.Dispose()
                Return False
            Else
                RootKey.Dispose()
                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

        RootKey = Get_Root_Key(RegKey)
        KeyPath = RootKey.ToString & "\" & Get_Key_Path(RegKey)

        Try
            If My.Computer.Registry.GetValue(KeyPath, RegValue, Nothing) = Nothing Then
                RootKey.Dispose()
                Return False
            Else
                RootKey.Dispose()
                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 = String.Empty
        RootKey = Get_Root_Key(RegKey)

        KeyPath = RootKey.ToString & "\" & 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.Default)
                TextFile.WriteLine("""" & KeyPath & """" & " " & PermissionString)
            End Using

            Dim Regini As New Process()
            Dim Regini_Info As New ProcessStartInfo()

            Regini_Info.FileName = "Regini.exe"
            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
                RootKey.Dispose()
                Regini.Dispose()
                Return False
            Else
                RootKey.Dispose()
                Regini.Dispose()
                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

        If RegKey Is Nothing Then Return Nothing

        Dim Path As String = String.Empty
        For i As Integer = 1 To RegKey.Split("\").Length - 1
            ' Application.DoEvents()
            Path &= RegKey.Split("\")(i) & "\"
        Next

        If Not Path.Contains("\") Then Path = Path & "\"
        Path = Path.Substring(0, Path.LastIndexOf("\"))

        Return Path

    End Function

End Class

#End Region

#End Region
[DllImport("winmm.dll")]
private static extern int waveOutSetVolume(IntPtr hwo, uint dwVolume);
public static void MuteApplication()
{
  int NewVolume = 0;
  uint NewVolumeAllChannels = (((uint)NewVolume & 0x0000ffff) | ((uint)NewVolume << 16));
  waveOutSetVolume(IntPtr.Zero, NewVolumeAllChannels);
}