ภายใต้ WIN9X หากติดตั้งเครือข่ายผ่านสายโทรศัพท์ จะมีไลบรารีการจัดการเครือข่ายผ่านสายโทรศัพท์สองแห่ง ได้แก่ RasApi32.DLL และ RasApi16.DLL ภายใต้ไดเร็กทอรีระบบ System ของระบบ WINDOWS เราสามารถใช้ฟังก์ชัน RAS series ในนั้นได้ รับและตั้งค่าการเชื่อมต่อผ่านสายโทรศัพท์ แน่นอน คุณสามารถรับที่อยู่ IP แบบไดนามิกของการเชื่อมต่อผ่านสายโทรศัพท์ได้ ในไฟล์วิธีใช้ Delphi มีคำอธิบายโดยละเอียดเกี่ยวกับฟังก์ชัน RAS ที่เกี่ยวข้อง
---- 1. ขั้นแรกให้อธิบายค่าคงที่ของข้อมูลและโครงสร้างข้อมูลที่จะใช้
constRAS_MaxDeviceType = 16; // ความยาวชื่ออุปกรณ์ RAS_MaxEntryName = 256; // ความยาวสูงสุดของชื่อการเชื่อมต่อ Rasp_MaxDeviceName = 128; // Dial-up ประเภทโปรโตคอลการเชื่อมต่อ ค่านี้ระบุประเภทการเชื่อมต่อ PPPHRASCONN = DWord;//ประเภทของการจัดการการเชื่อมต่อผ่านสายโทรศัพท์ RASCONN = บันทึก // จัดการและข้อมูลการตั้งค่าของการเชื่อมต่อผ่านสายโทรศัพท์ที่ใช้งาน dwSize: DWORD;//ขนาดของหน่วยความจำที่ถูกครอบครองโดยโครงสร้างนี้ (ไบต์) โดยทั่วไปจะตั้งค่าเป็น SizeOf( RASCONN) hrasconn: HRASCONN ;//หมายเลขอ้างอิงของการเชื่อมต่อที่ใช้งานอยู่ szEntryName: array[0..RAS_MaxEntryName] ของถ่าน; //ชื่อของการเชื่อมต่อที่ใช้งานอยู่ szDeviceType: array[0..RAS_MaxDeviceType] ของ char;//ประเภทอุปกรณ์ที่ใช้สำหรับการเชื่อมต่อที่ใช้งาน szDeviceName : array[0..RAS_MaxDeviceName] ของ char;//ชื่ออุปกรณ์ที่ใช้สำหรับการเชื่อมต่อที่ใช้งานอยู่สิ้นสุด;TRASPPPIP = บันทึก//สายที่ใช้งานอยู่- ข้อมูลที่อยู่ IP แบบไดนามิกที่เชื่อมต่อ dwSize: DWORD;//ขนาดของหน่วยความจำที่ถูกครอบครองโดยโครงสร้างนี้ (ไบต์) โดยทั่วไปจะตั้งค่าเป็น SizeOf(TRASPPPIP) dwError: DWORD;//ตัวระบุประเภทข้อผิดพลาด szIpAddress: อาร์เรย์ [0..RAS_MaxIpAddress] ของ char;//ที่อยู่ IP ของจุดสิ้นสุดการเชื่อมต่อผ่านสายโทรศัพท์ที่ใช้งานอยู่;
---- 2. ต่อไป เราจะอธิบายฟังก์ชัน RAS ทั้งสองฟังก์ชันที่จะใช้
//รับข้อมูลเกี่ยวกับการเชื่อมต่อแบบ dial-up ที่ใช้งานอยู่ทั้งหมด (หมายเลขอ้างอิงการเชื่อมต่อและข้อมูลการตั้งค่า) ฟังก์ชั่น RasEnumConnections( var lPRasconn : RASCONN ; // รับตัวชี้ของบัฟเฟอร์ของการเชื่อมต่อที่ใช้งานอยู่ var lpcb: DWORD; // ขนาดบัฟเฟอร์ var lpcConnections : DWORD / /จำนวนการเชื่อมต่อที่ใช้งานจริง): DWORD; stdcall;ฟังก์ชั่น RasEnumConnections;ชื่อ 'Rasapi32.dll' ภายนอก 'RasEnumConnectionsA';//รับข้อมูล IP แบบไดนามิกของฟังก์ชันการเชื่อมต่อผ่านสายโทรศัพท์ที่ระบุที่ใช้งานอยู่ RasGetProjectionInfo (hrasconn: HRasConn;//ระบุหมายเลขอ้างอิงของการเชื่อมต่อที่ใช้งานอยู่ rasprojection: DWORD;//ประเภทการเชื่อมต่อ RAS var lpprojection: TRASPPPIP;/ /รับข้อมูล IP แบบไดนามิกบัฟเฟอร์ var lpcb: DWord//รับขนาดบัฟเฟอร์): DWORD;stdcall;ฟังก์ชัน RasGetProjectionInfo; ชื่อ 'Rasapi32.dll' ภายนอก 'RasGetProjectionInfoA';
เมื่อค่าที่ส่งคืนของฟังก์ชันทั้งสองนี้เป็น 0 แสดงว่าการดำเนินการสำเร็จ และค่าที่ไม่ใช่ศูนย์แสดงว่ามีรหัสข้อผิดพลาด
---- 3. ต่อไป เราจะหารือถึงวิธีการใช้ฟังก์ชัน RAS ทั้งสองข้างต้นเพื่อรับที่อยู่ IP แบบไดนามิกของการเชื่อมต่อผ่านสายโทรศัพท์
---- ขั้นแรก ใช้ฟังก์ชัน RasEnumConnections เพื่อแสดงรายการข้อมูลของการเชื่อมต่อผ่านสายโทรศัพท์ที่ใช้งานอยู่ รวมถึงชื่อการเชื่อมต่อ หมายเลขอ้างอิงการเชื่อมต่อ ประเภทอุปกรณ์เชื่อมต่อ และชื่ออุปกรณ์ จากนั้นใช้ฟังก์ชัน RasGetProjectionInfo เพื่อรับโครงสร้าง TRASPPPIP ที่สอดคล้องกับ การเชื่อมต่อตามหมายเลขอ้างอิงการเชื่อมต่อ ซึ่งรวมถึงแอตทริบิวต์สมาชิก szIpAddress ซึ่งเป็นที่อยู่ IP แบบไดนามิก สำหรับรายละเอียด โปรดดูส่วนย่อยของโปรแกรมและข้อมูลคำอธิบายประกอบต่อไปนี้
ขั้นตอน TForm1.Button1Click (ผู้ส่ง: TObject); const MaxConnections = 10;// สมมติว่ามีการเชื่อมต่อผ่านสายโทรศัพท์ที่ใช้งานได้สูงสุด 10 รายการ var การเชื่อมต่อ: อาร์เรย์ [0..MaxConnections-1] ของ RASCONN; // การเชื่อมต่อผ่านสายโทรศัพท์ array longSize: dword; intAvailabelConnections : dword; //จำนวนจริงของการเชื่อมต่อแบบ dial-up ที่ใช้งานอยู่ intIndex : integer; dwResult : DWORD; dwSize : DWORD; RASpppIP : TRASPPPIP;//ข้อมูลที่อยู่ IP แบบไดนามิกของการเชื่อมต่อผ่านสายโทรศัพท์ที่ใช้งานอยู่เริ่มต้นการเชื่อมต่อ [0] .dwSize := sizeof(RASCONN); / /ขนาดบัฟเฟอร์สำหรับรับการเชื่อมต่อที่ใช้งานอยู่ intAvailabelConnections := 0; //รับข้อมูลเกี่ยวกับการเชื่อมต่อผ่านสายโทรศัพท์ที่ใช้งานอยู่ทั้งหมด (หมายเลขอ้างอิงการเชื่อมต่อและข้อมูลการตั้งค่า) dwResult := RasEnumConnections( การเชื่อมต่อ[ 0 ], longSize,intAvailabelConnections ); ถ้า 0 < > dwResult แล้ว memo1.lines.add( 'ข้อผิดพลาด:' + inttostr ( dwResult ) ) อย่างอื่นเริ่มต้น memo1.lines.add ( 'มีการเชื่อมต่อที่ใช้งานอยู่' + IntToStr ( intAvailabelConnections ) + 'one');//แสดงข้อมูลของการเชื่อมต่อแบบ dial-up ที่ใช้งานอยู่ทั้งหมด (ข้อมูลการตั้งค่าและที่อยู่ IP แบบไดนามิก) สำหรับ intIndex := 0 ถึง intAvailabelConnections - 1 จะเริ่มต้น//แสดงข้อมูลการตั้งค่าของ dial- ที่ใช้งานอยู่ ขึ้นการเชื่อมต่อ strTemp: = 'ชื่อการเชื่อมต่อ:' + StrPAS( การเชื่อมต่อ[ intIndex ].szEntryName ) + ', ประเภทอุปกรณ์: ' + StrPAS( การเชื่อมต่อ[ intIndex ].szDeviceType ) + ', ชื่ออุปกรณ์: ' + StrPAS( การเชื่อมต่อ[ intIndex ].szDeviceName ); memo1.lines.add( strTemp ); //แสดงที่อยู่ IP แบบไดนามิกของการเชื่อมต่อแบบ dial-up ที่ใช้งานอยู่ dwSize := SizeOf( RASpppIP) ; RASpppIP.dwSize := dwSize; ].hRasConn,RASP_PppIp,RasPPPIP,dwSize);//รับที่อยู่ IP แบบไดนามิกหาก 0 < > dwResult แล้ว memo1.lines.add('ข้อผิดพลาด:' + inttostr( dwResult )) else memo1.lines.add( 'ที่อยู่แบบไดนามิก: ' + StrPas(RASpppIP.szIPAddress)); สิ้นสุด; สิ้นสุด;