用VB6.0編程禁止網上下載文件
|
隨著計算機的普及,互聯網已逐漸走向千家萬戶、單位學校,但隨之而來的問題也出現:由于網上有大量的游戲軟件、圖片、多媒體內容等,許多網民利用單位或學校的計算機,在網上大量下載這類東東,不僅使流量猛增,網費消耗,而且更容易使一些黃色內容肆意傳播,雖然在IE瀏覽器中有一項可設為禁止下載,
| 看圖之王ACDSee 6.0應用大全 | 數碼人像照片矢量化及藝術處理 | |
| 六天學會Visual Basic數據庫編程 | 解析“震蕩波”惡性蠕蟲病毒 | |
一、啟動VB6.0,新建一工程,命名為DENYDOWN;
二、修改注冊表有兩種方法:一種是建立一個擴展名為.REG的文件,雙擊后自動添加到注冊表中(在程序中是通過WINDOWS自帶的一個注冊表編輯文REGEDIT.EXE把它導入注冊表,達到修改注冊表的目的);另一種是通過調用WINDOWS API函數,來修改注冊表。兩種方法各有長短,我們這里把二者結合起來,共同使用,達到對注冊表的修改目的。由于我們要調用WINDOWS API函數,所以先在聲明欄中聲明如下的四個API函數:打開子鍵RegOpenKey、刪除子鍵RegDeleteKey、關閉打開的子鍵RegCloseKey和刷新子鍵函數RegFlushKey,還有一個常數聲明:HKEY_LOCAL_MACHINE,聲明語名如下:
| Private Declare Function RegDeleteKey Lib "advapi32.dll" Alias _ "RegDeleteKeyA" (ByVal hKey As Long, ByVal lpSubKey As String) As Long Private Declare Function RegOpenKey Lib "advapi32.dll" Alias _ "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As_ Long Private Const HKEY_LOCAL_MACHINE = &H80000002 Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As_ Long Private Declare Function RegFlushKey Lib "advapi32.dll" (ByVal hKey As Long) As_ Long |
三、在Form_Load事件過程中輸入以下內容,為了后面說明方便,這里給每一行加了標號,當然實際編程中是不能加標號的。
| Dim line As String Dim a As Long Dim fso, fs As Object line = "REGEDIT4" & Chr(13) & Chr(10) line = line & Chr(13) & Chr(10) 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 line = line & "[HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionInternet Settingsones3]" & Chr(13) & Chr(10) line = line & """1803""=dword:00000003" & Chr(13) & Chr(10) '禁止下載 line = line & Chr(13) & Chr(10) line = line & "[HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionRun]" & Chr(13) & Chr(10) '加入啟動組 line = line & """DenyDownLoad""=""C:\PROGRAM FILES\DenyDownLoad\DenyDown.exe""" line = line & Chr(13) & Chr(10) line = line & "[HKEY_USERS.DEFAULTSoftwareMicrosoftWindowsCurrentVersionPoliciesSystem]" & Chr(13) & Chr(10) line = line & """DisableRegistryTools""=dword:00000001" & Chr(13) & Chr(10) '禁止修改注冊表 line = line & Chr(13) & Chr(10) line = line & "[HKEY_CLASSES_ROOTegfileshellopencommand]" & Chr(13) & Chr(10) line = line & "@=""regedit.exe""" & Chr(13) & Chr(10) '修改添加注冊表文件為打開注冊表。 line = line & Chr(13) & Chr(10) line = line & "[HKEY_LOCAL_MACHINESoftwareCLASSES.reg]" & Chr(13) & Chr(10) line = line & "@=""txtfile""" & Chr(13) & Chr(10) '關聯注冊表文件到TEXT文件。 line = line & Chr(13) & Chr(10) line = line & "[HKEY_LOCAL_MACHINESoftwareCLASSES.inf]" & Chr(13) & Chr(10) line = line & "@=""txtfile""" & Chr(13) & Chr(10) '關聯inf文件到TEXT文件 Set fso = CreateObject("Scripting.FileSystemObject") Set fs = fso.CreateTextFile("c:ModiReg.reg", True) fs.writeline (line) fs.Close Set fs = Nothing a = Shell("regedit.exe /s c:ModiReg.reg", 1) Kill ("c:ModiReg.reg") Dim hKey, ret As Long ret = RegOpenKey(HKEY_LOCAL_MACHINE, "SoftwareMicrosoftWindowsCurrentVersionInternet SettingsSODOWNLOADFILEDOWNLOAD", hKey) ret = RegDeleteKey(hKey, "ALLOW") '刪除允許下載項 ret = RegCloseKey(hKey) ret = RegFlushKey(hKey) |
代碼說明:
上面第4行到第27行是把要在注冊表中修改的內容建立一個注冊表文件ModiReg.reg,由于這種文件的格式要求開頭必須有"REGEDIT4"一行,并且緊跟后面要求一空行,所以有4、5兩行。第6、7兩行是修改注冊表中關于IE設置當中的參數,當修改為3時表示禁止下載。第9、10兩行是把本程序加入啟動組,保證每次啟動機器后都能自運行本程序,當然這里限定本程序的位置必須是“C:PROGRAM FILESDenyDownLoadDenyDown.exe”,如果你不想把它放在這里,就要修改這里的內容了。第12、13行是禁止用戶使用注冊表編輯器來修改注冊表。由于修改注冊表還可以通過建立一個.REG文件,雙擊后加入注冊表,為了防止懂得注冊表知識的人通過這種方式修改注冊表中關于禁止下載的項目,所以在15、16行里修改添加注冊表文件為打開注冊表,由于第13行設置了禁止打開注冊表,所以也就不能添加注冊表文件了。第18行到第22行也是出于更安全的目的分別使.REG文件和.INF文件關聯到記事本,加強對注冊表的保護。第24行是把上面的內容寫入一個注冊表文件ModiReg.reg,第28行是通過SHELL()函數調用注冊表編輯器把ModiReg.reg中的內容添加入注冊表中。由于調用REGEDIT.EXE添加注冊表項時會出現一個對話框,所以加了一個/S參數禁止該對話框的顯示。第31、32行是通過Windows Api函數刪除注冊表中關于IE設置中允許下載的項目,第33行是更新設置,第34行是關閉注冊表,完成對注冊表的修改。
為了讓本程序在每次修改完注冊表后能自動關閉,還要加入下面的退出程序。
| Private Sub Form_GotFocus() Unload Me End Sub |
生成DenyDown.exe,拷貝到C:PROGRAM FILESDenyDownLoad,就一切OK了。當然還需要一個恢復修改的程序,否則連我們自已也不能下載文件和修改注冊表了,通過上面的程序,相信你應該可以編寫一個恢復修改的程序了吧,這里我就不再贅述了。