首页 > 解决方案 > 如何以字节为单位读取注册表值

问题描述

我正在尝试做一些事情来定期清理我的注册表,并且在某个时候,我需要读取一个注册表项的值,并且它在那里我遇到了问题。该值以字节(十六进制)为单位,我无法读取。这是我的代码:

'function that i'm using to check if registry value exists and read it...

Public Function RegValue(ByVal Hive As RegistryHive, ByVal Key As String, ByVal ValueName As String, ByRef ErrInfo As String) As String
    Dim objParent As RegistryKey
    Dim objSubkey As RegistryKey
    Dim sAns As String
    Select Case Hive
        Case RegistryHive.ClassesRoot
            objParent = Registry.ClassesRoot
        Case RegistryHive.CurrentConfig
            objParent = Registry.CurrentConfig
        Case RegistryHive.CurrentUser
            objParent = Registry.CurrentUser
        Case RegistryHive.DynData
            objParent = Registry.DynData
        Case RegistryHive.LocalMachine
            objParent = Registry.LocalMachine
        Case RegistryHive.PerformanceData
            objParent = Registry.PerformanceData
        Case RegistryHive.Users
            objParent = Registry.Users
    End Select

    Try
        objSubkey = objParent.OpenSubKey(Key)
        'if can't be found, object is not initialized
        If Not objSubkey Is Nothing Then
            sAns = (objSubkey.GetValue(ValueName))
        End If

    Catch ex As Exception
        ErrInfo = ex.Message
    Finally

        'if no error but value is empty, populate errinfo
        If ErrInfo = "" And sAns = "" Then
            ErrInfo = "No value found for requested registry key"
        End If
    End Try
    Return sAns
End Function


' Button click that tries to read the value

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim sAns As String
    Dim sErr As String = ""

    sAns = RegValue(RegistryHive.ClassesRoot, "Local Settings\Software\Microsoft\Windows\Shell\BagMRU\0\0\0\0\2\0\0\0\0\0", "0", sErr)
    If sAns <> "" Then
        MsgBox("Value = " & sAns)
    Else
        MsgBox("This error occurred: " & sErr)
    End If
End Sub

当我运行它并尝试读取值时,我收到以下消息:

“发生了这个错误:类型'Byte()'到类型'String'的转换无效。”

我正在尝试读取注册表值的图像:

在此处输入图像描述

如果有人可以提供帮助,我将不胜感激。

标签: vb.net

解决方案


推荐阅读