?? 19.htm
字號:
<p>程序中如何啟動默認(rèn)的撥號連接</p>
<p>作者:蘇州 欒金奎 </p>
<p>隨著因特網(wǎng)的迅猛發(fā)展,現(xiàn)在編程常需要在程序中直接聯(lián)網(wǎng)來處理一些事項(xiàng),如在線注冊和在線幫助,這就要求我們要在程序中建立某些連接。很多軟件在不知用戶是否聯(lián)網(wǎng)的情況下不管三七二十一就啟動瀏覽器查找網(wǎng)址,費(fèi)了九牛二虎之力只能查出一錯誤頁來(當(dāng)然不可能有什么好的結(jié)果)。如果我們在程序編寫時能自動判斷用戶是否已經(jīng)聯(lián)網(wǎng),如已經(jīng)聯(lián)網(wǎng)則打開聯(lián)接,如沒有則啟動默認(rèn)的撥號連接,這樣是不是讓人覺得你的軟件更勝人一處呢?判斷是否已聯(lián)網(wǎng)很多地方都有介紹,這里我們只介紹如何啟動默認(rèn)的撥號連接。 </p>
<p>---- 在介紹之前讓我們首先看看如何打開撥號網(wǎng)絡(luò)。由于撥號網(wǎng)絡(luò)不是一個可執(zhí)行文件,所以不能用 “Shell 可執(zhí)行文件”的方式來打開。要啟動撥號網(wǎng)絡(luò),需借助 Explorer ,方法如下: </p>
<p></p>
<p>Shell "Explorer ::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\" & "::{992CFFA0-F557-101A-88EC-00DD010CCC48}", vbNormalFocus</p>
<p></p>
<p></p>
<p>---- 但若是要啟動撥號網(wǎng)絡(luò)中的某一個連接,則需借助rundll.exe 及 rnaui.dll來啟動,方法如下(假定連接名稱為163): </p>
<p></p>
<p>Shell "rundll rnaui.dll,RnaDial 163", vbNormalFocus</p>
<p></p>
<p></p>
<p>---- 說明:在以上敘述中,“,RnaDial 163”這部分不要插入額外的空格,大小寫也不要任意更改。 </p>
<p></p>
<p>---- 上面僅僅假定了連接名稱,但實(shí)際編程中我們是不知道其名稱的,如何取得默認(rèn)的連接名稱并啟動它呢?這里我們可利用注冊表來達(dá)到目的。完整程序如下: </p>
<p></p>
<p>---- 在窗體上放置一個命令按鈕(名稱為 cmdCallConnect),下面為代碼部份: </p>
<p></p>
<p>Option Explicit</p>
<p> </p>
<p>'有關(guān)注冊的API聲明</p>
<p>Private Declare Function RegOpenKeyEx Lib "advapi32" Alias "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long</p>
<p></p>
<p>Private Declare Function RegQueryValueEx Lib "advapi32" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, ByRef lpType As Long, ByVal szData As String, ByRef lpcbData As Long) As Long</p>
<p></p>
<p>Private Declare Function RegCloseKey Lib "advapi32" (ByVal hKey As Long) As Long</p>
<p>'常數(shù)</p>
<p>Const HKEY_CURRENT_USER = &H80000001</p>
<p>Const ERROR_SUCCESS = 0&</p>
<p> </p>
<p>Private Sub cmdCallConnect_Click()</p>
<p>'啟動默認(rèn)撥號連接</p>
<p>Shell "rundll rnaui.dll,RnaDial " + GetConnect, vbNormalFocus</p>
<p>End Sub</p>
<p> </p>
<p>Public Function GetConnect() As String</p>
<p>Dim hKey As Long</p>
<p>Dim SubKey As String</p>
<p>hKey = HKEY_CURRENT_USER '主鍵</p>
<p>SubKey = "RemoteAccess" '子鍵</p>
<p>'取得默認(rèn)連接名</p>
<p>GetConnect = GetRegValue(hKey, SubKey, "Default")</p>
<p>End Function</p>
<p></p>
<p>Public Function GetRegValue(hKey As Long, lpszSubKey As String, szKey As String) As Variant</p>
<p>On Error GoTo ErrorRoutineErr:</p>
<p>Dim phkResult As Long</p>
<p>Dim lResult As Long</p>
<p>Dim szBuffer As String</p>
<p>Dim lBuffSize As Long</p>
<p></p>
<p>'創(chuàng)建緩沖區(qū)</p>
<p>szBuffer = Space(255)</p>
<p>lBuffSize = Len(szBuffer)</p>
<p></p>
<p>'打開注冊鍵</p>
<p>RegOpenKeyEx hKey, lpszSubKey, 0, 1, phkResult</p>
<p></p>
<p>'查詢結(jié)果</p>
<p>lResult = RegQueryValueEx(phkResult,szKey, 0, 0, szBuffer,lBuffSize)</p>
<p></p>
<p>'關(guān)閉注冊鍵</p>
<p>RegCloseKey phkResult</p>
<p></p>
<p>'返回結(jié)果</p>
<p>If lResult = ERROR_SUCCESS Then</p>
<p>GetRegValue = Left(szBuffer, lBuffSize - 1)</p>
<p>Else</p>
<p>GetRegValue = ""</p>
<p>End If</p>
<p>Exit Function</p>
<p></p>
<p>ErrorRoutineErr:</p>
<p>GetRegValue = ""</p>
<p>End Function</p>
<p>以上程序在 WIN98,VB6.0 下調(diào)試通過。</p>
<p> </p>
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -