Sous WIN9X, si l'accès réseau à distance est installé, il y aura deux bibliothèques de gestion de réseau à distance, RasApi32.DLL et RasApi16.DLL, sous le répertoire système Système du système WINDOWS. Nous pouvons y utiliser les fonctions de la série RAS pour. obtenir et configurer des connexions commutées. Bien entendu, vous pouvez obtenir l'adresse IP dynamique de la connexion commutée. Le fichier d'aide Delphi contient des descriptions détaillées des fonctions RAS associées.
---- 1. Expliquez d'abord certaines constantes de données et structures de données à utiliser.
constRAS_MaxDeviceType = 16; //Longueur du nom du type de périphérique RAS_MaxEntryName = 256; //Longueur maximale du nom de connexion RAS_MaxDeviceName = 128; //Longueur maximale du nom du périphérique RAS_MaxIpAddress = 15; //Longueur maximale de l'adresse IP Rasp_PppIp = $8021; Type de protocole de connexion, cette valeur indique le type de connexion PPPHRASCONN = DWord;//Type de handle de connexion commutée RASCONN = record//Informations de handle et de paramétrage de la connexion commutée active dwSize: DWORD;//La taille de la mémoire occupée par cette structure (Octets), généralement définie sur SizeOf( RASCONN) hrasconn : HRASCONN ;//Le handle de la connexion active szEntryName : array[0..RAS_MaxEntryName] of char; //Le nom de la connexion active szDeviceType : array[0..RAS_MaxDeviceType] of char;//Le type de périphérique utilisé pour les connexions actives szDeviceName : array[0..RAS_MaxDeviceName] of char;//Le nom de périphérique utilisé pour les connexions actives end;TRASPPPIP = record//Active Dial- up Informations sur l'adresse IP dynamique connectée dwSize: DWORD;//La taille de la mémoire occupée par cette structure (Octets), généralement définie sur SizeOf(TRASPPPIP) dwError : DWORD ;//Identificateur de type d'erreur szIpAddress : tableau[0..RAS_MaxIpAddress] de char ;//Adresse IP de la fin de la connexion d'accès à distance active ;
---- 2. Ensuite, nous expliquerons les deux fonctions RAS à utiliser.
//Obtenir des informations sur toutes les connexions commutées actives (descripteur de connexion et informations de configuration) function RasEnumConnections( var lPRasconn : RASCONN ; // Recevoir le pointeur du tampon des connexions actives var lpcb: DWORD; // Taille du tampon var lpcConnections : DWORD / /nombre réel de connexions actives) : DWORD ; stdcall ; fonction RasEnumConnections ; nom externe 'Rasapi32.dll' 'RasEnumConnectionsA';//Obtenir les informations IP dynamiques de la fonction de connexion à distance active spécifiée RasGetProjectionInfo(hrasconn: HRasConn;//Spécifier le handle de la connexion active rasprojection: DWORD;//Type de connexion RAS var lpprojection: TRASPPPIP;/ /Recevoir des informations IP dynamiques Buffer var lpcb : DWord//recevoir la taille du tampon) : DWORD;stdcall;function RasGetProjectionInfo; nom externe 'Rasapi32.dll' 'RasGetProjectionInfoA';
Lorsque la valeur de retour de ces deux fonctions est 0, cela indique une exécution réussie et une valeur différente de zéro indique un code d'erreur.
---- 3. Ensuite, nous verrons comment utiliser les deux fonctions RAS ci-dessus pour obtenir l'adresse IP dynamique de la connexion commutée.
---- Tout d'abord, utilisez la fonction RasEnumConnections pour répertorier les informations des connexions commutées actives établies, y compris le nom de la connexion, le descripteur de connexion, le type de périphérique de connexion et le nom du périphérique, puis utilisez la fonction RasGetProjectionInfo pour obtenir une structure TRASPPPIP correspondant à ; la connexion basée sur le handle de connexion, qui inclut un attribut de membre szIpAddress, qui est l'adresse IP dynamique. Pour plus de détails, veuillez consulter les fragments de programme et les informations d'annotation suivants.
procédure TForm1.Button1Click(Sender: TObject);const MaxConnections = 10;//Supposons qu'il existe jusqu'à 10 connexions d'accès à distance actives var connections: array[0..MaxConnections-1] de RASCONN //Connexion d'accès à distance; array longSize: dword; intAvailabelConnections : dword; //Le nombre réel de connexions commutées actives intIndex : integer; dwResult : DWORD; dwSize : DWORD; RASpppIP : TRASPPPIP;//Les informations sur l'adresse IP dynamique des connexions commutées actives commencent les connexions[ 0 ].dwSize := sizeof(RASCONN); / /Taille du tampon pour recevoir les connexions actives intAvailabelConnections := 0; //Obtenir des informations sur toutes les connexions d'accès à distance actives (descripteur de connexion et informations de configuration) dwResult := RasEnumConnections( connections[ 0 ], longSize,intAvailabelConnections ); if 0 < > dwResult then memo1.lines.add( 'Error:' + inttostr ( dwResult ) ) else start memo1.lines.add( 'Il existe des connexions actives existantes' + IntToStr( intAvailabelConnections ) + 'one');//Afficher les informations de toutes les connexions commutées actives (informations de configuration et adresse IP dynamique) pour intIndex := 0 à intAvailabelConnections - 1 do start//Afficher les informations de configuration d'une numérotation active- up connection strTemp : = 'Nom de la connexion :' + StrPAS( connexions[ intIndex ].szEntryName ) + ', Type de périphérique : ' + StrPAS( connexions[ intIndex ].szDeviceType ) + ', nom de l'appareil : ' + StrPAS( connections[ intIndex ].szDeviceName ); memo1.lines.add( strTemp ); //Afficher l'adresse IP dynamique d'une connexion commutée active dwSize := SizeOf( RASpppIP) ; RASpppIP.dwSize := dwSize; dwResult := RASGetProjectionInfo( connexions[ intIndex ].hRasConn,RASP_PppIp,RasPPPIP,dwSize);//Obtenir une adresse IP dynamique si 0 < > dwResult then memo1.lines.add('Error:' + inttostr( dwResult )) else memo1.lines.add( 'Adresse dynamique : ' + StrPas(RASpppIP.szIPAddress)); fin;fin;