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,我的计划是做一些系统来检查这些注册表值上是否存在该字节数组值的一部分,如果存在,则删除它