Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Disable sit.adapteru přes Delphi

Zdravím.
Poradite?
Toto mi povypina všechny sit, adaptery v PC.
Jak s toho vyčtu, ktery adapter vypinam?
Tad bych jem lan [00000000] Realtek PCIe GBE Family Controller

procedure TForm1.Button1Click(Sender: TObject);
const
  wbemFlagForwardOnly = $00000020;
var
  FSWbemLocator : OLEVariant;
  FWMIService   : OLEVariant;
  FWbemObjectSet: OLEVariant;
  FWbemObject   : OLEVariant;
  oEnum         : IEnumvariant;
  iValue        : LongWord;
begin;
  FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
  FWMIService   := FSWbemLocator.ConnectServer('localhost', 'root\CIMV2', '', '');
  FWbemObjectSet:= FWMIService.ExecQuery('SELECT * FROM Win32_NetworkAdapter Where NetEnabled=True','WQL',wbemFlagForwardOnly);
  oEnum         := IUnknown(FWbemObjectSet._NewEnum) as IEnumVariant;
  while oEnum.Next(1, FWbemObject, iValue) = 0 do
  begin
    FWbemObject.Disable();
    //FWbemObject.Enable();
    FWbemObject:=Unassigned;
  end;
end;

Děkují

Předmět Autor Datum
FWbemObject by mel obsahovat vsechny informace, ktere potrebujes, prozkoumej i jeho polozky/jine met…
gilhad 05.03.2014 19:17
gilhad
FWbemObjectSet:= FWMIService.ExecQuery('SELECT * FROM Win32_NetworkAdapter where name= "Realtek PCIe…
pme 05.03.2014 20:36
pme
To pme: Děkují moc. Ještě je problem tady. oEnum.Next(1, FWbemObject, iValue); Nevím jak to upravi…
Leo 11 06.03.2014 07:05
Leo 11
Jen takový dotaz, pokud jsi již ve škole jim vysvětloval že z tebe žádný programátor nebude a že se…
gilhad 06.03.2014 08:23
gilhad
Nechcise aby mně tu učili programovat. Chci si jen trochu ulehčit praci a hledam dobrou duši, ktera…
Leo11 06.03.2014 11:07
Leo11
Ked mas v SELECTe where name= "Realtek PCIe GBE Family Controller" tak ti to snad vrati len realtek,…
MM.. 06.03.2014 11:16
MM..
No zkoušel jsem to na PC s delphi, kde je Realtek jako jedina sitovka a funguje. V notasu je Intel(R…
Leo11 06.03.2014 11:40
Leo11
To co si vybral nepodporuje metodu disable. Bud si nevybral nic (nesedi ten nazov)-to je celkom prav…
MM.. 06.03.2014 14:25
MM..
metoda IEnumVariant::Next (t.j. tvoje oEnum.Next) vracia nejaku hodnotu, tak snad by bolo dobre si j…
MM.. 06.03.2014 14:29
MM..
V tom cykle na konci - FWbemObject je objekt tohoto typu http://msdn.microsoft.com/en-us/library/aa3…
MM.. 06.03.2014 14:34
MM..
Tak jsem vyzkoušel ten neupraveny zdrojak co jsem dal uplně nahoře. Dokazal zakazat všech Realtek si…
Leo 11 06.03.2014 16:30
Leo 11
Ešte skús prezradiť či používaš DHCP, alebo nie. Ak na PC používaš DHCP použi Win32_NetworkAdapterCo…
pme 06.03.2014 19:23
pme
Toto vše testova už na PC s těmi Intel sitovkamí. Tan Váš poslední zdrajaček funguje na adaptery s… poslední
Leo 11 07.03.2014 07:01
Leo 11

To pme:
Děkují moc.
Ještě je problem tady.

oEnum.Next(1, FWbemObject, iValue);

Nevím jak to upravit.
Přiznávám a již ve škole jsem jim vysvětloval že se mně žádný programátor nebude a že se snaží zbytečně.
Znám jen základy a toto je už nad mé znalostí.

Prostě dost často muslim v práci vypínat sitovku.
První jsem to řešil s batakem přes netsh interface ale toto vypada lip.
Ten zdrojak jsem našel na netu a jelikož vím že máme v prací na 1 PC delphi, chtěl jsem to zkusit.
Už se s tým trápím dost dlouho abych to vzdal.

Toto funguje, ale diky tomu že je sitovka Realtek jako první.
Vím že je problem v tom oEnum.Next(1, FWbemObject, iValue);
Ale prostě lama.
Pomužete prosím.

 begin;
      FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
      FWMIService   := FSWbemLocator.ConnectServer('localhost', 'root\CIMV2', '', '');
      FWbemObjectSet:= FWMIService.ExecQuery('SELECT * FROM Win32_NetworkAdapter where name= "Realtek PCIe GBE Family Controller"','WQL',wbemFlagForwardOnly);
      oEnum := IUnknown(FWbemObjectSet._NewEnum) as IEnumVariant;
      oEnum.Next(1, FWbemObject, iValue);
      FWbemObject.Disable();
      FWbemObject:=Unassigned;
    end;

Nechcise aby mně tu učili programovat.
Chci si jen trochu ulehčit praci a hledam dobrou duši, ktera pomuže.
Pro mne by to bylo učeni na par tydnu ne li měsicu.
Pro pme určitě otazka par minut u svačiny.
Viš, všichni se nerodí s vlohy programatora.
Je to přesně to same jako ve vladě.
Take tam nema nikdo vlohy pracovata nema smysl je to učit.

No zkoušel jsem to na PC s delphi, kde je Realtek jako jedina sitovka a funguje.
V notasu je Intel(R) PRO/1000 PL Network Connection.
A je v pořadí až druha v seznamu.

begin;
    FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
    FWMIService   := FSWbemLocator.ConnectServer('localhost', 'root\CIMV2', '', '');
    FWbemObjectSet:= FWMIService.ExecQuery('SELECT * FROM Win32_NetworkAdapter where name= "Intel(R) PRO/1000 PL Network Connection"','WQL',wbemFlagForwardOnly);
    oEnum := IUnknown(FWbemObjectSet._NewEnum) as IEnumVariant;
    oEnum.Next(1, FWbemObject, iValue);
    FWbemObject.Disable();
    FWbemObject:=Unassigned;
end;

Visi mi to na FWbemObject.Disable()
First chance exception at $7C812AEB. Exception class EOleError with message 'Method 'Disable' not supported by

Tak jsem vyzkoušel ten neupraveny zdrojak co jsem dal uplně nahoře.
Dokazal zakazat všech Realtek sitovky a i virtualni od VMware.

Spustil jsem ho na počitačich s intel sitovkou a nechyta se ani pod Win 8 ani pod XP.
Tak moc dik za ochotu ale budu muset zustat u toho bataku.

Ešte skús prezradiť či používaš DHCP, alebo nie.
Ak na PC používaš DHCP použi Win32_NetworkAdapterConfiguration a metódu ReleaseDHCPLease.
Ak nepoužívaš DHCP nemôžeš pomocou WMI zakázať sieťové pripojenie.

const
  wbemFlagForwardOnly = $00000020;
var
  FSWbemLocator : OLEVariant;
  FWMIService   : OLEVariant;
  FWbemObjectSet: OLEVariant;
  FWbemObject   : OLEVariant;
  oEnum         : IEnumvariant;
  iValue        : LongWord;
begin;
  FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
  FWMIService   := FSWbemLocator.ConnectServer('localhost', 'root\CIMV2', '', '');
  FWbemObjectSet:= FWMIService.ExecQuery('SELECT * FROM Win32_NetworkAdapterConfiguration Where IPEnabled = True','WQL',wbemFlagForwardOnly);
  oEnum         := IUnknown(FWbemObjectSet._NewEnum) as IEnumVariant;
  while oEnum.Next(1, FWbemObject, iValue) = 0 do
  begin
    FWbemObject.ReleaseDHCPLease();
    FWbemObject:=Unassigned;
  end;
end;

Pre znovu povolenie sieťového pripojenia použi RenewDHCPLease. Tiež môžeš pre všetky DHCP prenájmy(leases - neviem ako to preložiť...) použiť metódy ReleaseDHCPLeaseAll a RenewDHCPLeaseAll.

A hlavne si môžeš v slučke while..end vypisovať pre seba názov adaptéra a pýtať sa či zakázať alebo nie...

Toto vše testova už na PC s těmi Intel sitovkamí.

Tan Váš poslední zdrajaček funguje na adaptery s DHCP IP, ale nezakaže je, jen jim odebere IP.

Ten kod co jsem tu dal uplně nahoře, co by měl vypnout všechny sitovky nefunguje ani na Lan, kde je static IP

Zustane to viset na.
FWbemObjectSet:= FWMIService.ExecQuery('SELECT * FROM Win32_NetworkAdapter Where NetEnabled=True','WQL',wbemFlagForwardOnly);
S chybou.
First chance exception at $7C812AEB. Exception class EOleException with message 'Neplatný dotaz'. Process Project1.exe (1980)

Když zadam přimo nazev adapteru ktery jsem ziskal přes CMD - ipconfig -all
FWbemObjectSet:= FWMIService.ExecQuery('SELECT * FROM Win32_NetworkAdapter where name= "Intel(R) PRO/1000 PL Network Connect"','WQL',wbemFlagForwardOnly);
Tak to zas na něm zustane viset.
Project Project1.exe raised exception class EVariantInvalidOpError with message 'Invalid variant operation'.

Zpět do poradny Odpovědět na původní otázku Nahoru