Delphi > Obecné
Status síťového adaptéru
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