Di bawah WIN9X, jika jaringan dial-up diinstal, akan ada dua perpustakaan manajemen jaringan dial-up, RasApi32.DLL dan RasApi16.DLL, di bawah direktori sistem Sistem sistem WINDOWS memperoleh dan mengatur koneksi dial-up. Tentu saja, Anda bisa mendapatkan alamat IP dinamis dari koneksi dial-up. Dalam file bantuan Delphi, terdapat penjelasan rinci tentang fungsi RAS terkait.
---- 1. Jelaskan terlebih dahulu beberapa konstanta data dan struktur data yang akan digunakan.
constRAS_MaxDeviceType = 16; //Panjang nama jenis perangkat RAS_MaxEntryName = 256; //Panjang nama koneksi maksimum RAS_MaxDeviceName = 128; //Panjang nama perangkat maksimum RAS_MaxIpAddress = 15; //Panjang maksimum alamat IP Rasp_PppIp = $8021; tipe koneksi Protokol, nilai ini menunjukkan tipe koneksi PPPHRASCONN = DWord;//Jenis pegangan koneksi dial-up RASCONN = catatan//Menangani dan mengatur informasi koneksi dial-up aktif dwUkuran: DWORD;//Ukuran memori yang ditempati oleh struktur ini (Bytes), umumnya diatur ke SizeOf( RASCONN) hrasconn: HRASCONN ;//Pegangan koneksi aktif szEntryName: array[0..RAS_MaxEntryName] dari char; //Nama koneksi aktif szDeviceType: array[0..RAS_MaxDeviceType] dari char;//Jenis perangkat yang digunakan untuk koneksi aktif szDeviceName : array[0..RAS_MaxDeviceName] dari char;//Nama perangkat yang digunakan untuk koneksi aktif berakhir;TRASPPPIP = record//Panggilan aktif- up Informasi alamat IP dinamis yang terhubung dwSize: DWORD;//Ukuran memori yang ditempati oleh struktur ini (Bytes), umumnya diatur ke SizeOf(TRASPPPIP) dwError: DWORD;//Pengidentifikasi tipe kesalahan szIpAddress: array[ 0..RAS_MaxIpAddress] dari char;//alamat IP ujung koneksi dial-up aktif;
---- 2. Selanjutnya akan dijelaskan kedua fungsi RAS yang akan digunakan.
//Mendapatkan informasi tentang semua koneksi dial-up yang aktif (pegangan koneksi dan informasi pengaturan) function RasEnumConnections( var lPRasconn : RASCONN ; // Menerima pointer ke buffer koneksi aktif var lpcb: DWORD; // Ukuran buffer var lpcConnections : DWORD / /jumlah aktual koneksi aktif): DWORD; stdcall;fungsi RasEnumConnections;nama 'Rasapi32.dll' eksternal 'RasEnumConnectionsA';//Dapatkan informasi IP dinamis dari fungsi koneksi dial-up aktif yang ditentukan RasGetProjectionInfo(hrasconn: HRasConn;//Tentukan pegangan koneksi aktif rasprojection: DWORD;//Jenis koneksi RAS var lpprojection: TRASPPPIP;/ /Menerima informasi IP dinamis Buffer var lpcb: DWord//menerima ukuran buffer): DWORD;stdcall;fungsi RasGetProjectionInfo; nama 'Rasapi32.dll' eksternal 'RasGetProjectionInfoA';
Jika nilai yang dikembalikan kedua fungsi ini adalah 0, ini menunjukkan eksekusi berhasil, dan bukan nol menunjukkan kode kesalahan.
---- 3. Selanjutnya kita akan membahas cara menggunakan kedua fungsi RAS di atas untuk mendapatkan alamat IP dinamis koneksi dial-up.
---- Pertama, gunakan fungsi RasEnumConnections untuk mencantumkan informasi koneksi dial-up aktif yang dibuat, termasuk nama koneksi, pegangan koneksi, jenis perangkat koneksi, dan nama perangkat; kemudian gunakan fungsi RasGetProjectionInfo untuk mendapatkan struktur TRASPPPIP yang sesuai koneksi berdasarkan pegangan koneksi. , yang mencakup atribut anggota szIpAddress, yang merupakan alamat IP dinamis. Untuk detailnya, silakan lihat fragmen program dan informasi anotasi berikut.
procedure TForm1.Button1Click(Sender: TObject);const MaxConnections = 10;//Asumsikan ada hingga 10 koneksi dial-up aktif var koneksi: array[0..MaxConnections-1] dari RASCONN; //Koneksi dial-up array longSize: dword; intAvailabelConnections : dword; //Jumlah aktual koneksi dial-up yang aktif intIndex : integer; dwHasil : DWORD; dwSize : DWORD; RASpppIP : TRASPPPIP;//informasi alamat IP dinamis dari koneksi dial-up aktif memulai koneksi[ 0 ].dwSize := sizeof(RASCONN); / /Ukuran buffer untuk menerima koneksi aktif intAvailabelConnections := 0; //Dapatkan informasi tentang semua koneksi dial-up yang aktif (pegangan koneksi dan informasi pengaturan) dwResult := RasEnumConnections( koneksi[ 0 ], longSize,intAvailabelConnections ); inttostr ( dwResult ) ) else start memo1.lines.add( 'Ada koneksi aktif' + IntToStr( intAvailabelConnections ) + 'one');//Menampilkan informasi semua koneksi dial-up yang aktif (informasi pengaturan dan alamat IP dinamis) untuk intIndex := 0 hingga intAvailabelConnections - 1 mulai//Menampilkan informasi pengaturan dial- aktif koneksi up strTemp: = 'Nama koneksi:' + StrPAS( koneksi[ intIndex ].szEntryName ) + ', Jenis perangkat: ' + StrPAS( koneksi[ intIndex ].szDeviceType ) + ', nama perangkat: ' + StrPAS( koneksi[ intIndex ].szDeviceName ); memo1.lines.add( strTemp ); //Menampilkan alamat IP dinamis dari koneksi dial-up aktif dwSize := SizeOf( RASpppIP) ; RASpppIP.dwSize := dwSize; dwResult := RASGetProjectionInfo( koneksi[ intIndex ].hRasConn,RASP_PppIp,RasPPPIP,dwSize);//Dapatkan alamat IP dinamis jika 0 < > dwResult lalu memo1.lines.add('Error:' + inttostr( dwResult )) else memo1.lines.add( 'Alamat dinamis: ' + StrPas(RASpppIP.szIPAddress)); akhir;akhir;