Delphi 如何列出所有启用的网络连接名称(接口)
我使用以下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
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);谢谢你详细的回答,我会继续搜索和学习