Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.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.net 如何读取字节中的注册表值_Vb.net - Fatal编程技术网

Vb.net 如何读取字节中的注册表值

Vb.net 如何读取字节中的注册表值,vb.net,Vb.net,我正试图做一些事情来定期清理我的注册表,在某一点上,我需要读取一个注册表项的值,我遇到了问题。该值以字节(十六进制)表示,我无法读取。这是我的密码: '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,

我正试图做一些事情来定期清理我的注册表,在某一点上,我需要读取一个注册表项的值,我遇到了问题。该值以字节(十六进制)表示,我无法读取。这是我的密码:

'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
我用来检查注册表值是否存在并读取它的函数。。。 公共函数RegValue(ByVal配置单元作为注册表配置单元,ByVal键作为字符串,ByVal ValueName作为字符串,ByRef ErrInfo作为字符串)作为字符串 Dim objParent作为注册表项 Dim objSubkey作为注册表项 作为字符串的Dim sAns 选择案例配置单元 案例注册表hive.ClassesRoot objParent=Registry.ClassesRoot 案例注册表hive.CurrentConfig objParent=Registry.CurrentConfig 案例注册表hive.CurrentUser objParent=Registry.CurrentUser 案例注册表hive.dynda objParent=Registry.dynda 案例注册表hive.LocalMachine objParent=Registry.LocalMachine 案例注册表hive.PerformanceData objParent=Registry.PerformanceData 案例注册表hive.Users objParent=Registry.Users 结束选择 尝试 objSubkey=objParent.OpenSubKey(Key) '如果找不到,则对象未初始化 如果不是,则objSubkey为Nothing sAns=(objSubkey.GetValue(ValueName)) 如果结束 特例 ErrInfo=ex.Message 最后 '如果没有错误,但值为空,则填充errinfo 如果ErrInfo=“”和sAns=“”,则 ErrInfo=“未找到请求的注册表项的值” 如果结束 结束尝试 返回SAN 端函数 '尝试读取值的按钮单击 私有子按钮1\u单击(发送者作为对象,e作为事件参数)处理按钮1。单击 作为字符串的Dim sAns Dim sErr As String=“” sAns=RegValue(RegistryHive.ClassesRoot,“本地设置\Software\Microsoft\Windows\Shell\BagMRU\0\0\0\2\0\0\0\0”、“0”,sErr) 如果没有“”,那么 MsgBox(“Value=”和sAns) 其他的 MsgBox(“发生此错误:”&sErr) 如果结束 端接头 当我运行它并尝试读取值时,我收到以下消息:

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

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


如果有人能帮忙,我将不胜感激。

这是否回答了您的问题?“值的单位为字节(十六进制)”。不,不是。十六进制只是显示二进制数据的一种方便方式。这与它的存储方式无关。它是二进制数据,因此类型为
REG\u binary
。二进制数据在VB中存储为
字节
数组,因此当您从注册表中读取该值时,将得到一个
字节
数组。如何处理这些数据取决于它所代表的确切内容。您可以将其转换为十六进制
字符串
或base-64
字符串
或编码的
字符串
或根本不转换为
字符串
。为什么你认为把它转换成
字符串是个好主意?idk,我的计划是做一些系统来检查这些注册表值上是否存在该字节数组值的一部分,如果存在,则删除它