教程中国
PHOTOSHOP CS9.0中文版 MAYA 8.5 FOR WINDOWS Corel Painter v9.0 Flash MX2004 中文版 Illustrator cs2 中文版
VC++6.0含sp6 中英文版 VB6.0 +sp6 简体中文版 Borland Delphi 7汉化版 MSDN for vb6.0中文版 Visual Studio 2005简体
教程中国下属 文件存储共享专家BIBIDU.COM 提供大型软件,教材,源码,电影,音乐,图书等下载 更多精品请点此进入
  您目前所在位置: 教程中国 >> 编程基地 >> VB >> 一个封装了WinInet API函数的类(CWinInetConnection) RSS订阅
一个封装了WinInet API函数的类(CWinInetConnection)
教程(视频,书籍)下载:  ASP.NET AutoCAD 数据库 C# ASP java photoshop 网页设计 delphi 3dmax Flash C++ VB 张孝祥 实例   更多请进入BIBIDU搜索
IT搜索引擎   
一个封装了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 "InternetGetConnectedStateExA" (lpdwFlags As Long, lpszConnectionName As Long, dwNameLen As Long, ByVal dwReserved As Long) As Long

如果系统已经连上了Internet,该函数就会返回一个非零的值。最后一个参数dwReserved,被留作以后扩展之用,在这里它必须等于零。参数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 lNameLen, 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 mvarIsConnectionConfigured = 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 pointer.

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 "InternetSetOptionA" (ByVal hInternet As Long, ByVal dwOption As Long, lpBuffer As Any, ByVal dwBufferLength As Long) As Long

InternetSetOption函数可用来改变各种Internet设置及当前网络进程的参数。将第一个参数hInternet的值设为零,因为我们将要改变系统的参数。参数dwOption能接收一个Flag值,表示我们将要改变的设置。在这里我们将用到INTERNET_OPTION_CONNECTED_STATE。参数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))

来源:upschool.cn
作者:
关键字:封装,WinInet,API函数
发表日期:2006-12-20 19:43:05

网页显示有限 阅读全文请下载本文完整版WORD文档

上一篇:VB邮件检查程序   下一篇:用Winsock制作一套聊天室和对话系统


2009-1-10 10:54:11
本文的相类似文章
  • API函数快速入门--怎样在VB中声明和使用API函数
  • 封装:不断发展的CPU保护之神
  • 如何在Oracle/2000中调用Windows API函数
  • ORACLE 应用经验(3)-DBMS_SQL封装过程
  • vb调用winInet API接口post数据到指定的url
  • 用API函数遍历指定驱动器、目录的文件
  • 用API函数实现文件夹列表
  • 利用API函数实现隐藏和显示桌面图标
  • 用API函数控制光驱的开关
  • 利用Api函数计算Windows从启动后所运行的总时间
  • 在学习中进步 在进步中成长 教程中国相随您的成长之路
    华腾联合科技股份有限公司版权所有
    广告联系:Rosibo@163.com