Jak na IP

Programovacie jazyky, rady, poradňa...
Leo
Novice
Novice
Príspevky: 7
Registrovaný: 29 dec 2011, 7:04

Jak na IP

Príspevok od používateľa Leo »

Zdravím všechny v tom novem roce :smt006 .

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);
A tady 2 dotaz:
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; 
Pomuže někdo ???
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: Jak na IP

Príspevok od používateľa audiotrack »

http://www.swissdelphicenter.ch/torry/s ... php?id=455
tam nájdeš ukážky ako spustiť príkaz a čakať na jeho dokončenie

čítanie IP z adaptéru tiež nájdeš na nete. Ak nevieš v delphi zas tak dobre programovať, tak zbytočne sa s tým budeš trápiť
Leo
Novice
Novice
Príspevky: 7
Registrovaný: 29 dec 2011, 7:04

Re: Jak na IP

Príspevok od používateľa Leo »

audiotrack napísal:http://www.swissdelphicenter.ch/torry/s ... php?id=455
tam nájdeš ukážky ako spustiť príkaz a čakať na jeho dokončenie
Dik moc.
audiotrack napísal: čítanie IP z adaptéru tiež nájdeš na nete. Ak nevieš v delphi zas tak dobre programovať, tak zbytočne sa s tým budeš trápiť
No dělam program již rok.
Ne že jsem tak pomaly ale prostě, když je chvilka času v praci a chut :D
Tam mi take nikdo nevěřil že to dam, a dnes ten program použivaji všichni ve firmě.
Tak i kdybych to měl zkoušet třeba pul roku tak to dam.

A nakonec notaz.
Je ještě dotaz.
Je ještě nějaky jiny zpusob jak nastavit IP.
Ten zdrojak je dobry a rychly, ale nedovede nastalit adapter, ktery není připojen do sitě.
Přes netsh to jde ale pod Win XP je dost ponale.
Napísať odpoveď