【摘要】該文討論了制作學(xué)生個人“網(wǎng)絡(luò)盤”的必要性,介紹了運用API函數(shù)在局域網(wǎng)內(nèi)批量創(chuàng)建和管理網(wǎng)絡(luò)盤的設(shè)計思路,并給出在VB6中實現(xiàn)“網(wǎng)絡(luò)盤”的關(guān)鍵代碼。
【關(guān)鍵詞】VB;API;Access;局域網(wǎng);網(wǎng)絡(luò)盤
【中圖分類號】G434 【文獻標識碼】B 【論文編號】1009—8097 (2008) 02—0111—03
在信息技術(shù)課的教學(xué)和考試中經(jīng)常需要共享制作素材、收發(fā)文件。 大多數(shù)的老師都習(xí)慣于用直接共享文件夾的方法。這種做法雖然簡單易行,但是保密性差。學(xué)生之間能相互抄襲,相互刪改,在一些學(xué)生思想道德素質(zhì)不高的班級里,這一點令老師非常頭痛。另外,一個機房通常會讓幾個老師十幾個班級輪流上課,為了安全還得不斷地共享和取消共享。
為解決這一問題,有些老師通過IIS創(chuàng)建FTP服務(wù)器或BBS論壇面向用戶收發(fā)文件 。這種做法使用B/S架構(gòu),有很多優(yōu)點,備受青睞,確實是一種好的方法。但其最大的缺點是:學(xué)生要進行壓縮/解壓、下載/上傳文件的繁瑣操作,且不能實時保存到服務(wù)器(只能先保存到本機后再上傳)。操作稍有差池、死機、掉電都可能對保存數(shù)據(jù)造成非常大的影響。
也有部分老師習(xí)慣使用電子教室軟件(如:易思、極域等)附帶的收發(fā)文件功能。其收發(fā)文件的過程準確快速穩(wěn)定。遺憾的是,這種做法同樣具有不能實時保存到服務(wù)器的弊端。更重要的是無學(xué)生身份識別的功能,只能面向?qū)W生機器收發(fā)而不是面向?qū)W生。收發(fā)的過程容易誤操作,更不可能連續(xù)幾節(jié)課自動收發(fā)。
因此,我親自動手制作了一種保密性高,快速穩(wěn)定安全且操作簡單方便的學(xué)生個人“網(wǎng)絡(luò)盤”。
一 “網(wǎng)絡(luò)盤”的設(shè)計思路
Windows早已為我們準備好了“網(wǎng)絡(luò)盤”,我們要做的只是更好地控制和管理它。
眾所周知,使用Windows可以將局域網(wǎng)內(nèi)其他計算機的共享文件夾映射成網(wǎng)絡(luò)驅(qū)動器,即所謂的 “網(wǎng)絡(luò)盤”(如: X:、Y:)。對此網(wǎng)絡(luò)盤的操作方法跟本地硬盤分區(qū)是完全一致的,能直接存取網(wǎng)絡(luò)盤中的文件。而在VB中調(diào)用相應(yīng)的API函數(shù),可以在服務(wù)器自動設(shè)置或取消文件夾的共享,也可以在學(xué)生機端自動映射或斷開網(wǎng)絡(luò)盤。因此,可以設(shè)計程序在服務(wù)器端按學(xué)生名單自動批量制作各個學(xué)生的個人文件夾,并設(shè)置隱藏的加密共享。學(xué)生機使用客戶端程序驗證學(xué)生身份后,便能自動將服務(wù)器中的特定個人文件夾映射成網(wǎng)絡(luò)驅(qū)動器。如下圖所示:
具體的操作流程:
對于學(xué)生而言,登陸之后只是感覺到多了一個硬盤分區(qū),無須再說明其他的操作方法。服務(wù)器端程序可管理學(xué)生名冊,可增刪網(wǎng)絡(luò)盤,增刪各個網(wǎng)絡(luò)盤內(nèi)的文件等;而客戶端程序可驗證學(xué)生身份,自動映射或斷開網(wǎng)絡(luò)盤,可監(jiān)測網(wǎng)絡(luò)盤內(nèi)的文件類型及總?cè)萘?,并可幫助學(xué)生在退出網(wǎng)絡(luò)盤后自動關(guān)機或重啟。學(xué)生無法進入他人的網(wǎng)絡(luò)盤,在使用網(wǎng)絡(luò)盤的過程中也不能自行斷開網(wǎng)絡(luò)盤,不能亂塞文件,否則強制自動關(guān)機。
筆者選擇的編程語言是VB6.0,后臺數(shù)據(jù)庫是Access。學(xué)生機程序放在服務(wù)器共享給學(xué)生機,通過網(wǎng)絡(luò)共享運行,便于更新升級。
二 關(guān)鍵代碼
程序的關(guān)鍵是正確使用設(shè)置/取消共享、映射/斷開網(wǎng)絡(luò)驅(qū)動器的API函數(shù)??偨Y(jié)如下:
現(xiàn)以服務(wù)器的操作系統(tǒng)為Win2000 Server的情況為例,介紹關(guān)鍵代碼及實現(xiàn)過程。因篇幅所限,略去批量制作學(xué)生個人文件夾的的步驟,略去查詢Access數(shù)據(jù)庫的代碼,略去API函數(shù)聲明及其有關(guān)的常數(shù)、結(jié)構(gòu)的定義。讀者可自行查閱有關(guān)API函數(shù)用法的幫助文件。
1 設(shè)置共享(服務(wù)器端)
‘設(shè)置共享的過程,便是查詢數(shù)據(jù)庫,并按數(shù)據(jù)庫中學(xué)生信息反復(fù)調(diào)用某個設(shè)置共享的函數(shù)建立共享。
‘NT以上版本操作系統(tǒng)設(shè)置共享的函數(shù):
Public Function CreateShareNT(ByVal sSharePath As String, _
ByVal sShareName As String, _
ByVal sRemark As String, _
ByVal sROPass As String, _
ByVal sRWPass As String, ByVal bShareTypeRW As Boolean) As Long
‘參數(shù)說明:
‘sSharePath 被共享的文件夾路徑
‘sShareName 共享名,加密并加字符$
‘sRemark 共享的備注信息
‘sROPass 只讀共享密碼
‘sRWPass 完全共享密碼
‘bShareTypeRW 共享類型,True為完全,F(xiàn)alse為只讀
Dim re As String
Dim sServer As String
Dim lngServer As Long
Dim lngNetname As Long
Dim lngPathAs Long
Dim lngRemark As Long
Dim lngPwAs Long
Dim parmerr As Long
Dim si2As SHARE_INFO_2
sServer = \"\" '本地共享
lngServer = StrPtr(sServer)'轉(zhuǎn)成地址
lngNetname = StrPtr(sShareName)
lngPath = StrPtr(sSharePath)
'如果有備注信息
If Len(sRemark) > 0 Then
lngRemark = StrPtr(sRemark)
End If
'如果有密碼
If Len(sRWPass) > 0 Then
lngPw = StrPtr(sRWPass)
End If
'初始化共享信息
With si2
shi2_netname = lngNetname
.shi2_path = lngPath
.shi2_remark = lngRemark
shi2_type = STYPE_DISKTREE
.shi2_permissions = IIf(bShareTypeRW, ACCESS_ALL, ACCESS_READ)
.shi2_max_uses = -1
.shi2_passwd = lngPw
End With
'設(shè)置共享(用戶名,共享類型,共享信息)
CreateShareNT = NetShareAdd(lngServer, 2, si2, parmerr)
End Function
‘可類似地編寫出Win98系統(tǒng)下設(shè)置共享的函數(shù)CreateShare98
‘被反復(fù)調(diào)用的設(shè)置共享的函數(shù):
Public Function CreateShare(ByVal sSharePath As String, _
ByVal sShareName As String, _
ByVal sRemark As String, _
ByVal sROPass As String, _
ByVal sRWPass As String, ByVal bShareTypeRW As Boolean) As Long
‘OSIsWin98()是判斷操作系統(tǒng)是否Win98的函數(shù),其代碼在此略。
If OSIsWin98() Then
CreateShare = CreateShare98(sSharePath, _
sShareName, _
sRemark, _
sROPass, _
sRWPass, bShareTypeRW)
Else
CreateShare = CreateShareNT(sSharePath, _
sShareName, _
sRemark, _
sROPass, _
sRWPass, bShareTypeRW)
End If
End Function
‘設(shè)置共享的過程:
Private Sub CreateShareS()
……
Do
CreateShare StartPath rs(\"XueHao\") rs(\"XingMing\") ,_
JiaMiStr(rs(\"XueHao\") rs(\"XingMing\") ) “$”,_
“” , ”lupheace”, ”lupheace”, True
‘StartPath是軟件設(shè)定的開始路徑(如D:\\ShareDir\\)
‘JiaMiStr是加密字符串的函數(shù),其代碼在此略。加密的作用是防止學(xué)生直接通過共享路徑訪問。
‘共享名后加“$”,達到隱藏共享的目的,無法通過網(wǎng)上鄰居看到此共享。
rs.MoveNext
Loop Until rs.EOF
rs.Close
End Sub
1 刪除共享(服務(wù)器端)
‘刪除共享的過程,便是查詢數(shù)據(jù)庫,并按數(shù)據(jù)庫中學(xué)生信息反復(fù)調(diào)用某個刪除共享的函數(shù)。
‘NT以上版本操作系統(tǒng)刪除共享的函數(shù):
Public Function DeleteShareNT(sShareName As String) As Long
Dim sServer As String
Dim lngServer As Long'計算機名
Dim lngNetname As Long'共享名
sServer = \"\"
lngServer = StrPtr(sServer)'轉(zhuǎn)成地址
lngNetname = StrPtr(sShareName)
DeleteShareNT = NetShareDel(lngServer, lngNetname, 0)
End Function
‘可類似地編寫出Win98系統(tǒng)下刪除共享的函數(shù)DeleteShare98
‘被反復(fù)調(diào)用的刪除共享的函數(shù):
Public Function DeleteShare(ByVal sShareName As String) As Long
‘OSIsWin98()是判斷操作系統(tǒng)是否Win98的函數(shù),其代碼在此略。
If OSIsWin98() Then
DeleteShare = DeleteShare98(sShareName)
Else
DeleteShare = DeleteShareNT(sShareName)
End If
End Function
‘刪除共享的過程:
Private Sub DeleteShareS()
……
Do
DeleteShare JiaMiStr(rs(\"XueHao\") rs(\"XingMing\") ) “$”
rs.MoveNext
Loop Until rs.EOF
rs.Close
End Sub
2 映射網(wǎng)絡(luò)驅(qū)動器(客戶端)
‘無論是Win98還是NT以上版本的操作系統(tǒng),都可用同一組映射/斷開網(wǎng)絡(luò)驅(qū)動器的API函數(shù)。
Public Function CreateNetDrive() As Boolean
Dim NetR As NETRESOURCE
Dim ErrInfo As Long
NetR.dwScope = RESOURCE_GLOBALNET
NetR.dwType = RESOURCETYPE_DISK
NetR.dwDisplayType=RESOURCEDISPLAYTYPE_SHARE
NetR.dwUsage = RESOURCEUSAGE_CONNECTABLE
NetR.lpLocalName = “X:”
NetR.lpRemoteName = RemoteDiskPath ‘遠程文件夾網(wǎng)絡(luò)路徑,根據(jù)學(xué)生登陸信息生成
ErrInfo = WNetAddConnection2(NetR, “l(fā)upheace”, vbNullString, CONNECT_UPDATE_PROFILE)
CreateNetDrive = (ErrInfo = NO_ERROR)
End Function
3 斷開網(wǎng)絡(luò)驅(qū)動器(客戶端)
Public Function DeleteNetDrive() As Boolean
Dim ErrInfo As Long
Dim strLocalName As String
strLocalName = \"X:\"
ErrInfo = WNetCancelConnection2(strLocalName, CONNECT_UPDATE_PROFILE, True)
‘True表示所有連接都強制斷開
DeleteNetDrive = (ErrInfo = NO_ERROR)
End Function
三 結(jié)束語
用這種方法實現(xiàn)的學(xué)生個人“網(wǎng)絡(luò)盤” 高效穩(wěn)定,保密性好,大大方便了對共享文件的使用和管理。它的優(yōu)點是:能實時保存,操作簡便,收發(fā)過程自動完成,并能連續(xù)幾節(jié)課自動收發(fā)。將服務(wù)器端和客戶端程序的功能稍稍增強,即可讓“網(wǎng)絡(luò)盤”額外具有學(xué)生報到、修正學(xué)生機時間、信息廣播、顯示實時座位表、使用記錄等實用的機房管理功能。 筆者在“網(wǎng)絡(luò)盤”的基礎(chǔ)上已完成《小飛俠考試改卷系統(tǒng)》的編寫。“網(wǎng)絡(luò)盤”在日常教學(xué)中擔(dān)當(dāng)著廣播文件,收發(fā)作業(yè)的角色,而在考試時擔(dān)當(dāng)著收發(fā)試卷的角色。該軟件投入教學(xué)已有三年多,測試通過的系統(tǒng)包括Win98、Win2000、WinXP 和Win2003, 同時操作的學(xué)生數(shù)量在60人左右,效果良好。希望本文能給讀者一些參考和啟迪。
參考文獻
[1](美)Francesco Balena 著,翔實翻譯組譯.Visual Basic 6 編程技術(shù)大全[M].北京:機械工業(yè)出版社.2000.
[2]Windows API函數(shù)參考手冊[M]北京:人民郵電出版社,2002.