No WIN9X, se a rede dial-up estiver instalada, haverá duas bibliotecas de gerenciamento de rede dial-up, RasApi32.DLL e RasApi16.DLL, no diretório do sistema Sistema do sistema WINDOWS. Podemos usar as funções da série RAS nelas. obter e configurar conexões dial-up de rede. Claro, você pode obter o endereço IP dinâmico da conexão dial-up. No arquivo de ajuda do Delphi, há descrições detalhadas das funções RAS relacionadas.
---- 1. Primeiro explique algumas constantes de dados e estruturas de dados a serem usadas.
constRAS_MaxDeviceType = 16; //Comprimento do nome do tipo de dispositivo RAS_MaxEntryName = 256; //Comprimento máximo do nome da conexão RAS_MaxDeviceName = 128; //Dial-up; Tipo de protocolo de conexão, este valor indica o tipo de conexão PPPHRASCONN = DWord;//Tipo de identificador de conexão dial-up RASCONN = registro//Manuseio e configuração de informações da conexão dial-up ativa dwSize: DWORD;//O tamanho da memória ocupada por esta estrutura (Bytes), geralmente definido como SizeOf( RASCONN) hrasconn: HRASCONN ;//O identificador da conexão ativa szEntryName: array[0..RAS_MaxEntryName] of char; //O nome da conexão ativa szDeviceType: array[0..RAS_MaxDeviceType] of char;//O tipo de dispositivo usado para conexões ativas szDeviceName : array[0..RAS_MaxDeviceName] of char;//O nome do dispositivo usado para conexões ativas end;TRASPPPIP = record//Discagem ativa up Informações de endereço IP dinâmico conectado dwSize: DWORD;//O tamanho da memória ocupada por esta estrutura (Bytes), geralmente definido como SizeOf(TRASPPPIP) dwError: DWORD;//Identificador do tipo de erro szIpAddress: array[0..RAS_MaxIpAddress] of char;//Endereço IP do fim da conexão dial-up ativa;
---- 2. A seguir explicaremos as duas funções RAS a serem utilizadas.
//Obter informações sobre todas as conexões dial-up ativas (manipulador de conexão e informações de configuração) function RasEnumConnections( var lPRasconn : RASCONN ; // Recebe o ponteiro do buffer de conexões ativas var lpcb: DWORD; // Tamanho do buffer var lpcConnections : DWORD // número real de conexões ativas): DWORD; stdcall;função RasEnumConnections;nome externo 'Rasapi32.dll' 'RasEnumConnectionsA';//Obtém as informações de IP dinâmico da função de conexão dial-up ativa especificada RasGetProjectionInfo(hrasconn: HRasConn;//Especifica o identificador da conexão ativa rasprojection: DWORD;//Tipo de conexão RAS var lpprojection: TRASPPPIP;/ /Receber informações de IP dinâmico Buffer var lpcb: DWord //receber tamanho do buffer): DWORD;stdcall;função nome externo 'Rasapi32.dll' 'RasGetProjectionInfoA';
Quando o valor de retorno dessas duas funções é 0, indica execução bem-sucedida e diferente de zero indica um código de erro.
---- 3. A seguir, discutiremos como usar as duas funções RAS acima para obter o endereço IP dinâmico da conexão dial-up.
---- Primeiro, use a função RasEnumConnections para listar as informações das conexões dial-up ativas estabelecidas, incluindo o nome da conexão, identificador de conexão, tipo de dispositivo de conexão e nome do dispositivo, em seguida, use a função RasGetProjectionInfo para obter uma estrutura TRASPPPIP correspondente; a conexão com base no identificador de conexão, que inclui um atributo de membro szIpAddress, que é o endereço IP dinâmico. Para obter detalhes, consulte os seguintes fragmentos de programa e informações de anotação.
procedimento TForm1.Button1Click(Sender: TObject);const MaxConnections = 10;//Suponha que existam até 10 conexões dial-up ativas var connection: array[0..MaxConnections-1] of RASCONN; array longSize: dword; intAvailabelConnections : dword; //O número real de conexões dial-up ativas intIndex : integer; dwResult : DWORD; dwSize : DWORD; RASpppIP : TRASPPPIP;//Informações de endereço IP dinâmico de conexões dial-up ativas iniciam conexões[ 0 ].dwSize := sizeof(RASCONN); //Tamanho do buffer para recebimento de conexões ativas intAvailabelConnections := 0; //Obter informações sobre todas as conexões dial-up ativas (manipulador de conexão e informações de configuração) dwResult := RasEnumConnections( connection[ 0 ], longSize,intAvailabelConnections ); inttostr (dwResult)) else start memo1.lines.add( 'Existem conexões ativas existentes' + IntToStr( intAvailabelConnections ) + 'one');//Exibe as informações de todas as conexões dial-up ativas (informações de configuração e endereço IP dinâmico) para intIndex := 0 to intAvailabelConnections - 1 do start //Exibe as informações de configuração de uma discagem ativa up conexão strTemp: = 'Nome da conexão:' + StrPAS( conexões[ intIndex ].szEntryName ) + ', Tipo de dispositivo: ' + StrPAS( conexões[ intIndex ].szEntryName ) + ', Tipo de dispositivo: ' + StrPAS( conexões[ intIndex ].szEntryName ) ].szDeviceType ) + ', nome do dispositivo: ' + StrPAS( connection[ intIndex ].szDeviceName ); memo1.lines.add( strTemp ); RASpppIP); ].hRasConn,RASP_PppIp,RasPPPIP,dwSize);//Obter endereço IP dinâmico se 0 < > dwResult then memo1.lines.add('Error:' + inttostr( dwResult )) else memo1.lines.add( 'Endereço dinâmico: ' + StrPas(RASpppIP.szIPAddress)); fim; fim;