WIN9X에서 전화 접속 네트워킹이 설치되면 WINDOWS 시스템의 시스템 디렉터리 System 아래에 두 개의 전화 접속 네트워크 관리 라이브러리인 RasApi32.DLL과 RasApi16.DLL이 있습니다. 여기에 있는 RAS 시리즈 기능을 사용할 수 있습니다. 전화 접속 연결을 얻고 설정합니다. 물론 전화 접속 연결의 동적 IP 주소를 얻을 수 있습니다. Delphi 도움말 파일에는 관련 RAS 기능에 대한 자세한 설명이 있습니다.
---- 1. 먼저 사용할 데이터 상수와 데이터 구조에 대해 설명합니다.
constRAS_MaxDeviceType = 16; //장치 유형 이름 길이 RAS_MaxEntryName = 256; //최대 장치 이름 길이 RAS_MaxIpAddress = 15; //전화 접속 연결 프로토콜 유형, 이 값은 PPP 연결 유형을 나타냅니다HRASCONN = DWord;//전화 접속 연결 핸들 유형 RASCONN = 기록//활성 전화 접속 연결의 핸들 및 설정 정보 dwSize: DWORD;//이 구조가 차지하는 메모리 크기(바이트), 일반적으로 SizeOf( RASCONN) hrasconn: HRASCONN ;//활성 연결의 핸들 szEntryName: array[0..RAS_MaxEntryName] of char; //활성 연결의 이름 szDeviceType: array[0..RAS_MaxDeviceType] of char;//활성 연결에 사용되는 장치 유형 szDeviceName : array[0..RAS_MaxDeviceName] of char;//활성 연결에 사용되는 장치 이름 end;TRASPPPIP = 기록//활성 다이얼- up 연결된 동적 IP 주소 정보 dwSize: DWORD;//이 구조가 차지하는 메모리 크기(바이트), 일반적으로 SizeOf(TRASPPPIP)로 설정됩니다. dwError: DWORD;//오류 유형 식별자 szIpAddress: char의 배열[0..RAS_MaxIpAddress];//활성 전화 접속 연결의 IP 주소 end;
---- 2. 다음으로 사용되는 두 가지 RAS 기능에 대해 설명하겠습니다.
//모든 활성 전화 접속 연결에 대한 정보 가져오기(연결 핸들 및 설정 정보) function RasEnumConnections( var lPRasconn : RASCONN ; // 활성 연결의 버퍼 포인터 수신 var lpcb: DWORD; // 버퍼 크기 var lpcConnections : DWORD / /활성 연결의 실제 수): DWORD;function RasEnumConnections;외부 'Rasapi32.dll' 이름 'RasEnumConnectionsA';//지정된 활성 전화 접속 연결 함수의 동적 IP 정보 가져오기 RasGetProjectionInfo(hrasconn: HRasConn;//활성 연결 핸들 지정 rasprojection: DWORD;//RAS 연결 유형 var lpprojection: TRASPPPIP;/ /동적 IP 정보 수신 Buffer var lpcb: DWord//수신 버퍼 크기): DWORD;stdcall;function RasGetProjectionInfo;외부 'Rasapi32.dll' 이름 'RasGetProjectionInfoA';
이 두 함수의 반환 값이 0이면 실행 성공을 나타내고 0이 아닌 경우 오류 코드를 나타냅니다.
---- 3. 다음으로 위의 두 가지 RAS 기능을 사용하여 전화 접속 연결의 동적 IP 주소를 얻는 방법에 대해 설명합니다.
---- 먼저 RasEnumConnections 함수를 사용하여 연결 이름, 연결 핸들, 연결 장치 유형 및 장치 이름을 포함하여 설정된 활성 전화 접속 연결 정보를 나열한 다음 RasGetProjectionInfo 함수를 사용하여 해당하는 TRASPPPIP 구조를 얻습니다. 동적 IP 주소인 szIpAddress 멤버 속성을 포함하는 연결 핸들을 기반으로 한 연결입니다. 자세한 내용은 다음 프로그램 조각 및 주석 정보를 참조하세요.
절차 TForm1.Button1Click(Sender: TObject);const MaxConnections = 10;//최대 10개의 활성 전화 접속 연결이 있다고 가정합니다. varconnections: array[0..MaxConnections-1] of RASCONN; array longSize: dword; intAvailabelConnections : dword; //활성 전화 접속 연결 수 intIndex : strTemp : string; dwResult : DWORD; dwSize : DWORD; RASpppIP : TRASPPPIP;//활성 전화 접속 연결의 동적 IP 주소 정보 연결 시작[ 0 ].dwSize := sizeof(RASCONN); longSize := MaxConnections *connections[ 0 ].dwSize; / /활성 연결을 수신하기 위한 버퍼 크기 intAvailabelConnections := 0; //모든 활성 전화 접속 연결에 대한 정보 가져오기(연결 핸들 및 설정 정보) dwResult := RasEnumConnections(connections[ 0 ], longSize,intAvailabelConnections ); if 0 < > dwResult then memo1.lines.add( 'Error:' + inttostr ( dwResult ) ) else start memo1.lines.add( '기존 활성 연결이 있습니다.' + IntToStr( intAvailabelConnections ) + 'one');//intIndex에 대한 모든 활성 전화 접속 연결 정보(설정 정보 및 동적 IP 주소) 표시:= 0 to intAvailabelConnections - 1 do start//활성 전화 접속의 설정 정보 표시- up 연결 strTemp: = '연결 이름:' + StrPAS( 연결[ intIndex ].szEntryName ) + ', 장치 유형: ' + StrPAS( 연결[ intIndex ].szDeviceType ) + ', 장치 이름: ' + StrPAS( Connections[ intIndex ].szDeviceName ); memo1.lines.add( strTemp ) //활성 전화 접속 연결의 동적 IP 주소 표시 dwSize := SizeOf( RASpppIP) ; RASpppIP.dwSize := dwSize; dwResult := RASGetProjectionInfo( 연결[ intIndex ].hRasConn,RASP_PppIp,RasPPPIP,dwSize);//0 < > dwResult이면 동적 IP 주소를 가져옵니다. then memo1.lines.add('Error:' + inttostr( dwResult )) else memo1.lines.add( '동적 주소: ' + StrPas(RASpppIP.szIPAddress)); 끝;