1

我正在尝试从注册表中提取一个二进制格式的值并将其转换为字符串并将其输入到文本框中。当我运行我的代码时,文本框是空的。我检查了注册表,那里有一个二进制值,并检查了 VB 中的代码。下面是我获取值并将其转换并将其添加到文本框中的代码。

    Dim LANDeskVirus As String = CStr(My.Computer.Registry.GetValue _
        ("HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\LANDesk\ManagementSuite\WinClient\Antivirus", _
        "PatternFileDate", Nothing))

    Dim LANDeskVirusDefintion As String = Convert.ToString(LANDeskVirus)
    Dim BinaryText As String = LANDeskVirusDefintion
    Dim Characters As String = Regex.Replace(BinaryText, "[^01]", "")
    Dim ByteArray((Characters.Length / 8) - 1) As Byte
    For Index As Integer = 0 To ByteArray.Length - 1
        ByteArray(Index) = Convert.ToByte(Characters.Substring(Index * 8, 8), 2)
    Next
    TextBox1.Text = (ASCIIEncoding.ASCII.GetString(ByteArray))
4

1 回答 1

1

使用 Regedt32.exe 查看注册表。如果该键值的类型是 REG_SZ,那么它是一个字符串,您可以直接将其分配给文本框。

TextBox1.Text = My.Computer.Registry.GetValue _
    ("HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\LANDesk\ManagementSuite\WinClient\Antivirus", _
    "PatternFileDate", Nothing)

如果它类似于 REG_DWORD,那么您可以将其转换为字符串,然后将其分配给文本框,如下所示:

TextBox1.Text = CStr(My.Computer.Registry.GetValue _
    ("HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\LANDesk\ManagementSuite\WinClient\Antivirus", _
    "PatternFileDate", Nothing))

使用 8 个字节的 REG_BINARY 值,您可能可以获得这样的日期。(您可能需要使用 .FromBinary 而不是 .FromFileTime)

dim b() as byte
b = CStr(My.Computer.Registry.GetValue _
        ("HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\LANDesk\ManagementSuite\WinClient\Antivirus", _
        "PatternFileDate", Nothing))
TextBox1.Text = DateTime.FromFileTime(BitConverter.ToUInt64(b, 0)).ToString
于 2013-01-17T23:59:03.783 回答