Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Čteni IP s adapteru (Delphi)

Dobry den.
Potřebují v mem programu vypsat IP adresu,masku,branu a DNS připojeneho adapteru.
Pohrála jsem si tady s tímto zdrojakem a obrátila ho.

http://delphi.cjcsoft.net/viewthread.php?tid=43310

Pokud je IP necvakaná ručně tak mi to funguje.
Pokud je adapter nastaven pro získání IP s DHCP tak to IP nenačte.
Mužů mít v mem zdrojaku něco špatně nebo to fakt neumí vyčíst IP získanou s DHCP.

Popřipadě poradite nějaky jiny zpusob jak tu IP ziskat.

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
Tak jsem přečetla to co psal Snoop a jsem si jista že to určitě nedám. Teda jsem se rozhodla pro tu… nový
Marcelka.S 01.06.2012 18:20
Marcelka.S
K tomu nepotrebujes zadnou komponentu Spust si: uses ShellApi; procedure xxxxx var s: AnsiString; s… nový
Jan Fiala 02.06.2012 09:12
Jan Fiala
31 s := ChangeFileExt(Application.ExeName, '.LOG'); 32 ShellExecute(0, 'C:\Windows\System32\IPConfig… nový
Marcelka.S 07.06.2012 07:48
Marcelka.S
Tiež sa s podobným trápim "v mŕtvom jazyku"... Podarilo sa mi niečo narýchlo "zosmoliť". Nájde sa ni… nový
pme 01.06.2012 20:48
pme
nerozumiem celkom na co sa pytas, ale u mna to vypise tiez prvy adapter, co je wifina. Win 7 Pro nový
nl12345... 01.06.2012 23:31
nl12345...
A nevypisuje to nahodou ten adapter, ktery je pravě aktivi. Prozrad prosim jak tu komponentu dostat… nový
Marcelka.S 02.06.2012 05:54
Marcelka.S
Tu komponentu nemusis dostavat do Delphi. Muzes si ji za behu vytvorit. Pokud ji chces nainstalovat… nový
Jan Fiala 02.06.2012 09:17
Jan Fiala
No tak jsem se až včera k tomu dostala a nějak nevím jak na to. Component - Install Component a v pr… nový
Marcelka.S 05.06.2012 05:43
Marcelka.S
DosCommand neudela nic jineho nez spusteni IPCOnfig a odchyceni vyberu. Nebudes mit jednodussi, kdyz… nový
Jan Fiala 05.06.2012 05:57
Jan Fiala
Nenajde se tu nějaky profik, ktery vysvětli ubohe blondyně, jak přidat tu komponentu do XE2 nový
Marcelka.S 06.06.2012 18:30
Marcelka.S
"Úbohá blondýno"...:-) Netráp sa ťažkými API funkciami alebo zachytávaním výstupu príkazového riadku… nový
pme 06.06.2012 21:59
pme
A tohle mela jako odpoved uz nahore, i vcetne tech knihoven :-( Jen to nebylo takto takto zabalene s… nový
Jan Fiala 07.06.2012 06:43
Jan Fiala
Děkují moc chrabrý zachránče :)) Vyzkoušeno a funguje. Stejnak by mně však zajímalo jak přidat tu k… nový
Marcelka.S 07.06.2012 06:12
Marcelka.S
Dobry den. Pan Jan Fiala tu dal zdrojaček. Marně se to snažim rozchodit v XE2. Rad bych to použil ne… nový
Borisek 30.06.2012 08:19
Borisek
A kde ti to konkretne hlasi problem? nový
Jan Fiala 30.06.2012 10:20
Jan Fiala
To same co psala nahoře Marcelka. [DCC Warning] Unit1.pas(32): W1044 Suspicious typecast of string… nový
Borisek 30.06.2012 10:49
Borisek
PAnsiChar() nahrad za PWideChar() nový
Jan Fiala 30.06.2012 12:02
Jan Fiala
Ještě posledni [DCC Error] Unit1.pas(32): E2010 Incompatible types: 'PWideChar' and 'Integer' nový
Borisek 30.06.2012 14:44
Borisek
Zkontroluj si parametry funkce podle napovedy s tim, co tam posilas. Zkus to takto: ShellExecute(0,… nový
Jan Fiala 30.06.2012 15:42
Jan Fiala
Dobrý den. Nějak nemohu pohnout s tým co tu dal pan Jan Fiala. var s: String; sl: TStringList; beg… poslední
Martin.Ma 12.12.2013 18:08
Martin.Ma

Tak jsem přečetla to co psal Snoop a jsem si jista že to určitě nedám.
Teda jsem se rozhodla pro tu 2 variantu
Zavolat IPConfig a vyčíst z něj informace.
To bych mohla zvladnout.
Neproradí někdo jak přidat do delphi komponentu doscommand.
Máme ve škole ve třidách vice verzi Delphi ale nejraději bych to rozchodila na XE2.
Prý v 2 ročníku pojedeme jen na nich , a ja budu o krok dopředu.
Už se těším :-/.

K tomu nepotrebujes zadnou komponentu
Spust si:

uses
 ShellApi;

procedure xxxxx
var
  s: AnsiString;
  sl: TStringList;
begin  
  s := ChangeFileExt(Application.ExeName, '.LOG');
  ShellExecute(0, 'C:\Windows\System32\IPConfig.exe', PAnsiChar('>'+s), nil, SW_Hide);
  Sleep(200);
  sl := TStringList.Create;
  sl.LoadFromFile(s);
  { tady si to zpracuj, pripadne to primo zobraz treba v Memo: Memo.Lines.LoadFromFile(s) }
  ...
  sl.Free;
end;

Samozrejme ciste je zjistit systemovy adresar pomoci napr. SHGetSpecialFolderLocation(), ale pro skolni priklad by to melo stacit

31  s := ChangeFileExt(Application.ExeName, '.LOG');
32  ShellExecute(0, 'C:\Windows\System32\IPConfig.exe', PAnsiChar('>'+s), nil, SW_Hide);
33  Sleep(200);
34  sl := TStringList.Create;
35  sl.LoadFromFile(s);
[DCC Warning] Unit1.pas(31): W1058 Implicit string cast with potential data loss from 'string' to 'AnsiString'
[DCC Error] Unit1.pas(32): E2010 Incompatible types: 'PWideChar' and 'PAnsiChar'
[DCC Error] Unit1.pas(32): E2010 Incompatible types: 'PWideChar' and 'Integer'
[DCC Warning] Unit1.pas(35): W1057 Implicit string cast from 'AnsiString' to 'string'

Tu 31 jsem pochopila s: String a ne AnsiString takže 31 a 35 vyřešen,zbyvji 2 chyby na řadku 32
Jinak bych chtěla i vám poděkovat za pomoc a trapení se mnou.
Jsem vděčna každemu kdo pomuže a poradí.

Tiež sa s podobným trápim "v mŕtvom jazyku"... Podarilo sa mi niečo narýchlo "zosmoliť".
Nájde sa niekto kto vyskúša?

Mne to síce funguje, ale mám pocit, že systémový ipconfig vypisuje všetky adaptéry (Tunel adapter, pseudo interface apod.), v nejakom poradí...
V Delphi som zistil, že mám na PC 4 adaptéry podľa typu:
0. Ethernet
1. Loopback
2. Tunnel
3. Tunnel
Keďže u mňa je prvý Ethernet adaptér - výpis je správny. Môže niekto potvrdiť,vyvrátiť? Treba testovať, prechádzať všetky adaptéry?

App -exe je v prílohe. Ď.

Edit: zabudol som moje PC - Win 7-64bit, LAN kábel...

Tu komponentu nemusis dostavat do Delphi. Muzes si ji za behu vytvorit.
Pokud ji chces nainstalovat do Delphi, tak v menu Component / Install Component si vyber unitu, vysledny balicek (uzivatelsky) a nech Delphi kompoenntu nainstalovat.

Pokud to v D XE zmenili a tato moznost tam neni, pak musis editovat uzivatelsky balicek, pripadne vytvorit novy Package, do nej pridat unitu DosCommand, balicek oznacit jako runtime i designtime a prekompilovat.

No tak jsem se až včera k tomu dostala a nějak nevím jak na to.
Component - Install Component a v prvním okně unit file name vyberu DosCommand.pas a nechám Instal existing package.
Next a jsem v ????
Našla jsem na netu tohle compinstall.html
V kolonce Search Patch mam
$(BDSLIB)\$(Platform)\release;$(BDSUSERDIR)\Import s;$(BDS)\Imports;$(BDSCOMMONDIR)\Dcp;$(BDS)\includ e;C:\Program Files\FastReports\LibD16;$(BDS)\RaveReports\Lib;C: \Program Files\Raize\CS5\Lib\RS-XE2\Win32
Kde najdu baličky (Package name) do kterych to mohu strčit.
Ja hledala ten baliček co je použit v tom navodu a mam ho c:\Program Files\Embarcadero\RAD Studio\9.0\lib\win32\release\dclusr.dpk

Zajimalo by mně i jak vytvořit tu komponentu za běhu.
Mame ve škole užasneho učitele, ktery na každou otazku, ktera je mimo probiranou osnovu da jasnou odpověd.
Kdo si počka,ten se dočka :-/
I s instalovaním te komponenty mně poslal do haje.

DosCommand neudela nic jineho nez spusteni IPCOnfig a odchyceni vyberu.
Nebudes mit jednodussi, kdyz to udelas tak, ze vysledek ulozis do souboru a ten zpracujes, jak jsem popisoval vys?

Pokud chces komponentu vytvaret za behu, vydrz, vecer to vyzkousim a napisu. Krome vytvoreni bude treba napsat i obsluhu udalosti prave pro odchyceni vystupu a z hlavy nevim, jake udalosti DosCommand ma ;-)

"Úbohá blondýno"...:-) Netráp sa ťažkými API funkciami alebo zachytávaním výstupu príkazového riadku a pozri sa sem: www.magsys.co.uk

Stačí stiahnuť: magiphlp25.zip rozbaliť a nakopírovať do adresára, kde máš projekt iba 2 unity:
IPHelper.pas, IPHLPAPI.pas.

Vytvor si projekt, na form si pridaj napr. TMemo, TButton, použi funkciu: IpHlpAdaptersInfo(var AdpTot: integer;var AdpRows: TAdaptorRows): integer; z knižnice IPHelper.

príklad:

uses IPHelper;

procedure TForm2.Button1Click(Sender: TObject);
var
  A: TAdaptorRows;
  I: Integer;
begin
  IpHlpAdaptersInfo(I,A);
  Memo1.Lines.Add(A[0].Description);
  Memo1.Lines.Add(A[0].MacAddress);
  Memo1.Lines.Add(A[0].IPAddressList[0]);
  Memo1.Lines.Add(A[0].IPMaskList[0]);
  Memo1.Lines.Add(A[0].GatewayList[0]);
  Memo1.Lines.Add(A[0].DHCPServer[0]);
  Memo1.Lines.Add(A[0].DNSServerList[0]);
end;

Testované "narýchlo" v XE2 a funguje...

Děkují moc chrabrý zachránče :))
Vyzkoušeno a funguje.

Stejnak by mně však zajímalo jak přidat tu komponentu do XE2.
Pokud se nenaučím v Delphi přidávat komponenty, tak se moc daleko nedostanu a čekat na toho vola ve škole se mi nechce.
Kdyby jste měl někdy v budoucnu chvilku času a kouk na to.
Budu pravidelně tento topik sledovat.
Ještě jednou moooc dik.

Dobry den.
Pan Jan Fiala tu dal zdrojaček.
Marně se to snažim rozchodit v XE2.
Rad bych to použil ne pro IPConfig ale tracert.
Pujde to nějak.

uses
 ShellApi;

procedure xxxxx
var
  s: AnsiString;
  sl: TStringList;
begin  
  s := ChangeFileExt(Application.ExeName, '.LOG');
  ShellExecute(0, 'C:\Windows\System32\IPConfig.exe', PAnsiChar('>'+s), nil, SW_Hide);
  Sleep(200);
  sl := TStringList.Create;
  sl.LoadFromFile(s);
  { tady si to zpracuj, pripadne to primo zobraz treba v Memo: Memo.Lines.LoadFromFile(s) }
  ...
  sl.Free;
end;

To same co psala nahoře Marcelka.

[DCC Warning] Unit1.pas(32): W1044 Suspicious typecast of string to PAnsiChar
[DCC Error] Unit1.pas(32): E2010 Incompatible types: 'PWideChar' and 'PAnsiChar'
[DCC Error] Unit1.pas(32): E2010 Incompatible types: 'PWideChar' and 'Integer'

řadek 32 je

ShellExecute(0, 'C:\Windows\System32\IPConfig.exe', PAnsiChar('>'+s), nil, SW_Hide);

Dobrý den.
Nějak nemohu pohnout s tým co tu dal pan Jan Fiala.

var
s: String;
sl: TStringList;
begin
s := ChangeFileExt(Application.ExeName, '.LOG');
ShellExecute(0, 'Open', 'C:\Windows\System32\IPConfig.exe', PWideChar('>'+s), nil, SW_normal);
Sleep(200);
sl := TStringList.Create;
sl.LoadFromFile(s);

Ve stringu s mi to vrací cestu k souboru .LOG
Pokud jsem to pochopil tak si to uloží do toho souboru LOG výpis s IPConfig a pak načte do s.

Je to to same, když použijí toto?
ShellExecute( handle, 'open', 'cmd.exe', '/q /c ipconfig -all > C:\logs1.txt', nil ,SW_SHOWNORMAL );

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