田敬軍
(唐山師范學(xué)院 計(jì)算機(jī)科學(xué)系,河北 唐山 063000)
網(wǎng)絡(luò)在給人們傳遞著各種各樣信息的同時(shí)也帶來了一些不良的元素,許多不益于青少年健康成長(zhǎng)的內(nèi)容層出不窮,這樣就需要一款使得青少年能夠健康上網(wǎng)的系統(tǒng)軟件,把所有成人、暴力、顛覆政府等不健康或是有害的網(wǎng)址都屏蔽掉,如果使用者輸入非法或不良的網(wǎng)址,將打不開網(wǎng)站頁面;而且除非輸入授權(quán)人的密碼,用戶無法退出這個(gè)監(jiān)視系統(tǒng),這樣可以避免青少年未經(jīng)允許自行退出程序。
健康上網(wǎng)系統(tǒng)需要實(shí)現(xiàn)的功能主要有八個(gè)模塊:“上網(wǎng)限制”、“游戲限制”、“聊天限制”、“BT 限制”、“時(shí)間限制”、“健康設(shè)置”、“記錄”、“安全設(shè)置”,其中上網(wǎng)限制、時(shí)間限制和記錄是整個(gè)系統(tǒng)的核心。另有“常規(guī)”、 “密碼設(shè)置”、“開始監(jiān)護(hù)”、“關(guān)于”以及“退出程序”等相關(guān)功能。
(1)“上網(wǎng)限制”模塊
限制瀏覽指定網(wǎng)站。在監(jiān)控狀態(tài)下就可以對(duì)限制瀏覽的網(wǎng)址進(jìn)行攔截,使網(wǎng)頁顯示不能打開的狀態(tài)。這一項(xiàng)的實(shí)現(xiàn)主要依賴于黑名單,即把限制瀏覽的網(wǎng)址加進(jìn)黑名單里。
僅允許瀏覽指定網(wǎng)站。選擇后在監(jiān)控狀態(tài)下只能打開指定的網(wǎng)站地址,而不能打開其它網(wǎng)址,這一項(xiàng)的實(shí)現(xiàn)主要依賴于白名單,即允許訪問的網(wǎng)址名單。用戶同樣可以自行對(duì)白名單內(nèi)的網(wǎng)址進(jìn)行添加、刪除和編輯等操作。
截獲網(wǎng)址。用來記錄使用者試圖打開但最終沒有打開的網(wǎng)站地址,即受限制的網(wǎng)址。如果選擇的是“限制瀏覽指定網(wǎng)站”,若輸入存在于黑名單中的網(wǎng)址,不但不能打開,而且會(huì)記錄下該網(wǎng)址以及試圖打開的次數(shù)和最后時(shí)間。
(2)“游戲限制”模塊
在此功能模塊中,對(duì)一些常見的網(wǎng)絡(luò)游戲進(jìn)行限制,如魔獸、大話西游、CS等。在進(jìn)行設(shè)置時(shí),只需要將限制玩的游戲選中,進(jìn)入監(jiān)控狀態(tài)時(shí)會(huì)自動(dòng)使選中的游戲不能進(jìn)行,還可以自行添加限制玩的游戲。
(3)“聊天限制”模塊
在此功能模塊中,對(duì)一些常見的聊天工具進(jìn)行限制,如QQ、MSN、網(wǎng)易泡泡等。
(4)“BT限制”模塊
對(duì)于常見的下載工具進(jìn)行限制使用,如比特精靈、BitComet、eMule等。
(5)“時(shí)間限制”模塊
可以選擇是否啟動(dòng)時(shí)間限制功能,在選擇啟動(dòng)的情況下,可以添加允許上網(wǎng)的時(shí)間段。相應(yīng)的分為每天、周一到周五和周末這三種不同的時(shí)間限制,可以分別設(shè)置每種時(shí)間限制的不同時(shí)間段,然后添加到允許上網(wǎng)的時(shí)間內(nèi)。
(6)“健康設(shè)置”模塊
可以選擇是否啟動(dòng)視力保護(hù)功能,在選擇啟動(dòng)的情況下,可以設(shè)置多長(zhǎng)時(shí)間將鎖住電腦幾分鐘。當(dāng)上網(wǎng)時(shí)間達(dá)到一定時(shí)間間隔時(shí),就會(huì)鎖住電腦幾分鐘,強(qiáng)制性的讓使用者進(jìn)行視力休息,規(guī)定的時(shí)間到后會(huì)自動(dòng)解鎖。
(7)“記錄”模塊
網(wǎng)址記錄功能。記錄下使用者在上網(wǎng)期間訪問過的所有網(wǎng)址,以便發(fā)現(xiàn)有不良信息的網(wǎng)址,將其加入黑名單中,這樣下次就無法再訪問了。
屏幕記錄功能。在監(jiān)控狀態(tài)下,每隔2分鐘電腦會(huì)自動(dòng)對(duì)屏幕進(jìn)行抓圖,不管當(dāng)時(shí)電腦屏幕上顯示的是什么,都會(huì)毫無疏漏的記錄下來,這樣家長(zhǎng)可以非常容易的了解到使用者所觀看的內(nèi)容,如果有不利于青少年身心發(fā)展的內(nèi)容信息,家長(zhǎng)都可以立刻就了解到,如果家長(zhǎng)在其中發(fā)現(xiàn)了孩子的某些興趣所在,還可以因材施教因勢(shì)利導(dǎo),根據(jù)孩子的興趣愛好對(duì)其進(jìn)行定向培養(yǎng)。
(8)安全設(shè)置
在該模塊中實(shí)現(xiàn)的主要功能是隱藏任務(wù)欄圖標(biāo),目的是為了使未成年人不易發(fā)現(xiàn)自己是出于監(jiān)護(hù)的狀態(tài),同時(shí)防止他們自行刪除退出程序。如果選擇隱藏任務(wù)欄圖標(biāo),則必須通過預(yù)先設(shè)定的熱鍵來激活登錄管理員窗口。
(1)開始監(jiān)護(hù)
選擇此項(xiàng)后,軟件會(huì)首先調(diào)用系統(tǒng)時(shí)間和數(shù)據(jù)庫中提前設(shè)置的允許上網(wǎng)時(shí)間段,如果當(dāng)前時(shí)間屬于允許上網(wǎng)時(shí)間,則可以正常使用電腦,如果當(dāng)前時(shí)間不在允許的時(shí)間段內(nèi),則立刻鎖住電腦屏幕,在此狀態(tài)下,可以切換到管理員狀態(tài),需要輸入密碼進(jìn)行轉(zhuǎn)換。
(2)“密碼設(shè)置”模塊
在該項(xiàng)功能中,提供了對(duì)密碼的修改,用戶可以自行修改軟件的密碼。只要孩子不知道密碼,就無法對(duì)系統(tǒng)進(jìn)行刪除、卸載、退出等操作,以及擺脫受監(jiān)控保護(hù)的狀態(tài)。
在電腦的注冊(cè)表中的根鍵 HKEY_LOCAL_MACHINE目錄下,有一個(gè)鍵
"Run"(SoftwareWindowsCurrentVersionRun),
Windows開機(jī)時(shí)會(huì)自動(dòng)搜索注冊(cè)表,凡在該鍵下設(shè)置了正確路徑的有效程序就會(huì)自動(dòng)運(yùn)行,所以本系統(tǒng)的開機(jī)自動(dòng)啟動(dòng)的實(shí)現(xiàn)原理還是比較簡(jiǎn)單的,就是把軟件的正確路徑放置在注冊(cè)表的該鍵目錄下。首先在delphi的type類型聲明中定義類型為TEdit的 Edit1和 Edit2,分別用來記錄要添加的數(shù)值名稱和數(shù)值數(shù)據(jù)(即自啟動(dòng)程序的路徑),然后在變量定義中定義一個(gè)TRegistry類型的變量Reg,之后在代碼的主體部分就可以使用變量Reg來進(jìn)行創(chuàng)建新鍵等操作。主要實(shí)現(xiàn)代碼為:
Reg:=TRegistry.Create; //創(chuàng)建一個(gè)新鍵
Reg.RootKey:=HKEY_LOCAL_MACHINE; //將根鍵設(shè)置為HKEY_LOCAL_MACHINE
Reg.OpenKey('SOFTWAREMicrosoftwindowsCurrentVer sionRun',true); //打開一個(gè)鍵
Reg.WriteString(Edit1.Text,Edit2.Text); //在 Reg這個(gè)鍵中寫入數(shù)據(jù)名稱和數(shù)據(jù)數(shù)值
Reg.CloseKey; //關(guān)閉鍵
隱藏進(jìn)程也就是按下Ctrl+Alt+Del鍵時(shí)使程序不出現(xiàn)在任務(wù)管理器中,這樣就可以讓使用者不易發(fā)覺程序在運(yùn)行。運(yùn)行程序的隱藏可以通過 API HOOK技術(shù)來實(shí)現(xiàn)。API HOOK技術(shù)是一種用于改變 API執(zhí)行結(jié)果的技術(shù),計(jì)算機(jī)程序可以使用這個(gè)技術(shù)來達(dá)到隱藏的目的。
在上網(wǎng)限制中通過編輯黑白名單來規(guī)定可以訪問或者禁止訪問的網(wǎng)址,上網(wǎng)限制的界面如圖1所示,可以分別設(shè)置黑名單及白名單。
圖1 上網(wǎng)限制設(shè)置
圖2 黑名單的編輯
(1)黑/白名單的編輯界面
如圖 2所示,若要將某一網(wǎng)址加進(jìn)黑/白名單,可在文本框內(nèi)輸入網(wǎng)址,如http://baidu.com,可以只輸入簡(jiǎn)潔網(wǎng)址baidu.com,也可以全部輸入,在點(diǎn)擊“添加”之后,都會(huì)自動(dòng)轉(zhuǎn)化成簡(jiǎn)潔的網(wǎng)址形式??梢酝ㄟ^“編輯”和“刪除”來對(duì)已有的黑/白網(wǎng)址進(jìn)行修改或刪除。
(2)黑名單的實(shí)現(xiàn)
首先把需要屏蔽的網(wǎng)址寫在INI文件中,格式如下:
a1=xxxx
...
然后用 OnBeforeNavigate過程檢測(cè)打開的網(wǎng)址是不是存在于INI文件中,不是則打開這個(gè)鏈接,是就不打開此鏈接。主體代碼為:
while (i begin acd:=vValues.Values[vValues.Names[I]]; end; case AnsiContainsText(url,acd) of//檢查URL是否是INI文件中的。 True: Cancel:=true; False: Cancel:=False; end; 為了提高系統(tǒng)的可移植性,可以同時(shí)將包括黑名單在內(nèi)的相關(guān)數(shù)據(jù)寫入了注冊(cè)表,在注冊(cè)表內(nèi)的位置為 HKEY_LOCAL_MACHINE/SOFTWAER/NMUI,其中NMUI是軟件的名字。 在該模塊中,可以對(duì)一些常見的網(wǎng)絡(luò)游戲進(jìn)行限制使用。如圖3,可以選擇一個(gè)或多個(gè)想要禁止的游戲,還可以添加刪除某些游戲。在監(jiān)護(hù)狀態(tài)下,如果啟動(dòng)被禁止的游戲,會(huì)顯示“該程序已被禁止”字樣,游戲程序也不運(yùn)行。 圖3 游戲限制 在程序的單元可見部分(interface)的函數(shù)聲明function里,首先定義一個(gè)名為KillTask類型為boolean的函數(shù),其參數(shù)為 ExeFileName:string,如要禁止運(yùn)行某個(gè)游戲的可執(zhí)行程序,文件名可為:*.exe。函數(shù)的參數(shù)取決于用戶的選擇,用戶挑選好要禁止的程序后所有的數(shù)據(jù)都會(huì)存儲(chǔ)在數(shù)據(jù)庫的程序名單列表里,軟件運(yùn)行時(shí),與數(shù)據(jù)庫中數(shù)據(jù)進(jìn)行逐行比較,若遇到相符的數(shù)據(jù),則返回參數(shù),此時(shí)可以繼續(xù)進(jìn)行下面的編碼。 ... 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); ….. 可以設(shè)置每天或者周一到周五或者周末的允許上網(wǎng)時(shí)間段,如下圖4示。 圖4 時(shí)間限制 在選擇“啟用時(shí)間限制功能”后,如果處于監(jiān)護(hù)狀態(tài)下,就會(huì)對(duì)系統(tǒng)時(shí)間進(jìn)行檢查,如果當(dāng)前時(shí)間不屬于允許上網(wǎng)的時(shí)間,就會(huì)對(duì)電腦進(jìn)行封鎖。可以看到電腦屏幕會(huì)整個(gè)變成灰暗色,中間顯示“現(xiàn)在不允許您使用電腦,本機(jī)已被鎖定?!辈⑶铱梢酝ㄟ^輸入密碼切換到管理員狀態(tài)。 ... 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;} //屏蔽任務(wù)管理器(即ctrl+alt+del) ShowWindow(FindWindow("Shell_TrayWnd",0),SW_HI DE); //隱藏開始菜單 解鎖是封鎖的逆過程,即先解鎖鍵盤,再解鎖任務(wù)管理器,最后顯示開始菜單。 健康設(shè)置,也是讀取時(shí)間,達(dá)到規(guī)定的時(shí)間時(shí),對(duì)電腦進(jìn)行封鎖,封鎖界面有自動(dòng)倒計(jì)時(shí)功能,在規(guī)定的鎖住電腦時(shí)間限達(dá)到后,可以自動(dòng)解鎖,繼續(xù)正常使用電腦,當(dāng)然,如果用戶不愿意等待,可以直接輸入密碼進(jìn)入管理狀態(tài)。 在該模塊中也和時(shí)間限制原理一樣,即到一定時(shí)間后執(zhí)行封鎖電腦操作,和時(shí)間限制調(diào)用的是相同的函數(shù)。 在記錄中功能中,可以記錄下所有訪問過的網(wǎng)址以及屏幕抓圖記錄,上網(wǎng)限制中的“截獲網(wǎng)址”功能實(shí)際上也屬于記錄功能。屏幕記錄功能可以記錄下整個(gè)電腦畫面,每隔兩分鐘自動(dòng)記錄一次并存放在文件夾ScreenLog中??梢栽诓粏?dòng)軟件的情況下,直接打開系統(tǒng)固有文件夾中的ScreenLogView可執(zhí)行文件查看屏幕記錄。 屏幕抓圖是利用windows的API函數(shù)CapScreen來實(shí)現(xiàn)的,可以全屏拷貝、窗體拷貝,并支持圖形存儲(chǔ)功能。 ….. 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); ….. 隱藏任務(wù)欄圖標(biāo)的實(shí)現(xiàn)。系統(tǒng)托盤是一個(gè)在任務(wù)欄右角的小方框,在托盤的應(yīng)用程序可以顯示小圖標(biāo)。若要隱藏程序的任務(wù)欄圖標(biāo),可以應(yīng)用 ShowWindow函數(shù)并傳給它Application.Handle窗口句柄,即ShowWindow (Application->Handle, SW_HIDE);然后設(shè)置主窗口的Visible屬性為false來隱藏它,但是后來在程序測(cè)試的時(shí)候發(fā)現(xiàn)通過ShowWindow來隱藏窗口的任務(wù)欄圖標(biāo)是不持久的,某些動(dòng)作會(huì)使任務(wù)欄圖標(biāo)重現(xiàn),后來在網(wǎng)上查閱和參考了很多資料,做了一些改動(dòng),就是將應(yīng)用程序窗口設(shè)為Tool Window來移走程序的任務(wù)欄圖標(biāo),Tool windows永遠(yuǎn)不會(huì)有任務(wù)欄圖標(biāo)。要實(shí)現(xiàn)應(yīng)用程序窗口為Tool Window,可以調(diào)用API函數(shù)GetWindowLong和 SetWindowLong來完成。 ….. var dwExStyle : DWORD; begin dwExStyle:=GetWindowLong(Application.Handle, GWL_EXSTYLE); dwExStyle := dwExStyle + WS_EX_TOOLWINDOW; SetWindowLong(Application.Handle, GWL_EXSTYLE, dwExStyle); …… 闡述了實(shí)現(xiàn)健康上網(wǎng)軟件的關(guān)鍵技術(shù),主要利用Delphi中的系統(tǒng)函數(shù),結(jié)合Windows API,對(duì)計(jì)算機(jī)系統(tǒng)進(jìn)行控制,從而實(shí)現(xiàn)軟件的預(yù)定目標(biāo)。2.4 游戲限制
2.5 時(shí)間限制
2.6 記錄
2.7 安全設(shè)置
3 結(jié)束語