用VB編寫(xiě)網(wǎng)絡(luò)監(jiān)控軟件

字號(hào):

隨著互聯(lián)網(wǎng)迅速的膨脹發(fā)展,學(xué)校、企業(yè)、網(wǎng)吧大部分都通過(guò)局域網(wǎng)連上了Internet,但是由于人員多、上網(wǎng)機(jī)器分散,給上網(wǎng)管理帶來(lái)了種種不便。為此,筆者編寫(xiě)了一個(gè)小程序,在局域網(wǎng)內(nèi)的每個(gè)工作站運(yùn)行此程序,可以對(duì)每個(gè)工作站訪問(wèn)的網(wǎng)址進(jìn)行記錄。
    在網(wǎng)吧中,可以為網(wǎng)絡(luò)犯罪提供可靠的依據(jù);在學(xué)校里,我們可以及時(shí)地限制同學(xué)們?cè)L問(wèn)非法站點(diǎn)和有不健康內(nèi)容的網(wǎng)站。程序用VB6.0編寫(xiě),下面是程序?qū)崿F(xiàn)的步驟。該程序在Windows 98和IE5.5下調(diào)試通過(guò)。
    一、程序核心
    本程序的核心是通過(guò)API函數(shù)獲得窗口句柄并獲得瀏覽器訪問(wèn)的網(wǎng)址,在此基礎(chǔ)上可以實(shí)現(xiàn)用Winsock控件進(jìn)行遠(yuǎn)程的監(jiān)視和管理。
    1.先創(chuàng)建一個(gè)工程并在窗口Form1中,并聲明下面的四個(gè)API函數(shù)和兩個(gè)常量:
    Option Explicit Private Declare Function FindWindow Lib ″user32″ Alias ″FindWindowA″ (ByVal lpCl assName As String, ByVal lpWindowName As String) As Long
    ′Findwindow函數(shù)的功能是找到當(dāng)前運(yùn)行的IE窗口的url地址的句柄
    Private Declare Function SendMessage Lib ″user32″ Alias ″SendMessageA″ (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Long) As Long
    ′SendMessage函數(shù)的功能是向操作系統(tǒng)發(fā)送一條消息
    Private Declare Function FindWindowEx Lib ″user32″ Alias ″FindWindowExA″ (ByVal hWnd1 As Long,ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
    ′FindwindowEx函數(shù)的功能是找到子窗體的句柄
    Private Declare Function SendMessageByString Lib ″user32″ Alias ″SendMessageA″ (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As String) As Long
    Private Const WM_GETTEXT = &HD
    Private Const WM_GETTEXTLENGTH = &HE
    2.在窗體上添加Command控件,并命名為GetURLstring,單擊此命令按鈕,并為其添加下面的程序代碼:
    Private Sub GetURLstring_Click()
    On Error GoTo CallErrorA
    Dim sClassName As String ′設(shè)定一個(gè)字符串變量,是類變量
    Dim lhwnd As Long ′設(shè)定一個(gè)長(zhǎng)整形變量用來(lái)接收函數(shù)返回值
    Dim WindowHandle As Long ′設(shè)定一個(gè)長(zhǎng)整形變量用來(lái)接收函數(shù)的返回句柄
    lhwnd = 0
    sClassName = (″IEFrame″)
    lhwnd = FindWindowEx(lhwnd, 0, sClassName, vbNullString) ′獲得URL地址欄的句柄,獲得IE窗口的句柄
    sClassName = (″WorkerA″)
    lhwnd = FindWindowEx(lhwnd, 0, sClassName, vbNullString) ′獲得IE窗口的工作區(qū)的句柄
    sClassName = (″ReBarWindow32″)
    lhwnd = FindWindowEx(lhwnd, 0, sClassName, vbNullString) ′獲得IE窗口的菜單欄的句柄
    sClassName = (″ComboBoxEx32″)
    lhwnd = FindWindowEx(lhwnd, 0, sClassName, vbNullString) ′獲得IE窗口的下拉菜單的句柄
    sClassName = (″ComboBox″)
    lhwnd = FindWindowEx(lhwnd, 0, sClassName, vbNullString) ′獲得IE窗口的下拉菜單當(dāng)前項(xiàng)的句柄
    sClassName = (″Edit″)
    lhwnd = FindWindowEx(lhwnd, 0, sClassName, vbNullString) ′獲得這個(gè)下拉菜單的編輯框句柄
    WindowHandle = lhwnd ′接收當(dāng)前我們想要的句柄
    Dim buffer As String ′設(shè)定字符串變量接收當(dāng)前的字符串
    Dim TextLength As Long ′設(shè)定長(zhǎng)整形變量接收字符串的長(zhǎng)度
    TextLength = SendMessage(WindowHandle, WM_GETTEXTLENGTH, 0&, 0&) ′向系統(tǒng)發(fā)送獲得IE窗口的地址欄中的字符串長(zhǎng)度命令
    buffer = String(TextLength, 0) ′
    Call SendMessageByString(WindowHandle, WM_GETTEXT, TextLength + 1, buffer) ′向系統(tǒng)發(fā)送獲得IE窗體地址欄中的字符串命令
    If buffer = ″″ Then
    MsgBox ″MicroSoft InternetExplorer瀏覽器沒(méi)有運(yùn)行.″, vbOKOnly
    Else
    MsgBox buffer ′IE運(yùn)行時(shí)顯示當(dāng)前網(wǎng)址
    End If
    Exit Sub
    CallErrorA:
    MsgBox Err.Description
    Err.Clear
    End Sub