Autor Téma: Načteni IP  (Přečteno 4355 krát)

Bobanek

  • Host
Načteni IP
« kdy: 25-07-2012, 08:11:38 »
Dobry den.
Nema někdo zkušenosti s Helper Component
http://www.magsys.co.uk/delphi/magiphlp.asp

Našel jsem na Poradna.net toto

Kód: Delphi [Vybrat]
  1. uses IPHelper;
  2.  
  3. procedure TForm2.Button1Click(Sender: TObject);
  4. var
  5.   A: TAdaptorRows;
  6.   I: Integer;
  7. begin
  8.   IpHlpAdaptersInfo(I,A);
  9.   Memo1.Lines.Add(A[0].Description);
  10.   Memo1.Lines.Add(A[0].MacAddress);
  11.   Memo1.Lines.Add(A[0].IPAddressList[0]);
  12.   Memo1.Lines.Add(A[0].IPMaskList[0]);
  13.   Memo1.Lines.Add(A[0].GatewayList[0]);
  14.   Memo1.Lines.Add(A[0].DHCPServer[0]);
  15.   Memo1.Lines.Add(A[0].DNSServerList[0]);
  16. end;
  17.  

Funguje to spolehlivě a je to pro mně začatečnika jednoduche řešeni.
Problem je že použivam v adapteru vice IP adres.

to jde vypsat
Memo1.Lines.Add(A[0].IPAddressList[0]);
Memo1.Lines.Add(A[0].IPAddressList[1]);
Memo1.Lines.Add(A[0].IPAddressList[2]);

Problem je v systemu XP a Win 7
Když mam v adapteru zadane třeba 3 IP.
Ve Win7 je prvni IP na pozici 0   Memo1.Lines.Add(A[0].IPAddressList[0]);
Ve Win XP je prvni IP v adapteru na posledni pozici   Memo1.Lines.Add(A[0].IPAddressList[2]);


Offline Jan Fiala

  • Příspěvků: 49
  • Karma: 0
    • PSPad editor
Re:Načteni IP
« Odpověď #1 kdy: 25-07-2012, 09:53:20 »
A ten problem je v cem? Ze jsou v jinem poradi?

Offline < z >

  • Administrátoři
  • Guru
  • *****
  • Příspěvků: 1121
  • Karma: 41
    • Verze Delphi: 7, 2010
Re:Načteni IP
« Odpověď #2 kdy: 25-07-2012, 10:29:51 »
2 Bobanek: na poradi urcite spolehat nemuzes

Bobanek

  • Host
Re:Načteni IP
« Odpověď #3 kdy: 25-07-2012, 16:46:17 »
A ten problem je v cem? Ze jsou v jinem poradi?
EE.
Pořadi souhlasi.
Jen je to pořadi obraceně.

Ve Win 7 je jako 1 IP  IPAddressList[0]); kterou zadavate do adapteru.
A pak dalši, ktere přidavate v upřesnit IPAddressList[1]);IPAddressList[2]);

Ve Win XP je to obraceně.
Když mam zadanou IP a přidane dalši 2 tak ta v adapteru je IPAddressList[2])

Ja stejnak potřebuji zjištovat jen tu hlavni v adapteru tak potřebuji tu první a posledni.
Zjistit jaky je ve stroji system je jednoduche.
Jak však zjistim. ktera je poslední.
V adapteru jich muže byt libovolny počet.


Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4113
  • Karma: 36
    • Verze Delphi: XE7 professional
Re:Načteni IP
« Odpověď #4 kdy: 26-07-2012, 07:19:46 »
//Pořadi souhlasi.
//Jen je to pořadi obraceně.
Daj si povedať od skúsenejších. Vedia veľmi dobre čo hovoria.
Po druhé, programátor nesmie nikdy takto pristupovať k žiadnemu riešeniu. To znamená, že nemôže nič dopredu predpokladať, pokiaľ to nie je výslovne uvedené.
Tú hlavnú adresu si budeš musieť zisťovať ináč, nie podľa poradia. Žiaľ ja neporadím.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline pepak

  • Guru
  • *****
  • Příspěvků: 1401
  • Karma: 34
    • Pepak.net
Re:Načteni IP
« Odpověď #5 kdy: 26-07-2012, 10:58:49 »
Nabízí se otázka, proč si Bobanek myslí, že adresa uvedená na prvním místě v UI je ta hlavní. Podle mě nic jako "hlavní adresa" neexistuje. Můžeme se bavit tak akorát o "první adrese v UI", a tu pak samozřejmě nemá smysl zjišťovat pomocí funkcí pro práci s adresami, ale pomocí funkcí pro práci s registrem (přečíst si položku, která odpovídá příslušnému editu v UI).

Offline Mi.Chal.

  • Guru
  • *****
  • Příspěvků: 574
  • Karma: 25
Re:Načteni IP
« Odpověď #6 kdy: 26-07-2012, 13:51:08 »
Nabízí se otázka, proč si Bobanek myslí, že adresa uvedená na prvním místě v UI je ta hlavní. Podle mě nic jako "hlavní adresa" neexistuje. Můžeme se bavit tak akorát o "první adrese v UI", a tu pak samozřejmě nemá smysl zjišťovat pomocí funkcí pro práci s adresami, ale pomocí funkcí pro práci s registrem (přečíst si položku, která odpovídá příslušnému editu v UI).

tak existuje tam určitá hierarchie, třeba můžeš specifikovat metriku a rozhraní se použijí v pořadí odpovídající metrice. Pak taky záleží na nastavení routovací tabulky a cílové adrese, jestli se rozhraní vůbec použije. Ale to nemá ve výpisu zařízení smysl řešit. Já bych to klidně seřadil abecedně.

Offline pepak

  • Guru
  • *****
  • Příspěvků: 1401
  • Karma: 34
    • Pepak.net
Re:Načteni IP
« Odpověď #7 kdy: 26-07-2012, 15:05:36 »
Můj soukromý názor je, že buď mi uživatel zadá adresu zvenčí, a pak ji mohu použít celkem libovolně, nebo mi uživatel adresu nezadá, a v tom případě ji nesmím použít, i když ji někde naleznu. Protože normálně ji nepotřebuju (pro odesílání dat vůbec ne, pro přijímání dat mohu jako default vzít "0.0.0.0", tzn. všechny interfacy). Moc rozumných případů, kdy bych tu adresu potřeboval, neznám - zejména ne pro případ, že bych ji chtěl poslat někam dál, protože potom si zadělávám na problémy typu "pokud router nezná můj protokol, tak moje aplikace přes router použít nepůjde" nebo "pokud někdy někdo použije rozšíření významu adresy, se kterým jsem předem nepočítal, třeba Privacy Extensions pro IPv6, tak moje aplikace přestane fungovat".

Bobanek

  • Host
Re:Načteni IP
« Odpověď #8 kdy: 26-07-2012, 18:42:36 »
Tak jinak.
Dělam servisaka v jedne wifi.
Kdekoliv připojim notas, tak dostanu IP s DHCP nebo nastavuji IP přes program,.
Chci jen form s labelem nebo memo, kde se bude vypisovat IP,maska,brana,dns,dns1.
Jeden timer, ktery to bude v určitem intervalu vypisovat

Toto funguje ale ziskam jen IP.
http://www.delphitricks.com/source-code/internet/get_your_own_ip_address.html

Timto bych třeba co 5 vteřin zjištoval tu IP.
Kdyby se změnila, tak by se ostatni data dali načist přes IPconfig -all
Umim však v delphi vysledek uložit na HD do souboru a pak načist do TStringList a zpracovat.
Zda se mi však prasarna to furt ukladat na HD tak hledam jiny zpusob.
Na tom foru poradna net probiraji DosCommand ale nedaři se ho přidat do delphi XE2  :-X

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 2260
  • Karma: 100
    • Verze Delphi: D5,D2007, DXE, DXE2 + 2 poslední (Tokyo)
    • O Delphi v češtině
Re:Načteni IP
« Odpověď #9 kdy: 27-07-2012, 06:19:45 »
Jen pro úplnost
http://theroadtodelphi.wordpress.com/2011/10/30/wmi-tasks-using-delphi-%E2%80%93-networking/

Jinak výsledek volání např. IPconfig - all se dá zjištovat i bez ukládání na disk. Pokud ti jde o tohle tak  treba
http://www.delphidabbler.com/tips/61
Embarcadero MVP - Czech republic

Bobanek

  • Host
Re:Načteni IP
« Odpověď #10 kdy: 27-07-2012, 08:18:15 »
Jen pro úplnost
http://theroadtodelphi.wordpress.com/2011/10/30/wmi-tasks-using-delphi-%E2%80%93-networking/

Tam je jen "How do I determine the IP address(es) of a computer"
IP umiy jistit ale ten ybztek ne.

Jinak výsledek volání např. IPconfig - all se dá zjištovat i bez ukládání na disk. Pokud ti jde o tohle tak  treba
http://www.delphidabbler.com/tips/61

O tom jsem tu take psal.
Trapim se s tym už par dni.
Nevim jak tuto componentu dostat do delphi XE2
Kdyby někdo poradil.
mam 2 soubory  DosCommand.pas,DosCommand.dcr

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2482
  • Karma: 131
    • Verze Delphi: D2007, XE3, DX10
Re:Načteni IP
« Odpověď #11 kdy: 27-07-2012, 09:57:58 »
Jinak výsledek volání např. IPconfig - all se dá zjištovat i bez ukládání na disk. Pokud ti jde o tohle tak  treba
http://www.delphidabbler.com/tips/61

O tom jsem tu take psal.
Trapim se s tym už par dni.
Nevim jak tuto componentu dostat do delphi XE2
Kdyby někdo poradil.
mam 2 soubory  DosCommand.pas,DosCommand.dcr

A ten kod, na ktery ti Radek poslal, odkaz ti nefunguje?

Bobanek

  • Host
Re:Načteni IP
« Odpověď #12 kdy: 28-07-2012, 06:45:26 »
Funguje.
Moooc dik.
Jen jsem na to kouk a když jsem nahoře viděl DOScommand, tak jsem si myslel že na to bubu potřebovat tu komponentu DOScommand.

Ještě dotaz.
Da se nějak nastavit česka diaktrika.
V bataku to jde

Chcp | Find "852">Nul
if "%ErrorLevel%"=="1" Chcp 852

Offline Jan Fiala

  • Příspěvků: 49
  • Karma: 0
    • PSPad editor
Re:Načteni IP
« Odpověď #13 kdy: 28-07-2012, 08:46:36 »
Nepotrebujes nastavovat ceskou diakritiku, potrebujes si vysledek prekonvertovat pred zobrazenim z OEM do ANSI.

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 2260
  • Karma: 100
    • Verze Delphi: D5,D2007, DXE, DXE2 + 2 poslední (Tokyo)
    • O Delphi v češtině
Re:Načteni IP
« Odpověď #14 kdy: 28-07-2012, 09:13:54 »
Muzes pouzit funkci OemToAnsi

Kód: Delphi [Vybrat]
  1. if Result <> '' then
  2.   OemToAnsi(Result[1],Result[1]) ;
  3.  


update: Result ale musi byt AnsiString a ne string
« Poslední změna: 28-07-2012, 09:30:22 od Radek Červinka »
Embarcadero MVP - Czech republic

Bobanek

  • Host
Re:Načteni IP
« Odpověď #15 kdy: 28-07-2012, 13:05:34 »
A je tu zas problem s delphi XE2  :-\

OemToAnsi(Result[1],Result[1]) ;

[DCC Warning] Unit1.pas(69): W1057 Implicit string cast from 'AnsiChar' to 'string'
[DCC Error] Unit1.pas(72): E2010 Incompatible types: 'PAnsiChar' and 'Char'