程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> Visual Basic語言 >> VB綜合教程 >> 一個封裝了WinInetAPI函數的類(CWinInetConnection)

一個封裝了WinInetAPI函數的類(CWinInetConnection)

編輯:VB綜合教程
部分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))->

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved