WIN9X では、ダイヤルアップ ネットワークがインストールされている場合、WINDOWS システムのシステム ディレクトリ System の下に 2 つのダイヤルアップ ネットワーク管理ライブラリ RasApi32.DLL と RasApi16.DLL が存在し、その中の RAS シリーズの機能を使用できます。ネットワーク情報を取得して設定します。もちろん、ダイヤルアップ接続の動的 IP アドレスを取得することもできます。 Delphi ヘルプ ファイルには、関連する RAS 関数の詳細な説明が記載されています。
---- 1. まず、使用するデータ定数とデータ構造について説明します。
constRAS_MaxDeviceType = 16; //デバイス タイプ名の長さ RAS_MaxEntryName = 256; //デバイス名の最大長 RAS_MaxIpAddress = 15; //ダイヤルアップ接続プロトコル タイプ。この値は PPP 接続タイプを示します。HRASCONN = DWord;//ダイヤルアップ接続ハンドルのタイプ RASCONN = Record//アクティブなダイヤルアップ接続のハンドルと設定情報 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 = Record//アクティブなダイヤル- up 接続された動的 IP アドレス情報 dwSize: DWORD;//この構造体が占有するメモリのサイズ (バイト)、通常は SizeOf(TRASPPPIP) に設定されますdwError: DWORD;//エラー タイプ識別子 szIpAddress: array[0..RAS_MaxIpAddress] of char;//アクティブなダイヤルアップ接続端の IP アドレス;
---- 2. 次に、使用する2つのRAS機能について説明します。
//アクティブなすべてのダイヤルアップ接続に関する情報 (接続ハンドルと設定情報) を取得します function RasEnumConnections( var lPRasconn : RASCONN ; // アクティブな接続のバッファのポインタを受信します var lpcb: DWORD; // バッファ サイズ var lpcConnections : DWORD / /アクティブな接続の実際の数): DWORD; 関数 RasEnumConnections; 外部 'Rasapi32.dll' 名'RasEnumConnectionsA';//指定されたアクティブなダイヤルアップ接続の動的 IP 情報を取得します function RasGetProjectionInfo(hrasconn: HRasConn;//アクティブな接続のハンドルを指定します rasprojection: DWORD;//RAS 接続タイプ var lpprojection: TRASPPPIP;/ /動的IP情報の受信 Buffer var lpcb: DWord//受信バッファ サイズ): DWORD;stdcall;function RasGetProjectionInfo; 外部 'Rasapi32.dll' 名 'RasGetProjectionInfoA';
これら 2 つの関数の戻り値が 0 の場合は、実行が成功したことを示し、0 以外の場合はエラー コードを示します。
---- 3. 次に、上記の 2 つの RAS 機能を使用して、ダイヤルアップ接続の動的 IP アドレスを取得する方法について説明します。
---- まず、関数 RasEnumConnections を使用して、接続名、接続ハンドル、接続デバイスの種類、デバイス名など、確立されたアクティブなダイヤルアップ接続の情報を一覧表示します。次に、関数 RasGetProjectionInfo を使用して、それに対応する TRASPPPIP 構造体を取得します。接続ハンドルに基づく接続。これには、動的 IP アドレスであるメンバー属性 szIpAddress が含まれます。詳細については、以下のプログラム部分と注釈情報を参照してください。
procedure 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 アドレス情報 beginconnections[ 0 ].dwSize := sizeof(RASCONN) := MaxConnections *connections[ 0 ].dwSize; / /アクティブな接続を受信するためのバッファ サイズ intAvailabelConnections := 0; //アクティブなすべてのダイヤルアップ接続に関する情報 (接続ハンドルと設定情報) を取得します dwResult := RasEnumConnections(connections[ 0 ], longSize,intAvailabelConnections ); if 0 < > dwResult then memo1.lines.add( 'Error:' + inttostr ( dwResult ) ) else begin memo1.lines.add( '既存のアクティブな接続があります' + IntToStr( intAvailabelConnections ) + 'one');//すべてのアクティブなダイヤルアップ接続の情報 (設定情報と動的 IP アドレス) を表示します。 for intIndex := 0 to intAvailabelConnections - 1 do begin//アクティブなダイヤルアップ接続の設定情報を表示します。アップ接続 strTemp: = '接続名:' + StrPAS(connections[ intIndex ].szEntryName ) + '、デバイス タイプ: ' + StrPAS(connections[ intIndex] ].szDeviceType ) + ', デバイス名: ' + StrPAS(connections[ intIndex ].szDeviceName ); memo1.lines.add( strTemp ); //アクティブなダイヤルアップ接続の動的 IP アドレスを表示します dwSize := SizeOf( RASpppIP) ; RASpppIP.dwSize := dwResult := RASGetProjectionInfo(接続[ intIndex ].hRasConn,RASP_PppIp,RasPPPIP,dwSize);//動的 IP アドレスを取得 if 0 < > dwResult then memo1.lines.add('Error:' + inttostr( dwResult )) else memo1.lines.add( '動的アドレス: ' + StrPas(RASpppIP.szIPAddress)); 終了;