Wenn unter WIN9X ein DFÜ-Netzwerk installiert ist, gibt es im Systemverzeichnis System des WINDOWS-Systems zwei DFÜ-Netzwerkverwaltungsbibliotheken, RasApi32.DLL und RasApi16.DLL. Wir können die darin enthaltenen Funktionen der RAS-Serie verwenden Abrufen und Einrichten von DFÜ-Verbindungen. Selbstverständlich können Sie die dynamische IP-Adresse der DFÜ-Verbindung erhalten. In der Delphi-Hilfedatei finden Sie detaillierte Beschreibungen der zugehörigen RAS-Funktionen.
---- 1. Erläutern Sie zunächst einige zu verwendende Datenkonstanten und Datenstrukturen.
constRAS_MaxDeviceType = 16; //Länge des Gerätetyps RAS_MaxDeviceName = 128; //Maximale Länge des Gerätenamens Rasp_PppIp = $8021; Verbindungsprotokolltyp, dieser Wert gibt den PPP-VerbindungstypHRASCONN = an DWord;//Typ des DFÜ-Verbindungshandles RASCONN = Datensatz//Handle und Einstellungsinformationen der aktiven DFÜ-Verbindung dwSize: DWORD;//Die Größe des von dieser Struktur belegten Speichers (Bytes), im Allgemeinen auf SizeOf( RASCONN) hrasconn: HRASCONN ;//Der Handle der aktiven Verbindung szEntryName: array[0..RAS_MaxEntryName] of char; //Der Name der aktiven Verbindung szDeviceType: array[0..RAS_MaxDeviceType] of char;//Der Gerätetyp, der für aktive Verbindungen verwendet wird szDeviceName : array[0..RAS_MaxDeviceName] of char;//Der Gerätename, der für aktive Verbindungen verwendet wird end;TRASPPPIP = record//Active dial- up Verbundene dynamische IP-Adressinformationen dwSize: DWORD;// Die Größe des von dieser Struktur belegten Speichers (Bytes), im Allgemeinen auf SizeOf(TRASPPPIP) eingestellt dwError: DWORD;//Fehlertyp-ID szIpAddress: array[ 0..RAS_MaxIpAddress] of char;//IP-Adresse der aktiven DFÜ-Verbindung Ende;
---- 2. Als nächstes erklären wir die beiden zu verwendenden RAS-Funktionen.
//Informationen über alle aktiven DFÜ-Verbindungen abrufen (Verbindungshandle und Einstellungsinformationen) function RasEnumConnections( var lPRasconn : RASCONN ; // Einen Zeiger auf den Puffer aktiver Verbindungen erhalten var lpcb: DWORD; // Puffergröße var lpcConnections : DWORD //tatsächliche Anzahl aktiver Verbindungen): DWORD; stdcall;function RasEnumConnections;external 'Rasapi32.dll' name 'RasEnumConnectionsA';//Erhalten Sie die dynamischen IP-Informationen der angegebenen aktiven DFÜ-Verbindungsfunktion RasGetProjectionInfo(hrasconn: HRasConn;//Geben Sie das Handle der aktiven Verbindung an rasprojection: DWORD;//RAS-Verbindungstyp var lpprojection: TRASPPPIP;/ /Dynamische IP-Informationen empfangen Puffervariable lpcb: DWord//Puffergröße empfangen): DWORD;stdcall;function RasGetProjectionInfo;externer „Rasapi32.dll“-Name „RasGetProjectionInfoA“;
Wenn der Rückgabewert dieser beiden Funktionen 0 ist, zeigt dies eine erfolgreiche Ausführung an, und ein Wert ungleich Null weist auf einen Fehlercode hin.
---- 3. Als nächstes besprechen wir, wie Sie die beiden oben genannten RAS-Funktionen verwenden, um die dynamische IP-Adresse der DFÜ-Verbindung zu erhalten.
---- Verwenden Sie zunächst die Funktion RasEnumConnections, um die Informationen der eingerichteten aktiven DFÜ-Verbindungen aufzulisten, einschließlich Verbindungsname, Verbindungshandle, Verbindungsgerätetyp und Gerätename, und verwenden Sie dann die Funktion RasGetProjectionInfo, um eine entsprechende TRASPPPIP-Struktur zu erhalten Die Verbindung basiert auf dem Verbindungshandle, das ein Mitgliedsattribut szIpAddress enthält, das die dynamische IP-Adresse ist. Einzelheiten finden Sie in den folgenden Programmfragmenten und Anmerkungsinformationen.
procedure TForm1.Button1Click(Sender: TObject);const MaxConnections = 10;//Angenommen, es gibt bis zu 10 aktive DFÜ-Verbindungen var communications: array[0..MaxConnections-1] of RASCONN; //DFÜ-Verbindung array longSize: dword; intAvailabelConnections: dword; //Die tatsächliche Anzahl der aktiven DFÜ-Verbindungen intIndex: integer; dwResult: DWORD; dwSize: DWORD; RASpppIP: TRASPPPIP;//Dynamische IP-Adressinformationen der aktiven DFÜ-Verbindungen[ 0 ].dwSize := sizeof(RASCONN); longSize := MaxConnections[ 0 ].dwSize; //Puffergröße für den Empfang aktiver Verbindungen intAvailabelConnections := 0; //Informationen über alle aktiven DFÜ-Verbindungen abrufen (Verbindungshandle und Einstellungsinformationen) dwResult := RasEnumConnections( communications[ 0 ], longSize,intAvailabelConnections ); if 0 < > dwResult then memo1.lines.add( 'Error:' + inttostr ( dwResult ) ) else begin memo1.lines.add( 'Es sind aktive Verbindungen vorhanden' + IntToStr( intAvailabelConnections ) + 'one');//Anzeige der Informationen aller aktiven DFÜ-Verbindungen (Einstellungsinformationen und dynamische IP-Adresse) für intIndex := 0 bis intAvailabelConnections - 1 do begin//Anzeige der Einstellungsinformationen einer aktiven DFÜ- up-Verbindung strTemp: = 'Verbindungsname:' + StrPAS( Verbindungen[ intIndex ].szEntryName ) + ', Gerätetyp: ' + StrPAS( Verbindungen[ intIndex .szDeviceType ) + ', Gerätename: ' + StrPAS( communications[ intIndex ].szDeviceName ); memo1.lines.add( strTemp ); //Anzeige der dynamischen IP-Adresse einer aktiven DFÜ-Verbindung dwSize := SizeOf( RASpppIP) ; RASpppIP.dwSize := dwSize; dwResult := RASGetProjectionInfo( communications[ intIndex ].hRasConn,RASP_PppIp,RasPPPIP,dwSize);//Dynamische IP-Adresse abrufen, wenn 0 < > dwResult then memo1.lines.add('Error:' + inttostr( dwResult )) else memo1.lines.add( 'Dynamische Adresse: ' + StrPas(RASpppIP.szIPAddress)); end;end;