Null передаешь в нее чтобы вернуть инфу о всех адаптерах. Примерно так:
Код | Adapters := GetAdapterInfo(Null); for i := 0 to High(Adapters) do begin s := Format('DeviceID=%s', [VarToStr(Adapters[i].DeviceID)]; end;
|
В общем заполняешь данными тот элемент управления через который будет инфу показывать.
з.ы. вот полный код как у меня есть занесения этой инфы в таблички. Понятно что один в один тебе он не понадобится. Да и избыточный малось, но лень переделывать 
Код | procedure TfrmIPSetUp.LoadAdapterDataInfo(ANeedRequery: boolean = False); var i, j: integer; s: string; begin if ANeedRequery or (not Assigned(Adapters)) then Adapters := GetAdapterInfo(Null);
if memdsetAdapterInfo.Active then memdsetAdapterInfo.Close; memdsetAdapterInfo.Open; if memdsetAdapterIP.Active then memdsetAdapterIP.Close; memdsetAdapterIP.Open; if memdsetIPGateway.Active then memdsetIPGateway.Close; memdsetIPGateway.Open; if memdsetDNSServer.Active then memdsetDNSServer.Close; memdsetDNSServer.Open;
for i := 0 to High(Adapters) do begin s := GetNetConnectionStatusTextById(vartoint(Adapters[i].NetConnectionStatus, -1));
// Заполнение таблицы с информацие по доступным соединениям with tvConnection.DataController do begin BeginUpdate; try RecordCount := Succ(i); Values[i, tvConnectionId.Index] := i; Values[i, tvConnectionDeviceID.Index] := Adapters[i].DeviceID; Values[i, tvConnectionNetConnectionID.Index] := Adapters[i].NetConnectionID; Values[i, tvConnectionNetConnectionStatus.Index] := s; Values[i, tvConnectionName.Index] := Adapters[i].Name; Values[i, tvConnectionAdapterConfigurationPath.Index] := Adapters[i].AdapterConfigurationPath; finally EndUpdate; end; end;
// Заполняем датасеты подробной информацией with memdsetAdapterInfo do begin DisableControls; try {$IFDEF RUN_DEVELOP} WriteLog(Format('DeviceID=%s; Name="%s"; NetConnectionID="%s"', [VarToStr(Adapters[i].DeviceID), VarToStr(Adapters[i].Name), VarToStr(Adapters[i].NetConnectionID)])); {$ENDIF} AppendRecord([Null, Adapters[i].DeviceID, 'DeviceID', 'Номер устройства', Adapters[i].DeviceID, False, Adapters[i].NetConnectionID]);
AppendRecord([Null, Adapters[i].DeviceID, 'AdapterPath', 'Путь экземпляра адаптера', Adapters[i].AdapterPath, False, Adapters[i].NetConnectionID]);
AppendRecord([Null, Adapters[i].DeviceID, 'AdapterConfigurationPath', 'Путь экземпляра конфигурации адаптера', Adapters[i].AdapterConfigurationPath, False, Adapters[i].NetConnectionID]);
AppendRecord([Null, Adapters[i].DeviceID, 'Name', 'Сетевой адаптер', Adapters[i].Name, True, Adapters[i].NetConnectionID]);
AppendRecord([Null, Adapters[i].DeviceID, 'AdapterType', 'Тип адаптера', Adapters[i].AdapterType, True, Adapters[i].NetConnectionID]);
AppendRecord([Null, Adapters[i].DeviceID, 'Manufacturer', 'Производитель сетевого адаптера', Adapters[i].Manufacturer, True, Adapters[i].NetConnectionID]);
AppendRecord([Null, Adapters[i].DeviceID, 'NetConnectionID', 'Соединение', Adapters[i].NetConnectionID, False, Adapters[i].NetConnectionID]);
AppendRecord([Null, Adapters[i].DeviceID, 'NetConnectionStatus', 'Состояние подключения', s, True, Adapters[i].NetConnectionID]);
AppendRecord([Null, Adapters[i].DeviceID, 'MACAddress', 'MAC-адрес', Adapters[i].MACAddress, True, Adapters[i].NetConnectionID]);
if not VarIsArray(Adapters[i].IPAddress) then begin AppendRecord([Null, Adapters[i].DeviceID, 'IPAddress', 'IP-адрес', Null, True, Adapters[i].NetConnectionID]); AppendRecord([Null, Adapters[i].DeviceID, 'IPSubnet', 'IP-подсеть', Null, True, Adapters[i].NetConnectionID]); end else for j := VarArrayLowBound(Adapters[i].IPAddress, 1) to VarArrayHighBound(Adapters[i].IPAddress, 1) do begin AppendRecord([Null, Adapters[i].DeviceID, 'IPAddress' + IntToStr(Succ(j)), 'IP-адрес' + IntToStr(Succ(j)), Adapters[i].IPAddress[j], True, Adapters[i].NetConnectionID]); AppendRecord([Null, Adapters[i].DeviceID, 'IPSubnet' + IntToStr(Succ(j)), 'IP-подсеть' + IntToStr(Succ(j)), Adapters[i].IPSubnet[j], True, Adapters[i].NetConnectionID]); memdsetAdapterIP.AppendRecord([Null, Adapters[i].DeviceID, Adapters[i].IPAddress[j], Adapters[i].IPSubnet[j], (j = 0)]); end;
if not VarIsArray(Adapters[i].DefaultIPGateway) then begin AppendRecord([Null, Adapters[i].DeviceID, 'DefaultIPGateway', 'Шлюз IP по умолчанию', Null, True, Adapters[i].NetConnectionID]); AppendRecord([Null, Adapters[i].DeviceID, 'GatewayCostMetric', 'Метрика', Null, True, Adapters[i].NetConnectionID]); end else for j := VarArrayLowBound(Adapters[i].DefaultIPGateway, 1) to VarArrayHighBound(Adapters[i].DefaultIPGateway, 1) do begin AppendRecord([Null, Adapters[i].DeviceID, 'DefaultIPGateway', 'Шлюз IP по умолчанию', Adapters[i].DefaultIPGateway[j], True, Adapters[i].NetConnectionID]); AppendRecord([Null, Adapters[i].DeviceID, 'GatewayCostMetric', 'Метрика', Adapters[i].GatewayCostMetric[j], True, Adapters[i].NetConnectionID]); memdsetIPGateway.AppendRecord([Null, Adapters[i].DeviceID, Adapters[i].DefaultIPGateway[j], Adapters[i].GatewayCostMetric[j], (j = 0)]); end;
if not VarIsArray(Adapters[i].DNSServerSearchOrder) then begin AppendRecord([Null, Adapters[i].DeviceID, 'DNSServerSearchOrder', 'DNS-сервер', Null, True, Adapters[i].NetConnectionID]); end else for j := VarArrayLowBound(Adapters[i].DNSServerSearchOrder, 1) to VarArrayHighBound(Adapters[i].DNSServerSearchOrder, 1) do begin AppendRecord([Null, Adapters[i].DeviceID, 'DNSServerSearchOrder', 'DNS-сервер', Adapters[i].DNSServerSearchOrder[j], True, Adapters[i].NetConnectionID]); memdsetDNSServer.AppendRecord([Null, Adapters[i].DeviceID, Adapters[i].DNSServerSearchOrder[j], (j = 0)]); end;
AppendRecord([Null, Adapters[i].DeviceID, 'DHCPEnabled', 'DHCP вкл.', Adapters[i].DHCPEnabled, True, Adapters[i].NetConnectionID]);
AppendRecord([Null, Adapters[i].DeviceID, 'DHCPServer', 'DHCP-сервер', Adapters[i].DHCPServer, True, Adapters[i].NetConnectionID]);
AppendRecord([Null, Adapters[i].DeviceID, 'DHCPLeaseExpires', 'DHCP-аренда истекает', Adapters[i].DHCPLeaseExpires, True, Adapters[i].NetConnectionID]);
AppendRecord([Null, Adapters[i].DeviceID, 'DHCPLeaseObtained', 'DHCP-аренда получена', Adapters[i].DHCPLeaseObtained, True, Adapters[i].NetConnectionID]); finally EnableControls; end; end; end; end;
|
з.з.ы. Сразу кину подправленные варианты функций по настройки всякого разного. Функции я брал на этом форуме изначально, да и по одной из твоих ссылок они есть...
Настройка адресов и шлюза. Первый параметр - на каком адаптере настраивать. Остальные могут быть либо строки либо вариантные массивы чтобы установить несколько адресов.
Код | function SetIpConfig(const ADeviceID: variant; const AIpAddress: variant; const AGateWay: variant; const ASubnetMask: variant): integer; var Retvar: integer; oBindObj: IDispatch; oNetAdapters, oNetAdapter, oIpAddress, oGateWay, oWMIService, oSubnetMask: olevariant; i, iValue: longword; oEnum: IEnumvariant; oCtx: IBindCtx; oMk: IMoniker; sFileObj: WideString; begin Retvar := -1; Result := Retvar; sFileObj := 'winmgmts:\\.\root\cimv2';
if not VarIsStr(ADeviceID) then Exit;
// Create OLE [IN} Parameters if VarIsArray(AIpAddress) then oIpAddress := AIpAddress else if VarIsStr(AIpAddress) then begin oIpAddress := VarArrayCreate([0, 0], varOleStr); oIpAddress[0] := AIpAddress; end;
if VarIsArray(AGateWay) then oGateWay := AGateWay else if VarIsStr(AGateWay) then begin oGateWay := VarArrayCreate([0, 0], varOleStr); oGateWay[0] := AGateWay; end;
if VarIsArray(ASubnetMask) then oSubnetMask := ASubnetMask else if VarIsNull(ASubnetMask) then begin if VarIsArray(oIpAddress) then begin oSubnetMask := VarArrayCreate([VarArrayLowBound(oIpAddress, 1), VarArrayHighBound(oIpAddress, 1)], varOleStr); for i := VarArrayLowBound(oIpAddress, 1) to VarArrayHighBound(oIpAddress, 1) do begin oSubnetMask[i] := '255.255.255.0'; end; end; end else if VarIsStr(ASubnetMask) then begin oSubnetMask := VarArrayCreate([0, 0], varOleStr); oSubnetMask[0] := ASubnetMask; end;
// Connect to WMI - Emulate API GetObject() 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_NetworkAdapterConfiguration ' + 'where Index="' + ADeviceID + '"');
oEnum := IUnknown(oNetAdapters._NewEnum) as IEnumVariant; while oEnum.Next(1, oNetAdapter, iValue) = 0 do begin try // Set by DHCP ? (Gateway and Subnet ignored) if not VarIsArray(oIpAddress) then Retvar := oNetAdapter.EnableDHCP // Set via STATIC ? else begin Retvar := oNetAdapter.EnableStatic(oIpAddress, oSubnetMask); // Change Gateway ? if (Retvar = 0) and (VarIsArray(oGateWay)) then Retvar := oNetAdapter.SetGateways(oGateway); // *** This is where we need some sort of *** // *** Network Mapped Resource Refresh *** end; except Retvar := -1; end; end; Result := Retvar; end;
|
Для DNS тож. самое
Код | function SetDnsServers(const ADeviceID: variant; const ADnsAddr: variant): integer; var Retvar: integer; oDnsAddr, oWMIService: olevariant; oBindObj: IDispatch; oNetAdapters, oNetAdapter: olevariant; i, iValue: longword; oEnum: IEnumvariant; oCtx: IBindCtx; oMk: IMoniker; sFileObj: WideString; begin Retvar := -1; Result := Retvar; sFileObj := 'winmgmts:\\.\root\cimv2';
if not VarIsStr(ADeviceID) then Exit;
if VarIsArray(ADnsAddr) then oDnsAddr := ADnsAddr else if VarIsStr(ADnsAddr) then begin oDnsAddr := VarArrayCreate([0, 0], varOleStr); oDnsAddr[0] := ADnsAddr; end;
// Connect to WMI - Emulate API GetObject() 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_NetworkAdapterConfiguration ' + 'where Index="' + ADeviceID + '"');
oEnum := IUnknown(oNetAdapters._NewEnum) as IEnumVariant; while oEnum.Next(1, oNetAdapter, iValue) = 0 do begin try if VarIsArray(oDnsAddr) then Retvar := oNetAdapter.SetDNSServerSearchOrder(oDnsAddr) else Retvar := oNetAdapter.SetDNSServerSearchOrder(); except Retvar := -1; end; end; Result := Retvar; end;
|
|