田敬軍
(唐山師范學院 計算機科學系,河北 唐山 063000)
網絡在給人們傳遞著各種各樣信息的同時也帶來了一些不良的元素,許多不益于青少年健康成長的內容層出不窮,這樣就需要一款使得青少年能夠健康上網的系統軟件,把所有成人、暴力、顛覆政府等不健康或是有害的網址都屏蔽掉,如果使用者輸入非法或不良的網址,將打不開網站頁面;而且除非輸入授權人的密碼,用戶無法退出這個監視系統,這樣可以避免青少年未經允許自行退出程序。
健康上網系統需要實現的功能主要有八個模塊:“上網限制”、“游戲限制”、“聊天限制”、“BT 限制”、“時間限制”、“健康設置”、“記錄”、“安全設置”,其中上網限制、時間限制和記錄是整個系統的核心。另有“常規”、 “密碼設置”、“開始監護”、“關于”以及“退出程序”等相關功能。
(1)“上網限制”模塊
限制瀏覽指定網站。在監控狀態下就可以對限制瀏覽的網址進行攔截,使網頁顯示不能打開的狀態。這一項的實現主要依賴于黑名單,即把限制瀏覽的網址加進黑名單里。
僅允許瀏覽指定網站。選擇后在監控狀態下只能打開指定的網站地址,而不能打開其它網址,這一項的實現主要依賴于白名單,即允許訪問的網址名單。用戶同樣可以自行對白名單內的網址進行添加、刪除和編輯等操作。
截獲網址。用來記錄使用者試圖打開但最終沒有打開的網站地址,即受限制的網址。如果選擇的是“限制瀏覽指定網站”,若輸入存在于黑名單中的網址,不但不能打開,而且會記錄下該網址以及試圖打開的次數和最后時間。
(2)“游戲限制”模塊
在此功能模塊中,對一些常見的網絡游戲進行限制,如魔獸、大話西游、CS等。在進行設置時,只需要將限制玩的游戲選中,進入監控狀態時會自動使選中的游戲不能進行,還可以自行添加限制玩的游戲。
(3)“聊天限制”模塊
在此功能模塊中,對一些常見的聊天工具進行限制,如QQ、MSN、網易泡泡等。
(4)“BT限制”模塊
對于常見的下載工具進行限制使用,如比特精靈、BitComet、eMule等。
(5)“時間限制”模塊
可以選擇是否啟動時間限制功能,在選擇啟動的情況下,可以添加允許上網的時間段。相應的分為每天、周一到周五和周末這三種不同的時間限制,可以分別設置每種時間限制的不同時間段,然后添加到允許上網的時間內。
(6)“健康設置”模塊
可以選擇是否啟動視力保護功能,在選擇啟動的情況下,可以設置多長時間將鎖住電腦幾分鐘。當上網時間達到一定時間間隔時,就會鎖住電腦幾分鐘,強制性的讓使用者進行視力休息,規定的時間到后會自動解鎖。
(7)“記錄”模塊
網址記錄功能。記錄下使用者在上網期間訪問過的所有網址,以便發現有不良信息的網址,將其加入黑名單中,這樣下次就無法再訪問了。
屏幕記錄功能。在監控狀態下,每隔2分鐘電腦會自動對屏幕進行抓圖,不管當時電腦屏幕上顯示的是什么,都會毫無疏漏的記錄下來,這樣家長可以非常容易的了解到使用者所觀看的內容,如果有不利于青少年身心發展的內容信息,家長都可以立刻就了解到,如果家長在其中發現了孩子的某些興趣所在,還可以因材施教因勢利導,根據孩子的興趣愛好對其進行定向培養。
(8)安全設置
在該模塊中實現的主要功能是隱藏任務欄圖標,目的是為了使未成年人不易發現自己是出于監護的狀態,同時防止他們自行刪除退出程序。如果選擇隱藏任務欄圖標,則必須通過預先設定的熱鍵來激活登錄管理員窗口。
(1)開始監護
選擇此項后,軟件會首先調用系統時間和數據庫中提前設置的允許上網時間段,如果當前時間屬于允許上網時間,則可以正常使用電腦,如果當前時間不在允許的時間段內,則立刻鎖住電腦屏幕,在此狀態下,可以切換到管理員狀態,需要輸入密碼進行轉換。
(2)“密碼設置”模塊
在該項功能中,提供了對密碼的修改,用戶可以自行修改軟件的密碼。只要孩子不知道密碼,就無法對系統進行刪除、卸載、退出等操作,以及擺脫受監控保護的狀態。
在電腦的注冊表中的根鍵 HKEY_LOCAL_MACHINE目錄下,有一個鍵
"Run"(SoftwareWindowsCurrentVersionRun),
Windows開機時會自動搜索注冊表,凡在該鍵下設置了正確路徑的有效程序就會自動運行,所以本系統的開機自動啟動的實現原理還是比較簡單的,就是把軟件的正確路徑放置在注冊表的該鍵目錄下。首先在delphi的type類型聲明中定義類型為TEdit的 Edit1和 Edit2,分別用來記錄要添加的數值名稱和數值數據(即自啟動程序的路徑),然后在變量定義中定義一個TRegistry類型的變量Reg,之后在代碼的主體部分就可以使用變量Reg來進行創建新鍵等操作。主要實現代碼為:
Reg:=TRegistry.Create; //創建一個新鍵
Reg.RootKey:=HKEY_LOCAL_MACHINE; //將根鍵設置為HKEY_LOCAL_MACHINE
Reg.OpenKey('SOFTWAREMicrosoftwindowsCurrentVer sionRun',true); //打開一個鍵
Reg.WriteString(Edit1.Text,Edit2.Text); //在 Reg這個鍵中寫入數據名稱和數據數值
Reg.CloseKey; //關閉鍵
隱藏進程也就是按下Ctrl+Alt+Del鍵時使程序不出現在任務管理器中,這樣就可以讓使用者不易發覺程序在運行。運行程序的隱藏可以通過 API HOOK技術來實現。API HOOK技術是一種用于改變 API執行結果的技術,計算機程序可以使用這個技術來達到隱藏的目的。
在上網限制中通過編輯黑白名單來規定可以訪問或者禁止訪問的網址,上網限制的界面如圖1所示,可以分別設置黑名單及白名單。

圖1 上網限制設置

圖2 黑名單的編輯
(1)黑/白名單的編輯界面
如圖 2所示,若要將某一網址加進黑/白名單,可在文本框內輸入網址,如http://baidu.com,可以只輸入簡潔網址baidu.com,也可以全部輸入,在點擊“添加”之后,都會自動轉化成簡潔的網址形式。可以通過“編輯”和“刪除”來對已有的黑/白網址進行修改或刪除。
(2)黑名單的實現
首先把需要屏蔽的網址寫在INI文件中,格式如下:
a1=xxxx
...
然后用 OnBeforeNavigate過程檢測打開的網址是不是存在于INI文件中,不是則打開這個鏈接,是就不打開此鏈接。主體代碼為:
while (i begin acd:=vValues.Values[vValues.Names[I]]; end; case AnsiContainsText(url,acd) of//檢查URL是否是INI文件中的。 True: Cancel:=true; False: Cancel:=False; end; 為了提高系統的可移植性,可以同時將包括黑名單在內的相關數據寫入了注冊表,在注冊表內的位置為 HKEY_LOCAL_MACHINE/SOFTWAER/NMUI,其中NMUI是軟件的名字。 在該模塊中,可以對一些常見的網絡游戲進行限制使用。如圖3,可以選擇一個或多個想要禁止的游戲,還可以添加刪除某些游戲。在監護狀態下,如果啟動被禁止的游戲,會顯示“該程序已被禁止”字樣,游戲程序也不運行。 圖3 游戲限制 在程序的單元可見部分(interface)的函數聲明function里,首先定義一個名為KillTask類型為boolean的函數,其參數為 ExeFileName:string,如要禁止運行某個游戲的可執行程序,文件名可為:*.exe。函數的參數取決于用戶的選擇,用戶挑選好要禁止的程序后所有的數據都會存儲在數據庫的程序名單列表里,軟件運行時,與數據庫中數據進行逐行比較,若遇到相符的數據,則返回參數,此時可以繼續進行下面的編碼。 ... FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); FProcessEntry32.dwSize := SizeOf(FProcessEntry32); ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32); while Integer(ContinueLoop) <> 0 do begin if ((UpperCase(ExtractFileName (FProcessEntry32.szExeFile)) = UpperCase(ExeFileName)) or (UpperCase(FProcessEntry32.szExeFile) = UpperCase(ExeFileName))) then Result:=Integer(TerminateProcess(OpenProcess(PROCES S_TERMINATE,BOOL(0),FProcessEntry32.th32ProcessID),0)); ContinueLoop := Process32Next(FSnapshotHandle,FProcessEntry32); ….. 可以設置每天或者周一到周五或者周末的允許上網時間段,如下圖4示。 圖4 時間限制 在選擇“啟用時間限制功能”后,如果處于監護狀態下,就會對系統時間進行檢查,如果當前時間不屬于允許上網的時間,就會對電腦進行封鎖。可以看到電腦屏幕會整個變成灰暗色,中間顯示“現在不允許您使用電腦,本機已被鎖定。”并且可以通過輸入密碼切換到管理員狀態。 ... HWND hProgram=FindWindow("Progman", "Program Manager"); HWND hChild=FindWindowEx(hProgram,NULL, "SHELLDLL_DefView",NULL); ::EnableWindow(hChild,FALSE); ::EnableWindow(FindWindow("Shell_TrayWnd", NULL),false); //鎖定鍵盤 TRegistry*reg=0; try{reg=new TRegistry(); reg->RootKey=HKEY_CURRENT_USER; AnsiStringKeyName="Software\microsoft\windows\curr entversion\policies\system"; if(reg->OpenKey(KeyName,true)) {reg->WriteString("DisableTaskMgr","0"); reg->CloseKey();} }catch(...){} if(reg){delete reg; reg=NULL;} //屏蔽任務管理器(即ctrl+alt+del) ShowWindow(FindWindow("Shell_TrayWnd",0),SW_HI DE); //隱藏開始菜單 解鎖是封鎖的逆過程,即先解鎖鍵盤,再解鎖任務管理器,最后顯示開始菜單。 健康設置,也是讀取時間,達到規定的時間時,對電腦進行封鎖,封鎖界面有自動倒計時功能,在規定的鎖住電腦時間限達到后,可以自動解鎖,繼續正常使用電腦,當然,如果用戶不愿意等待,可以直接輸入密碼進入管理狀態。 在該模塊中也和時間限制原理一樣,即到一定時間后執行封鎖電腦操作,和時間限制調用的是相同的函數。 在記錄中功能中,可以記錄下所有訪問過的網址以及屏幕抓圖記錄,上網限制中的“截獲網址”功能實際上也屬于記錄功能。屏幕記錄功能可以記錄下整個電腦畫面,每隔兩分鐘自動記錄一次并存放在文件夾ScreenLog中。可以在不啟動軟件的情況下,直接打開系統固有文件夾中的ScreenLogView可執行文件查看屏幕記錄。 屏幕抓圖是利用windows的API函數CapScreen來實現的,可以全屏拷貝、窗體拷貝,并支持圖形存儲功能。 ….. tmpBitmap.Width:= Screen.Width; tmpBitmap.Height:= Screen.Height; //捕獲屏幕圖像 Bitblt(tmpBitmap.Canvas.Handle,0,0,Screen.Width,Screen.Height,DeskDC,0,0,SRCCOPY); OutBitmap; finally tmpBitmap.FreeImage; tmpBitmap.Free; iBitmapValide:=False; ReleaseDC(DeskWnd,DeskDC); ….. 隱藏任務欄圖標的實現。系統托盤是一個在任務欄右角的小方框,在托盤的應用程序可以顯示小圖標。若要隱藏程序的任務欄圖標,可以應用 ShowWindow函數并傳給它Application.Handle窗口句柄,即ShowWindow (Application->Handle, SW_HIDE);然后設置主窗口的Visible屬性為false來隱藏它,但是后來在程序測試的時候發現通過ShowWindow來隱藏窗口的任務欄圖標是不持久的,某些動作會使任務欄圖標重現,后來在網上查閱和參考了很多資料,做了一些改動,就是將應用程序窗口設為Tool Window來移走程序的任務欄圖標,Tool windows永遠不會有任務欄圖標。要實現應用程序窗口為Tool Window,可以調用API函數GetWindowLong和 SetWindowLong來完成。 ….. var dwExStyle : DWORD; begin dwExStyle:=GetWindowLong(Application.Handle, GWL_EXSTYLE); dwExStyle := dwExStyle + WS_EX_TOOLWINDOW; SetWindowLong(Application.Handle, GWL_EXSTYLE, dwExStyle); …… 闡述了實現健康上網軟件的關鍵技術,主要利用Delphi中的系統函數,結合Windows API,對計算機系統進行控制,從而實現軟件的預定目標。2.4 游戲限制

2.5 時間限制

2.6 記錄
2.7 安全設置
3 結束語