مع التطور السريع للإنترنت، أصبحت البرمجة الآن تتطلب في كثير من الأحيان التواصل المباشر في البرنامج لمعالجة بعض الأمور، مثل التسجيل عبر الإنترنت والمساعدة عبر الإنترنت، مما يتطلب منا إنشاء اتصالات معينة في البرنامج. تقوم العديد من البرامج بتشغيل المتصفح للبحث عن عنوان URL دون معرفة ما إذا كان المستخدم متصلاً بالإنترنت، وبعد جهد كبير، لا يمكنها العثور إلا على صفحة خطأ (بالطبع لا توجد نتيجة جيدة). إذا تمكنا من تحديد ما إذا كان المستخدم متصلاً بالإنترنت تلقائيًا عند كتابة البرنامج، وإذا كان الأمر كذلك، فتح الاتصال، وإذا لم يكن الأمر كذلك، بدء اتصال الطلب الهاتفي الافتراضي، فهل هذا سيجعل الناس يشعرون أن برنامجك أفضل من غيرهم ؟ يتم تقديم تحديد ما إذا كنت متصلاً بالإنترنت في العديد من الأماكن، ونقدم هنا فقط كيفية بدء اتصال الطلب الهاتفي الافتراضي.
----قبل المقدمة، دعونا أولاً نلقي نظرة على كيفية فتح شبكة الطلب الهاتفي. نظرًا لأن "شبكة الطلب الهاتفي" ليست ملفًا قابلاً للتنفيذ، فلا يمكن فتحه باستخدام الأسلوب "Shell Executable file". لبدء شبكة الطلب الهاتفي، تحتاج إلى استخدام Explorer والطريقة هي كما يلي:
Shell"Explorer::{20D04FE0-3AEA-1069-A2D8-08002B30309D}/"&"::{992CFFA0-F557-101A-88EC-00DD010CCC48}"،vbNormalFocus
----ولكن إذا كنت تريد بدء اتصال في شبكة الطلب الهاتفي، فأنت بحاجة إلى استخدام rundll.exe وrnaui.dll لبدء الاتصال، وتكون الطريقة كما يلي (بافتراض أن اسم الاتصال هو 163):
شل "rundllrnaui.dll، RnaDial163"، vbNormalFocus
----ملاحظة: في الوصف أعلاه، لا تقم بإدخال مسافات إضافية في الجزء "،RnaDial163"، ولا تقم بتغيير الحالة بشكل تعسفي.
---- ما ورد أعلاه يفترض فقط اسم الاتصال، ولكن في البرمجة الفعلية لا نعرف اسمه. كيفية الحصول على اسم الاتصال الافتراضي وبدء تشغيله؟ هنا يمكننا استخدام السجل لتحقيق هدفنا. الإجراء الكامل هو كما يلي:
----ضع زر أمر (يُسمى cmdCallConnect) في النموذج، وفيما يلي جزء التعليمات البرمجية:
خيار صريح
'بيان API حول التسجيل
PRivateDeclareFunctionRegOpenKeyExLib"advapi32"Alias"RegOpenKeyExA"(ByValhKeyAsLong,ByVallpSubKeyAsString,ByValulOptionsAsLong,ByValsamDesiredAsLong,phkResultAsLong)AsLong
PrivateDeclareFunctionRegQueryValueExLib"advapi32"Alias"RegQueryValueExA"(ByValhKeyAsLong,ByVallpValueNameAsString,ByVallpReservedAsLong,ByReflpTypeAsLong,ByValszDataAsString,ByReflpcbDataAsLong)AsLong
PrivateDeclareFunctionRegCloseKeyLib"advapi32"(ByValhKeyAsLong)AsLong
'ثابت
ConstHKEY_CURRENT_USER=&H80000001
ConstERROR_SUCCESS=0&
PrivateSubcmdCallConnect_Click()
'ابدأ اتصال الطلب الهاتفي الافتراضي
شل "rundllrnaui.dll، RnaDial" GetConnect، vbNormalFocus
EndSub
PublicFunctionGetConnect()AsString
DimhKeyAsLong
DimSubKeyAsString
hKey=HKEY_CURRENT_USER'المفتاح الأساسي
المفتاح الفرعي = "الوصول عن بعد"'subkey
'احصل على اسم الاتصال الافتراضي
GetConnect=GetRegValue(hKey,SubKey,"Default")
وظيفة النهاية
PublicFunctionGetRegValue(hKeyAsLong,lpszSubKeyAsString,szKeyAsString)AsVariant
أونيرورغوتويرروتينير:
DimphkResultAsLong
DimlResultAsLong
DimszBufferAsString
DimlBuffSizeAsLong
'إنشاء المخزن المؤقت
szBuffer=مسافة(255)
lBuffSize=لين(szBuffer)
'افتح مفتاح التسجيل
RegOpenKeyExhKey,lpszSubKey,0,1,phkResult
""نتائج الاستعلام""
lResult=RegQueryValueEx(phkResult,szKey,0,0,szBuffer,lBuffSize)
'إغلاق مفتاح التسجيل
RegCloseKeyphkResult
""إرجاع النتيجة""
IflResult=ERROR_SUCCESSثم
GetRegValue=Left(szBuffer,lBuffSize-1)
آخر
احصل على قيمة التسجيل = ""
EndIf
وظيفة الخروج
خطأ روتيني:
احصل على قيمة التسجيل = ""
وظيفة النهاية
لقد تم تصحيح البرنامج أعلاه تحت WIN98 وVB6.0. ->