ضمن WIN9X، إذا تم تثبيت شبكة الطلب الهاتفي، فستكون هناك مكتبتان لإدارة شبكة الطلب الهاتفي، RasApi32.DLL وRasApi16.DLL، ضمن دليل النظام System الخاص بنظام WINDOWS، يمكننا استخدام وظائف سلسلة RAS فيهما الحصول على معلومات شبكة الاتصال وإعدادها. بالطبع، يمكنك الحصول على عنوان IP الديناميكي لاتصال الطلب الهاتفي. في ملف تعليمات دلفي، يوجد وصف تفصيلي لوظائف RAS ذات الصلة.
---- 1. اشرح أولاً بعض ثوابت البيانات وهياكل البيانات التي سيتم استخدامها.
constRAS_MaxDeviceType = 16; // طول اسم نوع الجهاز RAS_MaxEntryName = 256; // الحد الأقصى لطول اسم الاتصال RAS_MaxDeviceName = 128; // الحد الأقصى لطول اسم الجهاز RAS_MaxIpAddress = 15; نوع بروتوكول الاتصال، تشير هذه القيمة إلى نوع اتصال PPPHRASCONN = 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;// نهاية اسم الجهاز المستخدم للاتصالات النشطة؛ TRASPPPIP = السجل// الطلب النشط- معلومات عنوان IP الديناميكي المتصل dwSize: DWORD;// حجم الذاكرة التي تشغلها هذه البنية (البايت)، يتم ضبطها بشكل عام على SizeOf(TRASPPPIP) dwError: DWORD;// معرف نوع الخطأ szIpAddress: array[ 0..RAS_MaxIpAddress] of char;// عنوان IP لاتصال الطلب الهاتفي النشط end;
---- 2. بعد ذلك، سنشرح وظيفتي RAS المطلوب استخدامهما.
// الحصول على معلومات حول جميع اتصالات الطلب الهاتفي النشطة (مقبض الاتصال ومعلومات الإعداد) وظيفة RasEnumConnections( var lPRasconn : RASCONN ; // تلقي مؤشر إلى المخزن المؤقت للاتصالات النشطة var lpcb: DWORD; // حجم المخزن المؤقت var lpcConnections : DWORD // العدد الفعلي للاتصالات النشطة): DWORD stdcall;function RasEnumConnections;اسم "Rasapi32.dll" الخارجي 'RasEnumConnectionsA';// احصل على معلومات IP الديناميكية لوظيفة اتصال الطلب الهاتفي النشط المحددة RasGetProjectionInfo(hrasconn: HRasConn;// حدد مقبض الاتصال النشط rasprojection: DWORD;// نوع اتصال RAS var lpprojection: TRASPPPIP;/ / تلقي المخزن المؤقت لمعلومات IP الديناميكية var lpcb: DWord// تلقي حجم المخزن المؤقت): DWORD;stdcall;function RasGetProjectionInfo؛ اسم "Rasapi32.dll" الخارجي "RasGetProjectionInfoA"؛
عندما تكون القيمة المرجعة لهاتين الوظيفتين 0، فهذا يشير إلى التنفيذ الناجح، ويشير عدم الصفر إلى رمز خطأ.
---- 3. بعد ذلك، سنناقش كيفية استخدام وظيفتي RAS أعلاه للحصول على عنوان IP الديناميكي لاتصال الطلب الهاتفي.
---- أولاً، استخدم وظيفة RasEnumConnections لسرد معلومات اتصالات الطلب الهاتفي النشطة التي تم إنشاؤها، بما في ذلك اسم الاتصال ومقبض الاتصال ونوع جهاز الاتصال واسم الجهاز، ثم استخدم وظيفة RasGetProjectionInfo للحصول على بنية TRASPPPIP المقابلة لها الاتصال يعتمد على مقبض الاتصال، والذي يتضمن سمة العضو szIpAddress، وهو عنوان IP الديناميكي. للحصول على التفاصيل، الرجاء مراجعة أجزاء البرنامج التالية ومعلومات التعليقات التوضيحية.
الإجراء TForm1.Button1Click(Sender: TObject);const MaxConnections = 10;// افترض أن هناك ما يصل إلى 10 اتصالات طلب هاتفي نشطة var Connections: array[0...MaxConnections-1] of RASCONN; array longSize: dword; intAvailabelConnections: dword; // العدد الفعلي لاتصالات الطلب الهاتفي النشطة intIndex : integer : string; dwResult : DWORD; dwSize : DWORD; RASpppIP : TRASPPPIP;// تبدأ معلومات عنوان IP الديناميكية لاتصالات الطلب الهاتفي النشطة الاتصالات[ 0 ].dwSize := sizeof(RASCONN);= MaxConnections * communication[ 0 ].dwSize; // حجم المخزن المؤقت لتلقي الاتصالات النشطة intAvailabelConnections := 0; // احصل على معلومات حول كافة اتصالات الطلب الهاتفي النشطة (مقبض الاتصال ومعلومات الإعداد) dwResult := RasEnumConnections( communication[ 0 ], longSize,intAvailabelConnections ); if 0 < > dwResult ثم memo1.lines.add( 'Error:' + inttostr ( dwResult ) ) وإلا ابدأ memo1.lines.add( "توجد اتصالات نشطة موجودة" + IntToStr( intAvailabelConnections ) + 'one');// عرض معلومات كافة اتصالات الطلب الهاتفي النشطة (معلومات الإعداد وعنوان IP الديناميكي) لـ intIndex:= 0 إلى intAvailabelConnections - 1 ابدأ // عرض معلومات الإعداد الخاصة باتصال نشط اتصال لأعلى strTemp: = 'اسم الاتصال:' + StrPAS(اتصالات[ intIndex].szEntryName) + '، نوع الجهاز:' + StrPAS(اتصالات[ intIndex ].szDeviceType ) + '، اسم الجهاز: ' + StrPAS( Connections[ intIndex ].szDeviceName ); memo1.lines.add( strTemp ); // عرض عنوان IP الديناميكي لاتصال الطلب الهاتفي النشط dwSize := SizeOf( RASpppIP) ; RASpppIP.dwSize := dwSize; ].hRasConn,RASP_PppIp,RasPPPIP,dwSize);// احصل على عنوان IP ديناميكي إذا كان 0 < > dwResult ثم memo1.lines.add('Error:' + inttostr( dwResult )) else memo1.lines.add( 'العنوان الديناميكي: ' + StrPas(RASpppIP.szIPAddress)); end;end;