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

字號:

隨著互聯(lián)網(wǎng)迅速的膨脹發(fā)展,學(xué)校、企業(yè)、網(wǎng)吧大部分都通過局域網(wǎng)連上了Internet,但是由于人員多、上網(wǎng)機器分散,給上網(wǎng)管理帶來了種種不便。為此,筆者編寫了一個小程序,在局域網(wǎng)內(nèi)的每個工作站運行此程序,可以對每個工作站訪問的網(wǎng)址進(jìn)行記錄。
    在網(wǎng)吧中,可以為網(wǎng)絡(luò)犯罪提供可靠的依據(jù);在學(xué)校里,我們可以及時地限制同學(xué)們訪問非法站點和有不健康內(nèi)容的網(wǎng)站。程序用VB6.0編寫,下面是程序?qū)崿F(xiàn)的步驟。該程序在Windows 98和IE5.5下調(diào)試通過。
    一、程序核心
    本程序的核心是通過API函數(shù)獲得窗口句柄并獲得瀏覽器訪問的網(wǎng)址,在此基礎(chǔ)上可以實現(xiàn)用Winsock控件進(jìn)行遠(yuǎn)程的監(jiān)視和管理。
    1.先創(chuàng)建一個工程并在窗口Form1中,并聲明下面的四個API函數(shù)和兩個常量:
    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)前運行的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è)定一個字符串變量,是類變量
    Dim lhwnd As Long ′設(shè)定一個長整形變量用來接收函數(shù)返回值
    Dim WindowHandle As Long ′設(shè)定一個長整形變量用來接收函數(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)前項的句柄
    sClassName = (″Edit″)
    lhwnd = FindWindowEx(lhwnd, 0, sClassName, vbNullString) ′獲得這個下拉菜單的編輯框句柄
    WindowHandle = lhwnd ′接收當(dāng)前我們想要的句柄
    Dim buffer As String ′設(shè)定字符串變量接收當(dāng)前的字符串
    Dim TextLength As Long ′設(shè)定長整形變量接收字符串的長度
    TextLength = SendMessage(WindowHandle, WM_GETTEXTLENGTH, 0&, 0&) ′向系統(tǒng)發(fā)送獲得IE窗口的地址欄中的字符串長度命令
    buffer = String(TextLength, 0) ′
    Call SendMessageByString(WindowHandle, WM_GETTEXT, TextLength + 1, buffer) ′向系統(tǒng)發(fā)送獲得IE窗體地址欄中的字符串命令
    If buffer = ″″ Then
    MsgBox ″MicroSoft InternetExplorer瀏覽器沒有運行.″, vbOKOnly
    Else
    MsgBox buffer ′IE運行時顯示當(dāng)前網(wǎng)址
    End If
    Exit Sub
    CallErrorA:
    MsgBox Err.Description
    Err.Clear
    End Sub