天天看点

一个封装了WinInet API函数的类(CWinInetConnection) wininet.dll

 一个封装了WinInet API函数的类(CWinInetConnection)

部分WinInet API函数允许你建立或断开Internet连接,定义当前Internet连接及其属性

。WinInet负责控制系统 在线和离线两种状态。当系统处于离线状态时,IE会从Cache中

读取所需的资料,如果是在线状态,则 IE会从Internet上读取资料。

注意

当处于在线状态时,IE仍会首先在Cache中寻找你输入的URL是否存在。如果是,IE会检

查其真实性。IE会将在Cache

中资料的日期同服务器上的资料的日期相比较。如果Cache中的资料是旧的话,则从服务

器上读取资料。

CwinInetConnection实现了上述功能。它封装了WinInet API函数,并使你能在下一个方

法或属性中创建类的实例。

方法 描述

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

类,自己调用WinInet API函数

----------------------------------------------------------------------------

----

在VB中用WinInet API函数并没有什么特别。你需要用到下面的几个函数。

InternetAutodial

InternetAutodialHangup

InternetDial

InternetHangUp

InternetGoOnline

看看类的源代码,就知道上面几个函数的用法。所以这里就不再多说。比较难的一个部

分是如何判断系统是在线还是离线?这需要用到InternetGetConncedStateEx函数。该函

数不仅可以判断是否已经建立了Internet连接,还能返回一大堆连接的属性。

在试着调用InternetGetConnectedStateEx函数,遇到了不小的麻烦。该函数的行为更象

是一个C语言函数。下面是该函数的声明:

Declare Function InternetGetConnectedStateEx Lib "wininet.dll" Alias "Intern

etGetConnectedStateExA" (lpdwFlags As Long, lpszConnectionName As Long, dwNa

meLen As Long, ByVal dwReserved As Long) As Long

如果系统已经连上了Internet,该函数就会返回一个非零的值。最后一个参数dwReserve

d,被留作以后扩展之用,在这里它必须等于零。参数lpszConnectionName返回一个字符

串,即当前连接的名称。参数dwNameLen包含该字符串的大小。最后一个参数lpdwFlags

返回一个类型为Long的值,其中包含一系列的属性。下面是Refresh方法的部分代码,其

主要目的是要调用InternetGetConnectedStateEx函数。

'Allocate buffer for the name of connection

strConnectionName = Space(256)

'Initialize variable lNameLen - the length of the buffer

lNameLen = 256

'Get the pointers to the variables we're going to pass

'to the function InternetGetConnectedStateEx

lPtr = StrPtr(strConnectionName)

lNameLenPtr = VarPtr(lNameLen)

'Call the InternetGetConnectedStateEx function.

'Please pay attention that two parameters are

'passing pass by the value (ByVal)

lRetVal = InternetGetConnectedStateEx(lConnectionFlags, ByVal lPtr, ByVal lN

ameLen, 0&)

'The processing of the lRetVal is missed

'Check the appropriate bits of the lConnectionFlags

'in order to initialize the properties of CWinInetConnection

mvarUseModem = lConnectionFlags And INTERNET_CONNECTION_MODEM

mvarUseLAN = lConnectionFlags And INTERNET_CONNECTION_LAN

mvarUseProxy = lConnectionFlags And INTERNET_CONNECTION_PROXY

mvarIsRasInstalled = lConnectionFlags And INTERNET_RAS_INSTALLED

mvarIsOffline = lConnectionFlags And INTERNET_CONNECTION_OFFLINE mvarIsConne

ctionConfigured = lConnectionFlags And  INTERNET_CONNECTION_CONFIGURED

'Extract the name of current connection with the help

'of the pointer to the variable strConnectionName

mvarConnectionName = StringFromPointer(lPtr)

Just for information here is the function that extracts the string by the po

inter.

Function StringFromPointer(ByVal lPointer As Long) As String

Dim strTemp As String

Dim lRetVal As Long

strTemp = String$(lstrlen(ByVal lPointer), 0)

lRetVal = lstrcpy(ByVal strTemp, ByVal lPointer)

If lRetVal Then StringFromPointer = strTemp

End Function

第二个不太明显的任务是在离线和在线两种状态间转换。看上去似乎比较复杂,实际上

用一个WinInet函数InternetSetOption就行了。

Declare Function InternetSetOption Lib "wininet.dll" Alias "InternetSetOptio

nA" (ByVal hInternet As Long, ByVal dwOption As Long, lpBuffer As Any, ByVal

 dwBufferLength As Long) As Long

InternetSetOption函数可用来改变各种Internet设置及当前网络进程的参数。将第一个

参数hInternet的值设为零,因为我们将要改变系统的参数。参数dwOption能接收一个F

lag值,表示我们将要改变的设置。在这里我们将用到INTERNET_OPTION_CONNECTED_STA

TE。参数lpBuffer可以扮演多种角色。它可以接收或返回不同类型的值。本程序中将传

递一个自定义类型,INTERNET_CONNECTED_INFO,给这个参数

Type INTERNET_CONNECTED_INFO

dwConnectedState As Long

dwFlags As Long

End Type

为了调用InternetSetOption函数,我们必须首先初始化INTERNET_CONNECTED_INFO,其

成员定义了系统要转换到的状态。下面是如何将系统转到在线状态。

Dim ConInfo As INTERNET_CONNECTED_INFO, lRetValue As Long

ConInfo.dwConnectedState = INTERNET_STATE_CONNECTED

lRetValue = InternetSetOption(0&, INTERNET_OPTION_CONNECTED_STATE, ConInfo, 

Len(ConInfo))

And this one is used to switch the system into Offline mode:

Dim ConInfo As INTERNET_CONNECTED_INFO, lRetValue As Long

ConInfo.dwConnectedState = INTERNET_STATE_DISCONNECTED_BY_USER

ConInfo.dwFlags = ISO_FORCE_DISCONNECTED

lRetValue = InternetSetOption(0&, INTERNET_OPTION_CONNECTED_STATE, ConInfo, 

Len(ConInfo))

--