Měl bych 2 dotazy.
Tak první:
Takto nastavím v adapteru IP přes netsh
U Win7 je to docela svižné.
U XP si musím počkat někdy i 15 vteřin.
Když jsem to používal přes CMD bylo jasné, že když zmizlo černé CMD okno, bylo nastaveno.
Jak však poznám V Delphi že již byl příkaz vykonán.
Kód: Vybrať všetko
shellexecute(handle,'open','netsh.exe','interface ip set address "Připojení k místní síti" ' +
'static 192.168.1.45 255.255.255.0 192.168.1.1 1',nil,sw_hide);Takto se da take nastavit IP do adapreru.
Marně se snažim tuhle funkci obratit.
S Delphi si hraji jen par měsicu a asi jsem si vzal větši sousto než zvladnu.
Prostě nechci aby tato funkce zapisovala IP do adapteru ale ji s adapteru načetla.
Kód: Vybrať všetko
function SetIpConfig(const AIpAddress : string;
const AGateWay : string = '';
const ASubnetMask : string = '') : 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 := 0;
sFileObj := 'winmgmts:\\.\root\cimv2';
oIpAddress := VarArrayCreate([1,1],varOleStr);
oIpAddress[1] := AIpAddress;
oGateWay := VarArrayCreate([1,1],varOleStr);
oGateWay[1] := AGateWay;
oSubnetMask := VarArrayCreate([1,1],varOleStr);
if ASubnetMask = '' then
oSubnetMask[1] := '255.255.255.0'
else
oSubnetMask[1] := ASubnetMask;
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 IPEnabled=TRUE');
oEnum := IUnknown(oNetAdapters._NewEnum) as IEnumVariant;
while oEnum.Next(1,oNetAdapter,iValue) = 0 do begin
try
if (AIpAddress = '') or SameText(AIpAddress,'DHCP') then
Retvar := oNetAdapter.EnableDHCP
else begin
Retvar := oNetAdapter.EnableStatic(oIpAddress,oSubnetMask);
if (Retvar = 0) and (AGateWay '') then
Retvar := oNetAdapter.SetGateways(oGateway);
end;
except
Retvar := -1;
end;
oNetAdapter := Unassigned;
end;
oGateWay := Unassigned;
oSubnetMask := Unassigned;
oIpAddress := Unassigned;
oNetAdapters := Unassigned;
oWMIService := Unassigned;
Result := Retvar;
end;