VisualBasic6.0(以下简称VB6)以其强大的功能为广大软件开发人员所喜爱,被用来开发各种应用程序。随着Internet的迅猛发展,VB6在网络方面的应用开发也越来越多。本文介绍笔者在实际编程开发中总结的5个技巧,希望能为进行网络开发的朋友们提供一点参考。 连通检测 许多应用程序常常需要在程序中直接进行联网操作,以便进行一些必要的处理(如在线注册和在线帮助等),这就要求我们在程序中建立某些连接。很多软件在不知用户是否联网的情况下就启动浏览器查找网址,结果只能查出一错误网页,既浪费用户时间又没有任何效果。如果应用程序在查找网页之前能自动判断用户是否已经联网,就会节约许多时间,提高程序运行效率。 下面是实现网络连通检测的VB6代码: PrivateSubForm_Load() IfIsConnected=TRUEThen MsgBox(“您已经连通了Internet!”) EndIf IfIsConnected=FALSEThen MsgBox(“您还没有连通Internet!”) EndIf EndSub OptionExplicit /*有关的API声明和定义*/ PublicDeclareFunctionRasEnumConnectionsLib“RasApi32.dll”Alias“RasEnumConnectionsA”(lpRasConAsAny,lpcbAsLong,lpcConnectionsAsLong)AsLong PublicDeclareFunctionRasGetConnectStatusLib“RasApi32.dll”Alias“RasGetConnectStatusA”(ByValhRasConAsLong,lpStatusAsAny)AsLong /*常数和变量的设定*/ PublicConstRAS95_MaxEntryName=256 PublicConstRAS95_MaxDeviceType=16 PublicConstRAS95_MaxDeviceName=32 PublicTypeRASCONN95 dwSizeAsLong hRasConAsLong szEntryName(RAS95_MaxEntryName)AsByte szDeviceType(RAS95_MaxDeviceType)AsByte szDeviceName(RAS95_MaxDeviceName)AsByte EndType PublicTypeRASCONNSTATUS95 dwSizeAsLong RasConnStateAsLong dwErrorAsLong szDeviceType(RAS95_MaxDeviceType)AsByte szDeviceName(RAS95_MaxDeviceName)AsByte EndType /*函数IsConnected返回连通的状态,如果为True则表示已连通*/ PublicFunctionIsConnected()AsBoolean DimTRasCon(255)AsRASCONN95 DimlgAsLong DimlpconAsLong DimRetValAsLong DimTstatusAsRASCONNSTATUS95 TRasCon(0).dwSize=412 lg=256*TRasCon(0).dwSize RetVal=RasEnumConnections(TRasCon(0),lg,lpcon) IfRetVal<>0Then MsgBox“错误” ExitFunction EndIf Tstatus.dwSize=160 RetVal=RasGetConnectStatus(TRasCon(0) .hRasCon,Tstatus) IfTstatus.RasConnState=&H2000Then IsConnected=TRUE Else IsConnected=FALSE EndIf EndFunction 启动拨号网络中的连接 由于拨号网络不是一个可执行文件,所以要启动拨号网络,需要借助explorer.exe。但若是要启动拨号网络中的某一个连接,则要借助rundll.exe和rnaui.dll两个文件。启动方法如下(假定此连接名称为163): Shell“rundllrnaui.dll,RnaDial163”,vbNormalFocus 上面假定了连接名称,但在实际编程中我们是不知道连接名称的。在窗体上放置一个命令按钮(cmdCallConnect),在其单击事件中进行连接处理。下面的代码介绍如何取得默认的连接名称并启动它: OptionExplicit /*有关的API声明*/ PrivateDeclareFunctionRegOpenKeyExLib“advapi32”Alias“RegOpenKeyExA”(ByValhKeyAsLong,ByVallpSubKeyAsString,ByValulOptionsAsLong,ByValsamDesiredAsLong,phkResultAsLong)AsLong PrivateDeclareFunctionRegQueryValueExLib“advapi32”Alias“RegQueryValueExA”(ByValhKeyAsLong,ByVallpValueNameAsString,ByVallpReservedAsLong,ByReflpTypeAsLong,ByValszDataAsString,ByReflpcbDataAsLong)AsLong PrivateDeclareFunctionRegCloseKeyLib“advapi32”(ByValhKeyAsLong)AsLong /*常数的设定*/ ConstHKEY_CURRENT_USER=&H80000001 ConstERROR_SUCCESS=0 在命令按钮(cmdCallConnect)中加入如下代码: PrivateSubcmdCallConnect_Click() /*启动默认拨号连接*/ Shell“rundllrnaui.dll,RnaDial”+GetConnect,vbNormalFocus EndSub /*取得连接的函数(GetConnect)*/ PublicFunctionGetConnect()AsString DimhKeyAsLong DimSubKeyAsString /*主键*/ hKey=HKEY_CURRENT_USER /*子键*/ SubKey=“RemoteAccess” /*取得默认连接名*/ GetConnect=GetRegValue(hKey,SubKey,“Default”) EndFunction /*取得注册的函数(GetRegValue)*/ PublicFunctionGetRegValue(hKeyAsLong,lpszSubKeyAsString,szKeyAsString)AsVariant OnErrorGoToErrorRoutineErr: DimphkResultAsLong DimlResultAsLong DimszBufferAsString DimlBuffSizeAsLong /*创建缓冲区*/ szBuffer=Space(255) lBuffSize=Len(szBuffer) /*打开注册键*/ RegOpenKeyExhKey,lpszSubKey,0,1,phkResult /*取得查询结果*/ lResult=RegQueryValueEx(phkResult,szKey,0,0,szBuffer,lBuffSize) /*关闭注册键*/ RegCloseKeyphkResult /*返回结果*/ IflResult=ERROR_SUCCESSThen GetRegValue=Left(szBuffer,lBuffSize-1) Else GetRegValue=“” EndIf ExitFunction /*意外处理*/ ErrorRoutineErr: GetRegValue=“” EndFunction 设计E-mail的接收部分 在VB6菜单上点击“工程/部件...”,弹出“部件”对话框,在对话框的控件卡中选中MicrosoftMAPIControls6.0控件,点击“确定”按钮后,工具箱上增加了MAPIMessage和MAPISession两个图标。 在Form上加入一个MAPIMessage控件,取名为MAPIMessage1;再加入一个MAPISession控件,取名为MAPISession1;再加入三个TextBox控件,分别取名为Subject、Content和Indexno,将它们的Caption分别改为邮件标题、邮件内容和邮件索引号;在TextBox前各加入一个Label控件,将Caption分别改为标题、内容和索引号。 将MAPIMessage1的各项属性设置如下: ●DownLoadMail=TRUE; ●LogonUI=TRUE; ●NewSession=FALSE; ●UserName=“接收Email”。 在Form上加入一个按钮(Getmail),将其Caption改为取邮件。 在Getmail_Click()事件中加入以下程序代码,程序的功能是使我们接收Email。 MAPIMessage1.Fetch Form1.Caption=MAPIMessage1.MsgCount MAPIMessage1.MsgIndex=CINT(Indexno.text) Subject.Text=MAPIMessage1.MsgNoteText Content.Text=MAPIMessage1.MsgSubject 其中Fetch命令用来将信件抓到系统存储器的inbuffer中。我们将信件抓回来后,可以通过MsgCount属性知道信件数量,接着可以用MsgIndex设置要看哪一封信件的内容、标题等。 设计E-mail的发送部分 1.参数设置 进入Exchange系统,选择新增设置文件后屏幕上会显示所需要的信息服务,选择InternetMail。 把设置文件的名称设为test。屏幕会显示两个选项,您可以选择以Modem方式或以Network方式连接。笔者所用的是Modem方式;假若您是使Internet专线,就要选择Network方式。 选择Modem方式后,Exchange会要求我们输入邮件服务器的IP地址。接着将TransformMessage的模式设置为Automatic,这样当我们连接到邮件服务器时,新的信息会自动下载到本地端。接下来,将您所使用的Email地址、全名、口令和下载路径等一一设置好。 2.程序设计 在Form上加入一个MAPIMessage控件,取名为MAPIMessage1;加入一个MAPISession控件,取名为MAPISession1;并加入三个TextBox控件,取名为Subject、Content和Addr。并在三个TextBox前各加入一个Label,将Caption分别改为标题、内容和地址。 将MAPIMessage1的各项属性设置如下: ●DownLoadMail=TRUE; ●LogonUI=TRUE; ●NewSession=FALSE; ●UserName=“发送Email”。 这里将DownLoadMail设置为TRUE,当程序和邮件服务器第一次连接时,会将新的邮件下载到本地端。将LogonUI设置为TRUE,则当您程序中Logon名称输入错误时,系统会显示一个MessageBox来让您输入正确的名称。 由于这个程序仅使用一个Session,所以可将NewSession设置成FALSE。如果您有许多Session要建立的话,则将它设置成TRUE。UserName中所填的,是我们在Exchange中所新增的设置文件名称,如果没有填内容的话,系统将会显示一些MessageBox请您输入文件。 在Form上加入三个按钮,Logon、Logoff和Send,并分别将它们的Caption改为登录、离网和发送。 在Logon_Click()事件中加入以下程序代码,程序的功能是使我们登录到邮件服务器: MAPISession1.SignOn MAPIMessage1.SessionID=MAPISession1.SessionID sgBox“YourIDis”+Str (MAPISession1.SessionID) 其中MAPISession1.SignOn是作登录的动作。在登录时,因为已经将MAPIMessage1控件的DownLoadMail属性设置为TRUE,所以可以在屏幕上看到MessageBox,显示系统正在下载邮件。登录成功后,系统会传回一个SessionID,将该ID填入MAPIMessage1的SessionID中,这样就可以利用该Session来传送Email,同时用MessageBox通知用户发送成功。 在Logoff_Click()事件中加入以下程序代码,程序的功能是使我们离开邮件服务器: MAPIS1.SignOff 在Send_Click()事件中加入以下程序代码,程序的功能是使我们发送Email: MAPIMessage1.Compose MAPIMessage1.RecipDisplayName=Addr.text MAPIMessage1.AddressResolveUI=TRUE MAPIMessage1.MsgSubject=Subject.text MAPIMessage1.MsgNoteText=Content.text MAPIMessage1.Send MsgBox“您发送成功啦!” 其中Compose命令的主要目的是使您可以改变RecipDisplayName的内容,将所需传送的Email地址、主题和文章内容分别填入RecipDisplayName、MsgSubject和MsgNoteText,接着用Send命令发送出去。 访问Internet并调用Explorer 1.实现方法和控件介绍 首先在VB6菜单上点击“工程/部件...”,弹出“部件”对话框,在对话框的控件卡中选中MicrosoftInternetControls控件,点击“确定”按钮后工具箱上增加一个WebBrowser图标,将它加到Form中。 该控件有以下几个重要的方法和事件: ●GoHome:装入IE设定的起始页; ●Navigate:装入页面,如Object.Navigateurl,其中url为URL地址,如http://www.microsoft.com; ●GoBack:返回上一个页面; ●GoForward:进入下一个页面; ●Stop:停止载入页面; ●BeforeNavigateEvent:在每次装入页面前调用该事件; ●StatusTextChangeEvent:每次浏览器的操作状态改变时调用该事件。 2.具体的访问方法 将WebBrowser图标添加到Form中。并在Form上添加4个命令按钮,Name属性分别为:GoButton、BackButton、ForwardButton和StopButton,通过这4个命令按钮可以实现对浏览器的操作。在Form上添加一个TextBox控件,用来输入和显示当前的页面地址。在Form上添加一个Label控件,用来显示当前浏览器操作状态。 /*载入Form*/ PrivateSubForm_Load() /*程序装入后进入IE设定的起始页*/ WebBrowser1.GoHome EndSub /*改变Form尺寸*/ PrivateSubForm_Resize() /*改变窗口大小后同时改变控件的大小*/ WebBrowser1.Width=Form1.ScaleWidth WebBrowser1.Height=Form1.ScaleHeight-900 Label1.Width=Form1.ScaleWidth Label1.Top=Form1.ScaleHeight-300 EndSub PrivateSubBackButton_Click() /*返回上一个页面*/ WebBrowser1.GoBack EndSub PrivateSubForwardButton_Click() /*进入下一个页面*/ WebBrowser1.GoForward EndSub PrivateSubGoButton_Click() /*浏览输入的页面*/ WebBrowser1.Navigate(Text1.Text) EndSub PrivateSubStopButton_Click() /*停止浏览*/ WebBrowser1.Stop EndSub PrivateSubText1_KeyPress(KeyAsciiAsInteger) /*输入地址后进行浏览*/ IfKeyAscii=13Then WebBrowser1.Navigate(Text1.Text) EndIf EndSub PrivateSubWebBrowser1_BeforeNavigate(ByValURLAsString,ByValFlagsAsLong,ByValTargetFrameNameAsString,PostDataAsVariant,ByValHeadersAsString,CancelAsBoolean) /*将当前显示的页面的URL地址显示在Text1上*/Text1.Text=URL EndSub PrivateSubWebBrowser1_StatusTextChange(ByValTextAsString) /*Label1显示当前页面装入情况*/ Label1.Caption=Text EndSub->
|