ネットワークの情報を取得するには?

解決


もうすぐ中級者  2009-07-28 02:06:04  No: 35268

インターネットで調べてみると、
ネットワークの情報(ネットワークカードの製品名、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;


自信なし  2009-07-28 03:08:53  No: 35269

//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}
だけではどうでしょう。


もうすぐ中級者  2009-07-28 03:16:48  No: 35270

すみません。
デバッグ中のコード出してしまいました。
確かに、このコードだと「{07918ECD-DB07-483C-9E94-0A3098D8052E}=Broadcom NetXtreme Gigabit Ethernet」
で読み出してますよね。

実際に読めなかったのは'IPAddress'が文字列のデータだと思って
ReadString で読みにいこうとしたのが問題で、実際は
REG_Multi_SZ という型だったからでした。REG_Multi_SZ で検索すると
ここの過去ログで回答があったので参考にしてみたら動きました。
お騒がせしました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加