刚开始的时候,我把系统改成可管理性较强的Windows 2000(文件系统必须采用NTFS格式),建立两个同属User组的受限制帐户Game(用于游戏)和Study(学习帐户)并为他们设置相应文件、文件夹的安全权限,然后利用系统管理工具中“本地安全策略”(开启“当登录时间用完时自动注销用户”)结合net user命令来限制特定游戏帐号(如Game)的登录时间,不过并不奏效:能控制登录,但登录以后却不能实现自动强制退出。
既然系统提供的功能不足以完成任务,何不通过编程来实现呢?初步的设想是用VB定制登录时间控制程序,然后修改注册表项,让程序在计算机启动或用户登录时自动加载。需要指出的是,必须限制Game和Study用户对系统时间的修改,为此还要对Setup BIOS加口令保护,有条件的话最好锁上主机箱。
首先,VB程序的设计:新建工程,调整窗口的大小到合适,在窗口中添加一个label控件(设置caption属性为“你的登录时间已用完,1分钟以后注销,请及时保存数据!”)和二个timer控件(mainTimer和fairyTimer),程序代码如下:
Option Explicit
Const EWX_LOGOFF = 0
Const EWX_SHUTDOWN = 1
Const EWX_REBOOT = 2
Const EWX_FORCE = 4
Private Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer
As String, nSize As Long) As Long
Private Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, ByVal dwReserved
As Long) As Long
Private Sub fairyTimer_Timer()
Dim myweekday, mydate
Dim mytime, hh$, mm$, ss$
mydate = Date
myweekday = Weekday(mydate)
mytime = Time
hh$ = Left$(mytime, 2)
mm$ = Mid$(mytime, 4, 2)
If myweekday > 1 And myweekday < 7 Then
注释:周一至周五登录规则
If hh > 18 And hh < 19 Then
Exit Sub
Else
End If
Else
注释:双休日登录规则
If hh > 13 And hh < 15 Then
Exit Sub
ElseIf hh > 18 And hh < 20 Then
Exit Sub
Else
End If
End If
mainForm.Visible = True
mainTimer.Interval = 60000 注释:启动注销进程
End Sub
Private Sub Form_Load()
Dim s$, cnt&, dl&
cnt& = 199
s$ = String$(200, 0)
dl& = GetUserName(s$, cnt)
注释:Debug.Print Left$(s$, cnt - 1); cnt
If Left$(s$, cnt - 1) = "ChenHL" Then
fairyTimer.Interval = 6000 注释:启动监听精灵
Else
mainTimer.Interval = 0
End If
End Sub
Private Sub Form_Unload(Cancel As Integer)
Dim ret&
ret& = ExitWindowsEx(EWX_FORCE Or EWX_LOGOFF, 0)
End Sub
Private Sub mainTimer_Timer()
Dim ret&
ret& = ExitWindowsEx(EWX_FORCE Or EWX_LOGOFF, 0)
End Sub