Delphi > Obecné

Status síťového adaptéru

(1/3) > >>

jarex:
Poprosil bych, zda by mi někdo neporadil, jak mám zjistit status síťového adaptéru například podle jeho názvu.
Zda je připojen, nebo odpojen.

Například: GetStatusInterface('Připojení k místní síti')

Výsledek boolean.

Moc děkuji.

jarex:
zatím jsem vyplodil toto:

--- Kód: Delphi ---function TForm1.GetStatusInterface: boolean;varStng: Tinifile;atm: Tstringlist;Adapter: string;i: integer;beginresult:=false;atm:=Tstringlist.create;stng:=tinifile.create(extractfilepath(application.ExeName)+'\settings.ini');Adapter:= stng.ReadString('private settings','Adapter','Ethernet 2');atm.text:=(Getdosoutput('netsh interface show interface', systemdisk));for i := 0 to atm.count - 1 do if pos(adapter,atm[i])>0 then    begin    if (pos('Odpojen',atm[i])>0) or (pos('Disconnected',atm[i])>0) then result:=false else result:=true;    end;stng.Free;atm.Free;end;
Funguje to, ale má to svá ale.

Ján Masaryk:
Nebudeš mať jednoduchšie urobiť ping na bránu (napr. ping -t 192.168.0.1) pre localhost a napr. (napr. ping -t 8.8.8.8  ) pre pripojenie na internet ?
Ide o to, že na PC môžeš mať viacero sieťových adaptérov (ja mám 2x Ethernet + USB Wifi) a nemusíš zisťovať, ktorý je momentálne aktívny.

jarex:
Ale mně nejde o připojení k internetu, mně jde o to, zda je adaptér připojen do sítě. Název adaptéru znám a chci podle jeho názvu vědět, jestli linkuje. V mém případě se jedná o připojení kabelem. Však je to z toho kódu, co jsem poslal i zřejmé, že se ptám přímo na konkrétní název adaptéru, a pak zda je připojen, nebo odpojen. Jen mi tento způsob nepřijde zrovna ideální, jelikož spolehlivost na základě dosoutputu nebude bůhví jaká. A potřebuji se na to ptát cyklicky. Nejlépe by vyhovoval nějaký event, ale to opravdu nevím, jak na to.

tomak586:
Tohle reseni je pres Windows Management Instrumentation. Nevim jestli ti to bude vyhovovat, ale koukni se.


--- Kód: Delphi ---program TestConnectAdapt; {$APPTYPE CONSOLE} {$R *.res} uses  Winapi.Windows,  System.SysUtils,  Winapi.ActiveX,  System.Win.ComObj,  System.Variants; function GetStatusInterface(AdapterName: string): Boolean;var  FSWbemLocator: OLEVariant;  FWMIService: OLEVariant;  FWbemObjectSet: OLEVariant;  FWbemObject: OLEVariant;  oEnum: IEnumvariant;  iValue: LongWord;begin  Result := False;  try    FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');    FWMIService := FSWbemLocator.ConnectServer('localhost', 'root\CIMV2', '', '');     FWbemObjectSet := FWMIService.ExecQuery('SELECT * FROM Win32_NetworkAdapter WHERE NetConnectionID = "' + AdapterName + '"', 'WQL', 0);    oEnum := IUnknown(FWbemObjectSet._NewEnum) as IEnumVariant;     if oEnum.Next(1, FWbemObject, iValue) = 0 then    begin      Result := (FWbemObject.NetConnectionStatus = 2); // 2 - připojeno    end;  except  end;end; begin  try    CoInitialize(nil);     var IsConnected := GetStatusInterface('Wi-Fi');    CoUninitialize;      if IsConnected then      Writeln('Adaptér je připojen')    else      Writeln('Adaptér je odpojen');   except    on E: Exception do      Writeln(E.ClassName, ': ', E.Message);  end;end. 

Navigace

[0] Seznam témat

[#] Další strana

Přejít na plnou verzi