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 値を使用すると、おそらくこのような日付を取得できます。(.FromFileTime の代わりに .FromBinary を使用する必要がある場合があります)

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 に答える