
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í
FWbemObject by mel obsahovat vsechny informace, ktere potrebujes, prozkoumej i jeho polozky/jine metody nez enable/disable
To pme:
Děkují moc.
Ještě je problem tady.
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.
Jen takový dotaz, pokud jsi již ve škole jim vysvětloval že z tebe žádný programátor nebude a že se nehodláš učit, proč teď chceš v poradně, aby tě ostatní učili programovat?
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.
Ked mas v SELECTe where name= "Realtek PCIe GBE Family Controller" tak ti to snad vrati len realtek, ziadne ine. Teda co ti nefunguje? Alebo mas v PC 2 stejne sietovky realtek?
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.
Visi mi to na FWbemObject.Disable()
First chance exception at $7C812AEB. Exception class EOleError with message 'Method 'Disable' not supported by
To co si vybral nepodporuje metodu disable. Bud si nevybral nic (nesedi ten nazov)-to je celkom pravdepodobna pricina hlavne ked ti to pise not supported by a nic, alebo to ta sietovka cez OLE nepodporuje.
metoda IEnumVariant::Next (t.j. tvoje oEnum.Next) vracia nejaku hodnotu, tak snad by bolo dobre si ju aj otestovat. ked to vrati S_FALSE tak si nic nevybral a nemozes nic disablovat.
http://msdn.microsoft.com/en-us/library/aa911292.a spx
V tom cykle na konci - FWbemObject je objekt tohoto typu
http://msdn.microsoft.com/en-us/library/aa394216%2 8v=vs.85%29.aspx
a teda si pred tym Disable() mozes testovat co chces, ten objekt ma poprdele atributov, vidis to na tej MSDN stranke. Trebars otestujes if(FWbemObject.DeviceID == neco) apod a az potom Disable()
Device Id vidis v spravci zariadeni v zozname s podrobnostami
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.
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'.