0引言
在学校的机房中经常需要进行上机实验环节的测验,在此过程中为了防止作弊是禁止使用U盘的。虽然有不少方法可以通过相应的设置禁止USB口的使用,但测验过后又需要重新开放USB口的使用。如果通过程序对USB口进行实时监控,只要有人在USB口插入U盘后就马上报警,可有效防止作弊行为的发生,并避免了反复设置的繁琐。本文介绍了在VB中使用SysInfo控件对U盘进行实时监控,并给出了实现的关键代码。
1基本原理
SysInfo控件可以检测操作系统提供的信息,同时对操作系统产生的事件作出反应。在Windows中,对于新设备添加到系统之后能够被自动检测出来,使用SysInfo控件的属性和事件可以分享这种“即插即用”技术带来的好处。Sys-Info控件不是标准的VisualBasic控件,需要通过选择“工程”→“部件”命令打开的对话框中选中“MicrosoftSys-infoControl6.0”复选框,将其添加到工具箱中。
使用SysInfo控件的DeviceArrival和DeviceRemove-Complete事件可以对加载驱动器、卸载驱动器的事件作出响应,通过该控件的这两个事件可以判断是否有存储器插拔。在本例中,使用了SysInfo控件的DeviceArrival事件,该事件当系统中添加新设备时产生。事件有四个参数,其中DeviceType指示已添加设备的类型,等于2表示添加了新的磁盘;deviceID参数识别设备的值,通过它可以转换得到新磁盘的盘符,其值等于2的n次方,n即为盘符(对应字母顺序A盘为0、B盘为1...)。得到新磁盘的盘符后还要判断其是否为U盘,这需要使用API函数GetDriveType。该函数的功能是判断一个磁盘驱动器的类型,其返回值2表示可移动磁盘。一旦发现新添加的是U盘,利用API函数NetMessageBufferSend给局域内指定为监控服务器的接收端计算机发送报警信息。使用这一函数的时候需要知道本机的计算机名,这通过调用API函数GetComputerName来实现。
2具体实现
启动VB新建一个窗体,在该窗体上添加一个SysInfo控件,并将其命名为SysInfo1。在窗体中输入如下代码:PrivateDeclareFunctionNetMessageBufferSendLib"NETAPI32.DLL"(ServerAsAny,yToNameAsByte,yFromNameAsAny,yMsgAsByte,ByVallSizeAsLong)AsLong
PrivateDeclareFunctionGetComputerNameLib"kernel32"Alias"GetComputerNameA"(ByVallpBufferAsString,nSizeAsLong)AsLong
PrivateDeclareFunctionGetDriveTypeLib"ker-nel32"Alias"GetDriveTypeA"(ByValnDriveAsString)AsLong
PrivateSubForm_Load()
IfApp.PrevInstanceThenEnd
App.TaskVisible=False'在任务管理器中隐藏程序Me.Hide'隐藏程序窗体
基于VB实现的学校机房U盘实时监控
RealizationofUSBDiskReal-timeMonitoringinSchoolComputerRoomBasedonVB
梁里宁
LiangLining
(暨南大学计算中心,广东广州510632)
(ComputerCenter,JinanUniversity,GuangdongGuangzhou510632)
摘要:介绍了利用VB所实现的学校机房U盘实时监控,并给出了实现的关键代码。
关键词:VB;U盘;实时监控
中图分类号:TP371文献标识码:A文章编号:1671-4792-(2009)1-0157-02
Abstract:ThispaperpresentshowtorealizeUSBdiskreal-timemonitoringinschoolcomputerroombyuseofVBlanguage.Therealizationkeycodesarealsogiven.
Keywords:VB;USBDisk;Real-timeMonitoring基于VB 实
现
的学
校
机
房U 盘实时监控
157