インターネットで調べてみると、
ネットワークの情報(ネットワークカードの製品名、IPアドレス、サブネットマスク)を
取ってくるのに、レジストリからとってくるとあったので、
以下のように作ってみたのですが下記3番目の項目が動作しませんでした。
{}でかこまれたネームのフォルダにあるキーは取得できないのでしょうか?
1.◎ネットワークのカード数を取得
2.◎ネットワークカードの製品名を取得
3.×IPアドレスとサブネットマスクを取得
procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
SList: TStringList;
MList: TStringList;
Reg: TRegistry;
KeyName: String;
KeyStr: String;
begin
SList := TStringList.Create;
MList := TStringList.Create;
Reg := TRegistry.Create;
try
//1
Reg.RootKey := HKEY_LOCAL_MACHINE;
KeyName := '\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards';
Reg.OpenKey(KeyName, false);
Reg.GetKeyNames(SList);
Reg.CloseKey;
//2
for i := 1 to SList.Count do begin
Reg.OpenKey(KeyName + '\' + SList.Strings[i - 1], false);
SList.Strings[i - 1] := Reg.ReadString('ServiceName') + '=' + Reg.ReadString('Description');
Reg.CloseKey;
end;
//3
for i := 1 to SList.Count do begin
KeyStr := 'SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\' + SList.Strings[i - 1];
Reg.OpenKey(KeyStr, false);
MList.Add(SList.Values[SList.Names[i - 1]] + ',' +
Reg.ReadString('IPAddress') + ',' +
Reg.ReadString('SubnetMask'));
Reg.CloseKey;
end;
finally
SList.Free;
MList.Free;
Reg.Free;
end;
end;
//2で
>SList.Strings[i - 1] := Reg.ReadString('ServiceName') + '=' + Reg.ReadString('Description');
していますが
例えば
{07918ECD-DB07-483C-9E94-0A3098D8052E}=Broadcom NetXtreme Gigabit Ethernet
みたいな文字列でキーをオープンしようとしているのでは?
SList.Strings[i - 1] := Reg.ReadString('ServiceName');
{07918ECD-DB07-483C-9E94-0A3098D8052E}
だけではどうでしょう。
すみません。
デバッグ中のコード出してしまいました。
確かに、このコードだと「{07918ECD-DB07-483C-9E94-0A3098D8052E}=Broadcom NetXtreme Gigabit Ethernet」
で読み出してますよね。
実際に読めなかったのは'IPAddress'が文字列のデータだと思って
ReadString で読みにいこうとしたのが問題で、実際は
REG_Multi_SZ という型だったからでした。REG_Multi_SZ で検索すると
ここの過去ログで回答があったので参考にしてみたら動きました。
お騒がせしました。
ツイート | ![]() |