部分WinInetAPI函數允許你建立或斷開Internet連接,定義當前Internet連接及其屬性。WinInet負責控制系統在線和離線兩種狀態。當系統處於離線狀態時,IE會從Cache中讀取所需的資料,如果是在線狀態,則IE會從Internet上讀取資料。
注意
當處於在線狀態時,IE仍會首先在Cache中尋找你輸入的URL是否存在。如果是,IE會檢查其真實性。IE會將在Cache
中資料的日期同服務器上的資料的日期相比較。如果Cache中的資料是舊的話,則從服務器上讀取資料。
CwinInetConnection實現了上述功能。它封裝了WinInetAPI函數,並使你能在下一個方法或屬性中創建類的實例。
方法描述
SetGlobalOnline將系統轉換到在線狀態
SetGlobalOffline將系統轉換到離線狀態
GoOnline出現對話框,詢問是否需要將系統轉到在線狀態以獲取所需的資料。
AutoDial出現建立默認連接對話框
Dial出現建立用戶自定義連接對話框
AutoDialHangUp在使用AutoDial方法後中斷當前連接
HangUp使用Dial方法後中斷當前連接
Refresh刷新類的屬性
表一、CWinInetConnection類所包含的方法
如你所見,上半部分用來顯示類的屬性。所有屬性,除ConnectionName外,都是布爾類型。並且這些屬性是只讀的。
屬性描述
IsConnected若返回值為真,表明Internet連接已建立
ConnectionName返回當前活動連接的名稱
IsConnectionConfigured若返回值為真,表明系統的Internet連接設置正確
IsOffline若返回值為真,表明系統目前處於離線狀態
IsRasInstalled若返回值為真,表明系統已裝了遠程訪問服務(RAS)
UseProxy若返回值為真,表明系統是通過代理服務器連上Internet
UseLAN若返回值為真,表明系統通過局域網連上Internet
UseModem若返回值為真,表明系統通過Modem撥號上網
表二、CWinInetConnection的屬性
如果你想看看CWinInetConnection類是如何工作的,又或者想不用CWinInetConnection類,自己調用WinInetAPI函數
--------------------------------------------------------------------------------
在VB中用WinInetAPI函數並沒有什麼特別。你需要用到下面的幾個函數。
InternetAutodial
InternetAutodialHangup
InternetDial
InternetHangUp
InternetGoOnline
看看類的源代碼,就知道上面幾個函數的用法。所以這裡就不再多說。比較難的一個部分是如何判斷系統是在線還是離線?這需要用到InternetGetConncedStateEx函數。該函數不僅可以判斷是否已經建立了Internet連接,還能返回一大堆連接的屬性。
在試著調用InternetGetConnectedStateEx函數,遇到了不小的麻煩。該函數的行為更象是一個C語言函數。下面是該函數的聲明:
DeclareFunctionInternetGetConnectedStateExLib"wininet.dll"Alias"InternetGetConnectedStateExA"(lpdwFlagsAsLong,lpszConnectionNameAsLong,dwNameLenAsLong,ByValdwReservedAsLong)AsLong
如果系統已經連上了Internet,該函數就會返回一個非零的值。最後一個參數dwReserved,被留作以後擴展之用,在這裡它必須等於零。參數lpszConnectionName返回一個字符串,即當前連接的名稱。參數dwNameLen包含該字符串的大小。最後一個參數lpdwFlags返回一個類型為Long的值,其中包含一系列的屬性。下面是Refresh方法的部分代碼,其主要目的是要調用InternetGetConnectedStateEx函數。
'Allocatebufferforthenameofconnection
strConnectionName=Space(256)
'InitializevariablelNameLen-thelengthofthebuffer
lNameLen=256
'Getthepointerstothevariableswe'regoingtopass
'tothefunctionInternetGetConnectedStateEx
lPtr=StrPtr(strConnectionName)
lNameLenPtr=VarPtr(lNameLen)
'CalltheInternetGetConnectedStateExfunction.
'Pleasepayattentionthattwoparametersare
'passingpassbythevalue(ByVal)
lRetVal=InternetGetConnectedStateEx(lConnectionFlags,ByVallPtr,ByVallNameLen,0&)
'TheprocessingofthelRetValismissed
'ChecktheappropriatebitsofthelConnectionFlags
'inordertoinitializethepropertiesofCWinInetConnection
mvarUseModem=lConnectionFlagsAndINTERNET_CONNECTION_MODEM
mvarUseLAN=lConnectionFlagsAndINTERNET_CONNECTION_LAN
mvarUseProxy=lConnectionFlagsAndINTERNET_CONNECTION_PROXY
mvarIsRasInstalled=lConnectionFlagsAndINTERNET_RAS_INSTALLED
mvarIsOffline=lConnectionFlagsAndINTERNET_CONNECTION_OFFLINEmvarIsConnectionConfigured=lConnectionFlagsAndINTERNET_CONNECTION_CONFIGURED
'Extractthenameofcurrentconnectionwiththehelp
'ofthepointertothevariablestrConnectionName
mvarConnectionName=StringFromPointer(lPtr)
Justforinformationhereisthefunctionthatextractsthestringbythepointer.
FunctionStringFromPointer(ByVallPointerAsLong)AsString
DimstrTempAsString
DimlRetValAsLong
strTemp=String$(lstrlen(ByVallPointer),0)
lRetVal=lstrcpy(ByValstrTemp,ByVallPointer)
IflRetValThenStringFromPointer=strTemp
EndFunction
第二個不太明顯的任務是在離線和在線兩種狀態間轉換。看上去似乎比較復雜,實際上用一個WinInet函數InternetSetOption就行了。
DeclareFunctionInternetSetOptionLib"wininet.dll"Alias"InternetSetOptionA"(ByValhInternetAsLong,ByValdwOptionAsLong,lpBufferAsAny,ByValdwBufferLengthAsLong)AsLong
InternetSetOption函數可用來改變各種Internet設置及當前網絡進程的參數。將第一個參數hInternet的值設為零,因為我們將要改變系統的參數。參數dwOption能接收一個Flag值,表示我們將要改變的設置。在這裡我們將用到INTERNET_OPTION_CONNECTED_STATE。參數lpBuffer可以扮演多種角色。它可以接收或返回不同類型的值。本程序中將傳遞一個自定義類型,INTERNET_CONNECTED_INFO,給這個參數
TypeINTERNET_CONNECTED_INFO
dwConnectedStateAsLong
dwFlagsAsLong
EndType
為了調用InternetSetOption函數,我們必須首先初始化INTERNET_CONNECTED_INFO,其成員定義了系統要轉換到的狀態。下面是如何將系統轉到在線狀態。
DimConInfoAsINTERNET_CONNECTED_INFO,lRetValueAsLong
ConInfo.dwConnectedState=INTERNET_STATE_CONNECTED
lRetValue=InternetSetOption(0&,INTERNET_OPTION_CONNECTED_STATE,ConInfo,Len(ConInfo))
AndthisoneisusedtoswitchthesystemintoOfflinemode:
DimConInfoAsINTERNET_CONNECTED_INFO,lRetValueAsLong
ConInfo.dwConnectedState=INTERNET_STATE_DISCONNECTED_BY_USER
ConInfo.dwFlags=ISO_FORCE_DISCONNECTED
lRetValue=InternetSetOption(0&,INTERNET_OPTION_CONNECTED_STATE,ConInfo,Len(ConInfo))->