程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> Visual Basic語言 >> VB綜合教程 >> 開發網絡應用的5個技巧

開發網絡應用的5個技巧

編輯:VB綜合教程
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=“接收Email”。
  在Form上加入一個按鈕(Getmail),將其Caption改為取郵件。
  在Getmail_Click()事件中加入以下程序代碼,程序的功能是使我們接收Email。
  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,這樣當我們連接到郵件服務器時,新的信息會自動下載到本地端。接下來,將您所使用的Email地址、全名、口令和下載路徑等一一設置好。
  2.程序設計
  在Form上加入一個MAPIMessage控件,取名為MAPIMessage1;加入一個MAPISession控件,取名為MAPISession1;並加入三個TextBox控件,取名為Subject、Content和Addr。並在三個TextBox前各加入一個Label,將Caption分別改為標題、內容和地址。
  將MAPIMessage1的各項屬性設置如下:
  ●DownLoadMail=TRUE;
  ●LogonUI=TRUE;
  ●NewSession=FALSE;
  ●UserName=“發送Email”。
  這裡將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來傳送Email,同時用MessageBox通知用戶發送成功。
  在Logoff_Click()事件中加入以下程序代碼,程序的功能是使我們離開郵件服務器:
  MAPIS1.SignOff
  在Send_Click()事件中加入以下程序代碼,程序的功能是使我們發送Email:
  MAPIMessage1.Compose
  MAPIMessage1.RecipDisplayName=Addr.text
  MAPIMessage1.AddressResolveUI=TRUE
  MAPIMessage1.MsgSubject=Subject.text
  MAPIMessage1.MsgNoteText=Content.text
  MAPIMessage1.Send
  MsgBox“您發送成功啦!”
  其中Compose命令的主要目的是使您可以改變RecipDisplayName的內容,將所需傳送的Email地址、主題和文章內容分別填入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->

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