Delphi 如何列出所有启用的网络连接名称(接口)

Delphi 如何列出所有启用的网络连接名称(接口),delphi,delphi-xe7,Delphi,Delphi Xe7,我使用以下Delphi过程GetAdapters列出所有启用的网络适配器: procedure GetAdapters; var oBindObj : IDispatch; oNetAdapters, oNetAdapter, odnsAddr, oWMIService : OleVariant; i, iValue : LongWord; oEnum : IEnumVariant; oCtx : IBindCtx; oMk : IMoniker; sFileOb

我使用以下Delphi过程
GetAdapters
列出所有启用的网络适配器:

procedure GetAdapters;
var
  oBindObj : IDispatch;
  oNetAdapters, oNetAdapter,
  odnsAddr, oWMIService : OleVariant;
  i, iValue : LongWord;
  oEnum : IEnumVariant;
  oCtx : IBindCtx;
  oMk : IMoniker;
  sFileObj : WideString;
begin
  MainForm.sComboBox1.Items.Clear;
  sFileObj := 'winmgmts:\\.\root\cimv2';

  OleCheck(CreateBindCtx(0,oCtx));
  OleCheck(MkParseDisplayNameEx(oCtx, PWideChar(sFileObj), i, oMk));
  OleCheck(oMk.BindToObject(oCtx, nil, IUnknown, oBindObj));
  oWMIService := oBindObj;

  oNetAdapters := oWMIService.ExecQuery('SELECT * FROM Win32_NetworkAdapter WHERE PhysicalAdapter=True AND MACAddress IS NOT NULL AND AdapterType IS NOT NULL');

  oEnum := IUnknown(oNetAdapters._NewEnum) as IEnumVariant;

  while oEnum.Next(1, oNetAdapter, iValue) = 0 do begin
    try
      MainForm.sCombobox1.Items.Add(oNetAdapter.Caption);
    except
    end;

    oNetAdapter := Unassigned;
  end;

  odnsAddr := Unassigned;
  oNetAdapters := Unassigned;
  oWMIService := Unassigned;
end;
当我需要更改IP时,我需要指定网络接口名称,而不是适配器名称

如何像在Windows网络和共享中心中列出的那样列出网络连接名称

例如:

视窗7

Local Area Connection
Wireless Network Connection
Wireless Network Connection 1
视窗10

Wifi
Wifi 2
etc..
具有
接口索引
属性。读取适配器的
接口索引
值,然后运行另一个查询,搜索相同的
接口索引
值<代码>Win32_IP4RouteTable具有
名称
标题
说明
属性

也就是说,
Win32\u NetworkAdapter
不受欢迎,主要是因为它只支持IPv4。改为使用,它支持IP4和IPv6,并具有
InterfaceName
InterfaceDescription
属性


也就是说,另一种选择是不为此任务使用WMI。您可以使用。它返回一个由
IP_适配器_地址
项组成的数组,其中
IP_适配器_地址
具有
iIndex
ipv6iIndex
字段,可用于匹配由、、等返回的数组中的条目。

事实上,我不知道如何使用您告诉我的其他函数,我是网络新手,如果您能给我一个示例代码,现在我通过更改MainForm.sCombobox1.Items.Add(oNetAdapter.Caption)修复了它;到MainForm.sCombobox1.Items.Add(oNetAdapter.NetConnectionID);谢谢你详细的回答,我会继续搜索和学习