【摘要】該文討論了制作學生個人“網絡盤”的必要性,介紹了運用API函數在局域網內批量創建和管理網絡盤的設計思路,并給出在VB6中實現“網絡盤”的關鍵代碼。
【關鍵詞】VB;API;Access;局域網;網絡盤
【中圖分類號】G434 【文獻標識碼】B 【論文編號】1009—8097 (2008) 02—0111—03
在信息技術課的教學和考試中經常需要共享制作素材、收發文件。 大多數的老師都習慣于用直接共享文件夾的方法。這種做法雖然簡單易行,但是保密性差。學生之間能相互抄襲,相互刪改,在一些學生思想道德素質不高的班級里,這一點令老師非常頭痛。另外,一個機房通常會讓幾個老師十幾個班級輪流上課,為了安全還得不斷地共享和取消共享。
為解決這一問題,有些老師通過IIS創建FTP服務器或BBS論壇面向用戶收發文件 。這種做法使用B/S架構,有很多優點,備受青睞,確實是一種好的方法。但其最大的缺點是:學生要進行壓縮/解壓、下載/上傳文件的繁瑣操作,且不能實時保存到服務器(只能先保存到本機后再上傳)。操作稍有差池、死機、掉電都可能對保存數據造成非常大的影響。
也有部分老師習慣使用電子教室軟件(如:易思、極域等)附帶的收發文件功能。其收發文件的過程準確快速穩定。遺憾的是,這種做法同樣具有不能實時保存到服務器的弊端。更重要的是無學生身份識別的功能,只能面向學生機器收發而不是面向學生。收發的過程容易誤操作,更不可能連續幾節課自動收發。
因此,我親自動手制作了一種保密性高,快速穩定安全且操作簡單方便的學生個人“網絡盤”。
一 “網絡盤”的設計思路
Windows早已為我們準備好了“網絡盤”,我們要做的只是更好地控制和管理它。
眾所周知,使用Windows可以將局域網內其他計算機的共享文件夾映射成網絡驅動器,即所謂的 “網絡盤”(如: X:、Y:)。對此網絡盤的操作方法跟本地硬盤分區是完全一致的,能直接存取網絡盤中的文件。而在VB中調用相應的API函數,可以在服務器自動設置或取消文件夾的共享,也可以在學生機端自動映射或斷開網絡盤。因此,可以設計程序在服務器端按學生名單自動批量制作各個學生的個人文件夾,并設置隱藏的加密共享。學生機使用客戶端程序驗證學生身份后,便能自動將服務器中的特定個人文件夾映射成網絡驅動器。如下圖所示:

具體的操作流程:


對于學生而言,登陸之后只是感覺到多了一個硬盤分區,無須再說明其他的操作方法。服務器端程序可管理學生名冊,可增刪網絡盤,增刪各個網絡盤內的文件等;而客戶端程序可驗證學生身份,自動映射或斷開網絡盤,可監測網絡盤內的文件類型及總容量,并可幫助學生在退出網絡盤后自動關機或重啟。學生無法進入他人的網絡盤,在使用網絡盤的過程中也不能自行斷開網絡盤,不能亂塞文件,否則強制自動關機。
筆者選擇的編程語言是VB6.0,后臺數據庫是Access。學生機程序放在服務器共享給學生機,通過網絡共享運行,便于更新升級。
二 關鍵代碼
程序的關鍵是正確使用設置/取消共享、映射/斷開網絡驅動器的API函數。總結如下:

現以服務器的操作系統為Win2000 Server的情況為例,介紹關鍵代碼及實現過程。因篇幅所限,略去批量制作學生個人文件夾的的步驟,略去查詢Access數據庫的代碼,略去API函數聲明及其有關的常數、結構的定義。讀者可自行查閱有關API函數用法的幫助文件。
1 設置共享(服務器端)
‘設置共享的過程,便是查詢數據庫,并按數據庫中學生信息反復調用某個設置共享的函數建立共享。
‘NT以上版本操作系統設置共享的函數:
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
‘參數說明:
‘sSharePath 被共享的文件夾路徑
‘sShareName 共享名,加密并加字符$
‘sRemark 共享的備注信息
‘sROPass 只讀共享密碼
‘sRWPass 完全共享密碼
‘bShareTypeRW 共享類型,True為完全,False為只讀
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)'轉成地址
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
'設置共享(用戶名,共享類型,共享信息)
CreateShareNT = NetShareAdd(lngServer, 2, si2, parmerr)
End Function
‘可類似地編寫出Win98系統下設置共享的函數CreateShare98
‘被反復調用的設置共享的函數:
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()是判斷操作系統是否Win98的函數,其代碼在此略。
If OSIsWin98() Then
CreateShare = CreateShare98(sSharePath, _
sShareName, _
sRemark, _
sROPass, _
sRWPass, bShareTypeRW)
Else
CreateShare = CreateShareNT(sSharePath, _
sShareName, _
sRemark, _
sROPass, _
sRWPass, bShareTypeRW)
End If
End Function
‘設置共享的過程:
Private Sub CreateShareS()
……
Do
CreateShare StartPath rs(\"XueHao\") rs(\"XingMing\") ,_
JiaMiStr(rs(\"XueHao\") rs(\"XingMing\") ) “$”,_
“” , ”lupheace”, ”lupheace”, True
‘StartPath是軟件設定的開始路徑(如D:\\ShareDir\\)
‘JiaMiStr是加密字符串的函數,其代碼在此略。加密的作用是防止學生直接通過共享路徑訪問。
‘共享名后加“$”,達到隱藏共享的目的,無法通過網上鄰居看到此共享。
rs.MoveNext
Loop Until rs.EOF
rs.Close
End Sub
1 刪除共享(服務器端)
‘刪除共享的過程,便是查詢數據庫,并按數據庫中學生信息反復調用某個刪除共享的函數。
‘NT以上版本操作系統刪除共享的函數:
Public Function DeleteShareNT(sShareName As String) As Long
Dim sServer As String
Dim lngServer As Long'計算機名
Dim lngNetname As Long'共享名
sServer = \"\"
lngServer = StrPtr(sServer)'轉成地址
lngNetname = StrPtr(sShareName)
DeleteShareNT = NetShareDel(lngServer, lngNetname, 0)
End Function
‘可類似地編寫出Win98系統下刪除共享的函數DeleteShare98
‘被反復調用的刪除共享的函數:
Public Function DeleteShare(ByVal sShareName As String) As Long
‘OSIsWin98()是判斷操作系統是否Win98的函數,其代碼在此略。
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 映射網絡驅動器(客戶端)
‘無論是Win98還是NT以上版本的操作系統,都可用同一組映射/斷開網絡驅動器的API函數。
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 ‘遠程文件夾網絡路徑,根據學生登陸信息生成
ErrInfo = WNetAddConnection2(NetR, “lupheace”, vbNullString, CONNECT_UPDATE_PROFILE)
CreateNetDrive = (ErrInfo = NO_ERROR)
End Function
3 斷開網絡驅動器(客戶端)
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
三 結束語
用這種方法實現的學生個人“網絡盤” 高效穩定,保密性好,大大方便了對共享文件的使用和管理。它的優點是:能實時保存,操作簡便,收發過程自動完成,并能連續幾節課自動收發。將服務器端和客戶端程序的功能稍稍增強,即可讓“網絡盤”額外具有學生報到、修正學生機時間、信息廣播、顯示實時座位表、使用記錄等實用的機房管理功能。 筆者在“網絡盤”的基礎上已完成《小飛俠考試改卷系統》的編寫。“網絡盤”在日常教學中擔當著廣播文件,收發作業的角色,而在考試時擔當著收發試卷的角色。該軟件投入教學已有三年多,測試通過的系統包括Win98、Win2000、WinXP 和Win2003, 同時操作的學生數量在60人左右,效果良好。希望本文能給讀者一些參考和啟迪。
參考文獻
[1](美)Francesco Balena 著,翔實翻譯組譯.Visual Basic 6 編程技術大全[M].北京:機械工業出版社.2000.
[2]Windows API函數參考手冊[M]北京:人民郵電出版社,2002.