- PR -

Microsoft.Win32.Registry.LocalMachine.OpenSubKeyについて

1
投稿者投稿内容
いっく☆
常連さん
会議室デビュー日: 2003/11/26
投稿数: 35
投稿日時: 2003-11-26 23:42
こんばんは。初めまして。いつも参考にさせて頂いています。
Microsoft.Win32.Registry.LocalMachine.OpenSubKeyを使用して
レジストリから値を取得する方法にてうまくいかない所があり
書込みをさせていただきました。

下記の様なレジストリ構造より
Tcpip〜サブキーの全てのNameServerListキーより値を取得したいのですが
どうしてもDim a As String = regkey1.GetValue("NameServerList")の所で
エラーになってしまうのです。
異なるサブキーから同じキーの値取得方法を教えて下さい。
SYSTEM\CurrentControlSet\Services\NetBT\Parameters\Interfaces
    |-Tcpip_{5045FBC6-4590-42AB-AB62-A08BC14C3A64}
    |-Tcpip_{5045FBC6-4590-42AB-AB62-A08BC14C3A65}
    |-Tcpip_{5045FBC6-4590-42AB-AB62-A08BC14C3A66}


intK = 0
'サブキーを読み取り専用で開く
Dim regkey As Microsoft.Win32.RegistryKey = _
Microsoft.Win32.Registry.LocalMachine.OpenSubKey("SYSTEM\CurrentControlSet\Services\NetBT\Parameters\Interfaces", False)
If (regkey Is Nothing) Then
Else
Dim keyNames() As String = regkey.GetSubKeyNames()
intI = regkey.SubKeyCount()
ReDim Preserve strRegSubkey(intI)
For Each strI In keyNames
intK = intK + 1
strRegSubkey(intK) = "SYSTEM\CurrentControlSet\Services\NetBT\Parameters\Interfaces\" & (strI.ToString)
Next
End If
regkey.Close()
Dim strRegSubkey1 As String
intK = 0

For intK = 1 To intI
strRegSubkey1 = strRegSubkey(intK)
Dim regkey1 As Microsoft.Win32.RegistryKey = _
Microsoft.Win32.Registry.LocalMachine.OpenSubKey(strRegSubkey1, False)
If (regkey1 Is Nothing) Then

Else
Dim valueNames() As String = regkey1.GetValueNames()
Dim v As String
For Each v In valueNames
If v.ToString = "NameServerList" Then
Dim a As String = regkey1.GetValue("NameServerList")
Else
End If
Next

End If
regkey1.Close()
Next
ちなみに,下記ではきちんと値を取得するのですが。。。
'サブキーを読み取り専用で開く
Dim regkey As Microsoft.Win32.RegistryKey = _
Microsoft.Win32.Registry.LocalMachine.OpenSubKey("SOFTWARE\sss\Version", False)

'サブキーが存在しないときはNothingが返される
If (regkey Is Nothing) Then Return

'文字列を読み込む
stringValue = regkey.GetValue("ssss")
regkey.Close()
なな
ぬし
会議室デビュー日: 2003/06/22
投稿数: 659
お住まい・勤務地: 愛知県
投稿日時: 2003-11-27 08:47
> Dim a As String = regkey1.GetValue("NameServerList")

NameServerListは、REG_MULTI_SZなので、String型の配列が返ります。
Dim a() As String = regkey1.GetValue("NameServerList")
としてください。

ちなみに、型は、
regkey1.GetValue("NameServerList").GetType.ToString()
で確認できます。

# この手のものは、Insider.NET会議室の方が良いですよ。
いっく☆
常連さん
会議室デビュー日: 2003/11/26
投稿数: 35
投稿日時: 2003-11-27 10:06
ななさん,アドバイスありがとうございました。
次回から会議室を変更して書込みします。すいません。
さっそく,Dim a() As String = regkey1.GetValue("NameServerList")を
試してみました。おかげで,きちんと値を取得する事ができました。(^_^)

For intK = 1 To intI
strRegSubkey1 = strRegSubkey(intK)
Dim regkey1 As Microsoft.Win32.RegistryKey = _
Microsoft.Win32.Registry.LocalMachine.OpenSubKey(strRegSubkey1, False)
If (regkey1 Is Nothing) Then

Else
Dim valueNames() As String = regkey1.GetValueNames()
Dim v As String
For Each v In valueNames
If v.ToString = "NameServerList" Then
Dim a() As String = regkey1.GetValue("NameServerList")
If a.Length > 0 Then
intJ = a.Length
For intL = 0 To intJ - 1
Dim dd As String = a(intL).ToString()
Next

End If
Else
End If
Next
End If
regkey1.Close()
Next
1

スキルアップ/キャリアアップ(JOB@IT)