既然系統提供的功能不足以完成任務,何不通過編程來實現呢?初步的設想是用VB定制登錄時間控制程序,然後修改注冊表項,讓程序在計算機啟動或用戶登錄時自動加載。需要指出的是,必須限制Game和Study用戶對系統時間的修改,為此還要對SetupBIOS加口令保護,有條件的話最好鎖上主機箱。
首先,VB程序的設計:新建工程,調整窗口的大小到合適,在窗口中添加一個label控件(設置caption屬性為“你的登錄時間已用完,1分鐘以後注銷,請及時保存數據!”)和二個timer控件(mainTimer和fairyTimer),程序代碼如下:
OptionExplicit
ConstEWX_LogoFF=0
ConstEWX_SHUTDOWN=1
ConstEWX_REBOOT=2
ConstEWX_FORCE=4
PrivateDeclareFunctionGetUserNameLib"advapi32.dll"Alias"GetUserNameA"(ByVallpBufferAsString,nSizeAsLong)AsLong
PrivateDeclareFunctionExitWindowsExLib"user32"(ByValuFlagsAsLong,ByValdwReservedAsLong)AsLong
PrivateSubfairyTimer_Timer()
Dimmyweekday,mydate
Dimmytime,hh$,mm$,ss$
mydate=Date
myweekday=Weekday(mydate)
mytime=Time
hh$=Left$(mytime,2)
mm$=Mid$(mytime,4,2)
Ifmyweekday>1Andmyweekday<7Then
'周一至周五登錄規則
Ifhh>18Andhh<19Then
ExitSub
Else
EndIf
Else
'雙休日登錄規則
Ifhh>13Andhh<15Then
ExitSub
ElseIfhh>18Andhh<20Then
ExitSub
Else
EndIf
EndIf
mainForm.Visible=True
mainTimer.Interval=60000'啟動注銷進程
EndSub
PrivateSubForm_Load()
Dims$,cnt&,dl&
cnt&=199
s$=String$(200,0)
dl&=GetUserName(s$,cnt)
'Debug.PrintLeft$(s$,cnt-1);cnt
IfLeft$(s$,cnt-1)="ChenHL"Then
fairyTimer.Interval=6000'啟動監聽精靈
Else
mainTimer.Interval=0
EndIf
EndSub
PrivateSubForm_Unload(CancelAsInteger)
Dimret&
ret&=ExitWindowsEx(EWX_FORCEOrEWX_LogoFF,0)
EndSub
PrivateSubmainTimer_Timer()
Dimret&
ret&=ExitWindowsEx(EWX_FORCEOrEWX_LogoFF,0)
EndSub