?? 02.htm
字號:
<p>CWinInetConnection---一個封裝了WinInet API函數(shù)的類 </p>
<p></p>
<p></p>
<p></p>
<p>部分WinInet API函數(shù)允許你建立或斷開Internet連接,定義當(dāng)前Internet連接及其屬性。WinInet負(fù)責(zé)控制系統(tǒng) 在線和離線兩種狀態(tài)。當(dāng)系統(tǒng)處于離線狀態(tài)時,IE會從Cache中讀取所需的資料,如果是在線狀態(tài),則 IE會從Internet上讀取資料。</p>
<p></p>
<p>注意 </p>
<p>當(dāng)處于在線狀態(tài)時,IE仍會首先在Cache中尋找你輸入的URL是否存在。如果是,IE會檢查其真實性。IE會將在Cache</p>
<p>中資料的日期同服務(wù)器上的資料的日期相比較。如果Cache中的資料是舊的話,則從服務(wù)器上讀取資料。 </p>
<p></p>
<p>CwinInetConnection實現(xiàn)了上述功能。它封裝了WinInet API函數(shù),并使你能在下一個方法或?qū)傩灾袆?chuàng)建類的實例。</p>
<p></p>
<p>方法 描述 </p>
<p> SetGlobalOnline 將系統(tǒng)轉(zhuǎn)換到在線狀態(tài) </p>
<p>SetGlobalOffline 將系統(tǒng)轉(zhuǎn)換到離線狀態(tài) </p>
<p>GoOnline 出現(xiàn)對話框,詢問是否需要將系統(tǒng)轉(zhuǎn)到在線狀態(tài)以獲取所需的資料。 </p>
<p>AutoDial 出現(xiàn)建立默認(rèn)連接對話框 </p>
<p>Dial 出現(xiàn)建立用戶自定義連接對話框 </p>
<p>AutoDialHangUp 在使用AutoDial方法后中斷當(dāng)前連接 </p>
<p>HangUp 使用Dial方法后中斷當(dāng)前連接 </p>
<p>Refresh 刷新類的屬性 </p>
<p>表一、 CWinInetConnection類所包含的方法 </p>
<p></p>
<p></p>
<p> </p>
<p></p>
<p>如你所見,上半部分用來顯示類的屬性。所有屬性,除ConnectionName外,都是布爾類型。并且這些屬性是只讀的。</p>
<p></p>
<p>屬性 描述 </p>
<p>IsConnected 若返回值為真,表明Internet連接已建立 </p>
<p>ConnectionName 返回當(dāng)前活動連接的名稱 </p>
<p>IsConnectionConfigured 若返回值為真,表明系統(tǒng)的Internet連接設(shè)置正確 </p>
<p>IsOffline 若返回值為真,表明系統(tǒng)目前處于離線狀態(tài) </p>
<p>IsRasInstalled 若返回值為真,表明系統(tǒng)已裝了遠(yuǎn)程訪問服務(wù)(RAS) </p>
<p>UseProxy 若返回值為真,表明系統(tǒng)是通過代理服務(wù)器連上Internet </p>
<p>UseLAN 若返回值為真,表明系統(tǒng)通過局域網(wǎng)連上Internet </p>
<p>UseModem 若返回值為真,表明系統(tǒng)通過Modem撥號上網(wǎng) </p>
<p>表二、 CWinInetConnection的屬性 </p>
<p></p>
<p>如果你想看看CWinInetConnection類是如何工作的,又或者想不用CWinInetConnection類,自己調(diào)用WinInet API函數(shù)</p>
<p></p>
<p></p>
<p></p>
<p></p>
<p>--------------------------------------------------------------------------------</p>
<p></p>
<p>在VB中用WinInet API函數(shù)并沒有什么特別。你需要用到下面的幾個函數(shù)。</p>
<p></p>
<p>InternetAutodial </p>
<p>InternetAutodialHangup </p>
<p>InternetDial </p>
<p>InternetHangUp </p>
<p>InternetGoOnline </p>
<p>看看類的源代碼,就知道上面幾個函數(shù)的用法。所以這里就不再多說。比較難的一個部分是如何判斷系統(tǒng)是在線還是離線?這需要用到InternetGetConncedStateEx函數(shù)。該函數(shù)不僅可以判斷是否已經(jīng)建立了Internet連接,還能返回一大堆連接的屬性。</p>
<p></p>
<p>在試著調(diào)用InternetGetConnectedStateEx函數(shù),遇到了不小的麻煩。該函數(shù)的行為更象是一個C語言函數(shù)。下面是該函數(shù)的聲明:</p>
<p></p>
<p>Declare Function InternetGetConnectedStateEx Lib "wininet.dll" Alias "InternetGetConnectedStateExA" (lpdwFlags As Long, lpszConnectionName As Long, dwNameLen As Long, ByVal dwReserved As Long) As Long</p>
<p></p>
<p>如果系統(tǒng)已經(jīng)連上了Internet,該函數(shù)就會返回一個非零的值。最后一個參數(shù)dwReserved,被留作以后擴展之用,在這里它必須等于零。參數(shù)lpszConnectionName返回一個字符串,即當(dāng)前連接的名稱。參數(shù)dwNameLen包含該字符串的大小。最后一個參數(shù)lpdwFlags返回一個類型為Long的值,其中包含一系列的屬性。下面是Refresh方法的部分代碼,其主要目的是要調(diào)用InternetGetConnectedStateEx函數(shù)。</p>
<p></p>
<p>'Allocate buffer for the name of connection </p>
<p>strConnectionName = Space(256) </p>
<p>'Initialize variable lNameLen - the length of the buffer </p>
<p>lNameLen = 256 </p>
<p>'Get the pointers to the variables we're going to pass </p>
<p>'to the function InternetGetConnectedStateEx </p>
<p>lPtr = StrPtr(strConnectionName) </p>
<p>lNameLenPtr = VarPtr(lNameLen) </p>
<p>'Call the InternetGetConnectedStateEx function. </p>
<p>'Please pay attention that two parameters are </p>
<p>'passing pass by the value (ByVal) </p>
<p>lRetVal = InternetGetConnectedStateEx(lConnectionFlags, _ </p>
<p> ByVal lPtr, ByVal lNameLen, 0&)</p>
<p> </p>
<p>'The processing of the lRetVal is missed </p>
<p></p>
<p>'Check the appropriate bits of the lConnectionFlags </p>
<p>'in order to initialize the properties of CWinInetConnection </p>
<p>mvarUseModem = lConnectionFlags And INTERNET_CONNECTION_MODEM </p>
<p>mvarUseLAN = lConnectionFlags And INTERNET_CONNECTION_LAN </p>
<p>mvarUseProxy = lConnectionFlags And INTERNET_CONNECTION_PROXY </p>
<p>mvarIsRasInstalled = lConnectionFlags And INTERNET_RAS_INSTALLED </p>
<p>mvarIsOffline = lConnectionFlags And INTERNET_CONNECTION_OFFLINE mvarIsConnectionConfigured = lConnectionFlags And _ INTERNET_CONNECTION_CONFIGURED </p>
<p>'Extract the name of current connection with the help </p>
<p>'of the pointer to the variable strConnectionName </p>
<p>mvarConnectionName = StringFromPointer(lPtr)</p>
<p></p>
<p>Just for information here is the function that extracts the string by the pointer.</p>
<p></p>
<p>Function StringFromPointer(ByVal lPointer As Long) As String </p>
<p></p>
<p>Dim strTemp As String </p>
<p>Dim lRetVal As Long </p>
<p></p>
<p>strTemp = String$(lstrlen(ByVal lPointer), 0) </p>
<p>lRetVal = lstrcpy(ByVal strTemp, ByVal lPointer) </p>
<p>If lRetVal Then StringFromPointer = strTemp </p>
<p></p>
<p>End Function</p>
<p></p>
<p>第二個不太明顯的任務(wù)是在離線和在線兩種狀態(tài)間轉(zhuǎn)換??瓷先ニ坪醣容^復(fù)雜,實際上用一個WinInet函數(shù)InternetSetOption就行了。</p>
<p></p>
<p>Declare Function InternetSetOption Lib "wininet.dll" Alias "InternetSetOptionA" (ByVal hInternet As Long, ByVal dwOption As Long, lpBuffer As Any, ByVal dwBufferLength As Long) As Long</p>
<p></p>
<p>InternetSetOption函數(shù)可用來改變各種Internet設(shè)置及當(dāng)前網(wǎng)絡(luò)進(jìn)程的參數(shù)。將第一個參數(shù)hInternet的值設(shè)為零,因為我們將要改變系統(tǒng)的參數(shù)。參數(shù)dwOption能接收一個Flag值,表示我們將要改變的設(shè)置。在這里我們將用到INTERNET_OPTION_CONNECTED_STATE。參數(shù)lpBuffer可以扮演多種角色。它可以接收或返回不同類型的值。本程序中將傳遞一個自定義類型,INTERNET_CONNECTED_INFO,給這個參數(shù) </p>
<p></p>
<p>Type INTERNET_CONNECTED_INFO </p>
<p> dwConnectedState As Long </p>
<p> dwFlags As Long </p>
<p>End Type</p>
<p></p>
<p>為了調(diào)用InternetSetOption函數(shù),我們必須首先初始化INTERNET_CONNECTED_INFO,其成員定義了系統(tǒng)要轉(zhuǎn)換到的狀態(tài)。下面是如何將系統(tǒng)轉(zhuǎn)到在線狀態(tài)。</p>
<p></p>
<p>Dim ConInfo As INTERNET_CONNECTED_INFO, lRetValue As Long </p>
<p></p>
<p>ConInfo.dwConnectedState = INTERNET_STATE_CONNECTED </p>
<p>lRetValue = InternetSetOption(0&, _ </p>
<p> INTERNET_OPTION_CONNECTED_STATE, _ </p>
<p> ConInfo, Len(ConInfo))</p>
<p></p>
<p>And this one is used to switch the system into Offline mode:</p>
<p></p>
<p>Dim ConInfo As INTERNET_CONNECTED_INFO, lRetValue As Long</p>
<p></p>
<p>ConInfo.dwConnectedState = INTERNET_STATE_DISCONNECTED_BY_USER </p>
<p>ConInfo.dwFlags = ISO_FORCE_DISCONNECTED </p>
<p>lRetValue = InternetSetOption(0&, _ </p>
<p> INTERNET_OPTION_CONNECTED_STATE, ConInfo, Len(ConInfo))</p>
<p></p>
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -