Cum se obține adresa IP a calculatorului

(pentru Dialup) Te rog, o bucată de cod. Este foarte necesar! Am încercat componentele, dar acest lucru a dus la programul meu agățat la fiecare 3 minute. - (

var
# 032; WSAData. TWSAData;
# 032; p. PHostEnt;
Numele. array [0 .. $ FF] din Char;

WSAStartup ($ 0101, WSAData);
# 032; # 032; GetHostName (nume, $ FF);
# 032; # 032; p: = GetHostByName (nume);
# 032; # 032; ShowMessage ( "IP-ul tau este.", Inet_ntoa (PInAddr (p.h_addr_list ^) ^));
# 032; # 032; WSACleanup;


funcția LocalIP: șir;
tip
TaPInAddr = array [0..10] din PInAddr;
PaPInAddr = ^ TaPInAddr;
var
phe: PHostEnt;
pptr: PaPInAddr;
Tampon: matrice [0..63] de char;
I: Integer;
GInitData: TWSADATA;
începe
WSAStartup ($ 101, GInitData);
Rezultat: = "";
GetHostName (Buffer, SizeOf (Buffer));
phe: = GetHostByName (tampon);
dacă phe = nil apoi Exit;
pptr: = PaPInAddr (Phe ^ .h_addr_list);
I: = 0;
în timp ce pptr ^ [I] <> nil nu
# 032; # 032; # 032; începe
# 032; # 032; # 032; rezultat: = StrPas (inet_ntoa (pptr ^ [I] ^));
# 032; # 032; # 032; Inc (I);
# 032; # 032; # 032; se încheie;
WSACleanup;
se încheie;

Mulțumesc, bineînțeles.
Dar nici unul nici celălalt nu funcționează - ce folosește cum să scrie?
Și primul exemplu pe care nu l-am înțeles deloc este funcția sau ce? De ce este Var, începe "și cu capătul" ohm - nu?

Și în Faq de ce, de asemenea, ceva de genul asta scriu.
Am crezut că era o întrebare simplă.

Ei bine, orice poate răspunde pro.
Vă mulțumim cu toții în avans!

Da. Nu mă așteptam. Și așa că coboară?
Codul este trimis către orice procedură sau funcție:


var
WSAData. TWSAData;
p. PHostEnt;
Nume. array [0 .. $ FF] din Char;
începe
WSAStartup ($ 0101, WSAData);
# 032; GetHostName (nume, $ FF);
# 032; p: = GetHostByName (nume);
# 032; ShowMessage ("IP-ul dvs. este.", Inet_ntoa (PInAddr (p.h_addr_list ^) ^));
# 032; WSACleanup;
se încheie;

Ei bine, evident, în aplicații trebuie să adăugați Winsock :)))))) Ei bine, dați. ))))) La perepil de Anul Nou dacă.
Aș fi vrut să trec prin forum, există multe astfel de întrebări.
Ambele exemple funcționează bine pentru mine și nu este pentru mine să vă dau codul modulului terminat.

Am încercat al doilea exemplu, a funcționat, dar programul încă mai funcționează. În măsura în care înțeleg, furnizorul meu este vinovat de acest lucru, dar cum pot obține acest lucru. La urma urmei, am crezut că programul nu a trebuit să trimită o solicitare furnizorului, cum ar fi: "Spuneți-mi, vă rog, ce IP am eu?" Aceasta și calculatorul ar trebui salvate așa cum este.

Și poate acolo undeva Application.ProcessMessages vpindyurit?

Și în detrimentul utilizărilor, îmi pare rău, nu știam. Am contactat aplicațiile pentru Internet pentru prima dată, astfel încât această densitate se dovedește.

Voi încerca un nou exemplu acum.

Un nou exemplu:
Am inserat în procedură. Primesc:
[Error] manageru.pas (176): Prea mulți parametri actuali


Curățesc ShowMessage. pe.
form1.currentip: = ipinet_ntoa (PInAddr (p.h_addr_list ^) ^);

Primesc:
[Error] manageru.pas (165): Identificator nedeclarat: "ipinet_ntoa"

Winsock în scopuri de utilizare.
Ce fac greșit?
(Delphi5)

A existat o astfel de idee:

Este necesar să se facă al doilea exe, care se va ocupa numai de urmărirea IP. Și când schimbăm IP, voi trimite un mesaj la programul meu care conține un IP nou. Apoi închideți
nu va fi programul principal, ci numai monitorul IP și utilizatorul nu o va observa.

Dar asta este doar modul de implementare a acestui mesaj.
Dacă cineva știe, ajutor. Foarte mult vă întreb!

Recent, oamenii au căutat și IP. În căutarea a fost tot ceea ce era necesar.


utilizări
Windows, SysUtils;
const
RAS_MaxIpAddress = 15;
RAS_MaxDeviceType = 16;
RAS_MaxEntryName = 256;
RAS_MaxDeviceName = 128;

tip
TRASPPPIP = înregistrare
dwSize. DWORD;
dwError. DWORD;
szIpAddress. array [0..RAS_MaxIpAddress] din char;
se încheie;

THRASCONN = Thandle;
TRASCONN = înregistrare în ambalaj
dwSize. DWORD;
hRasConn. THRASCONN;
szEntryName. array [0..RAS_MaxEntryName] din char;

szDeviceType. array [0..RAS_MaxDeviceType] de char;
szDeviceName. array [0..RAS_MaxDeviceName] din char;

szPadding. array [0..0] din Char;
se încheie;

funcție RasGetIPAddress: șir;
var
RASConns. TRasConn;
dwSize. DWORD;
dwCount. DWORD;
RASpppIP. TRASPPPIP;
începe
Rezultat: = "";
RASConns.dwSize: = DimensiuneOf (TRASConn);
RASpppIP.dwSize: = DimensiuneaOf (RASpppIP);
dwSize: = DimensiuneOf (RASConns);
dacă RASEnumConnectionsA (@RASConns, @dwSize, @dwCount) = 0 atunci începe
dacă dwCount> 0 începe apoi
dwSize: = DimensiuneOf (RASpppIP);
RASpppIP.dwSize: = DimensiuneaOf (RASpppIP);
dacă RASGetProjectionInfoA (RASConns.hRasConn,
RASP_PppIp,
@RasPPPIP,
@dwSize) = 0 atunci
Rezultat: = StrPas (RASpppIP.szIPAddress);
se încheie;
se încheie;
se încheie;

la Red_Alert:
Mulțumesc! Seara, voi încerca să scriu rezultatele.
Și totuși, poate cineva să știe despre exe-shniki?

Vă mulțumim din nou tuturor!

Deci, cineva îmi poate explica de ce aproape toate exemplele trimise la mine nu funcționează? Poate că nu am Delphi deloc (Delphi5)?

Lucrezi apoi?
Sau nu înțeleg ceva?

Ce fac greșit?
Pliz, Ajutor!

la Red_Alert:
[Error] Unit2.pas (43): Identificator nedeclarat: "RASEnumConnectionsA"

Ei bine, eu chiar nu stiu ce sa va spun. Primul exemplu functioneaza foarte bine pentru mine si a trecut mult timp. Și a pus programul pe care, pe lângă multe lucruri pe care le face, nu a fost primit nici un singur lucru. asta este ceea ce sfătuiți.

Z (07.01.02 22:57)
Judecând după diagnostic, nu este ceea ce faceți, nu aveți un modul în care este înregistrat "RASEnumConnectionsA" sau este posibil să nu existe deloc.