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