定时开关机及空闲关机在高校图书馆的应用
2015-06-03周昌海樊玲
周昌海 樊玲
摘 要:针对图书馆公用电脑开机后长时间无人使用甚至24 h处于开机状态的问题,提出了通过BIOS设置和Delphi编程,实现计算机每天无人值守条件下定时开关机及空闲关机功能,是对节能减排、低碳校园积极响应,在上百台公用电脑中实际运行效果非常良好。
关键词:图书馆 定时开关机 空闲关机 BIOS Delphi2010
中图分类号:C931.9 文献标识码:A 文章编号:1674-098X(2015)03(c)-0228-01
图书馆作为大学的文献中心和第二课堂,是大学生利用数字化网络技术获取课本外知识的重要场所。现在的图书馆,公共区域的电脑,一般都有近百台甚至数百台。很多电脑每天开机后很少有人使用,甚至24 h开着机,每年的耗电是惊人的。管理人员因计算机分布在不同楼层,数量多,常在下班时直接给所有计算机强行拉闸断电,也常常造成计算机硬盘坏掉或者Window系统故障,无法再开机。
该文针对这一问题,将计算机BIOS定时开机功能和Delphi编程二者配合使用,完美地解决了这个问题。
1 设计思路
如图1所示定时开关机框图,通过计算机的BIOS,设置每天定时开机时间;通过Delphi2010编程,实现每天定时关机和空闲关机目标。何时关机,空闲多久关机,是否启用空闲关机,都可以随时进行修改。
需要指出的是,Windows自身有定时关机和空闲关机的功能,但实际使用过程中,稳定性不好,偶尔会发生定时关机和空闲关机没有执行的情况。相比较而言,通过Delphi编程所实现的定时关机和空闲关机,界面简洁,操作简单,经过半年的使用,没有发生未执行关机任务的案例。
2 实现过程
2.1 定时开机的设置方法
以联想启天M7150为例,开机后按F1进入BIOS,按照以下步骤进行设置。
Power→After Power Loss,该项设置为Last State。这个设置的含义是,如果突然停电后再来电,计算机恢复到停电前的状态:若停电前是开机的,那么来电后自动开机;如果停电前是关机状态,那么来电后计算机不开机。
Power→Automatic Power On→Wake up on Alarm,该项设置为“Enabled”,必须设置成Enabled,才能进行下面步骤的设置。
Power→Automatic Power On→RTC Alarm Date(Days),该项设置为“Every Day”,也就是每天定时开机;
Power→Automatic Power On→RTC Alarm Time,该项设置为“08:00:00”,意思是每天早上8点开机。
完成以上设置后,保存BIOS设置。
2.2 定时关机和空闲关机
定时关机,是让计算机每天到了指定时间,强制关机,是为了避免计算机通宵开机而设置这一功能。
所谓空闲时间,也叫Idle time,是指计算机没有鼠标或者鍵盘操作的时间长度,之所以要引入这个功能,是因为不少计算机开机后,一直处于无人使用状态,白白地消耗着电能。
之所以要设计定时关机和空闲关机两个选项,这是因为,有些公用电脑,是允许白天一直开机的,如读报机;而阅览室的公用电脑,数量多,无人使用一定时间时,则需要关机,以达到节能目的。但是,不管什么情况,晚上指定时间(如22:00)所有电脑都需要强行自动关机。
定时关机和空闲关机,在程序设计中,需要允许修改关机时间和空闲关机时间,以及是否启用这些功能。本程序将这些设置参数保存在一个配置文件里面,当程序每天开机运行时会自动读取这些参数,如果配置文件被删除或者丢失,会载入默认参数。
按照以上思路,设计程序主界面,如图2所示。
“设置”按钮只用于设置关机时间和空闲关机时间以及是否启用它,当程序运行时,会自动载入这些配置参数并按照这些参数执行。
2.3 定时关机和空闲关机部分关键代码
procedure calshutdowntime;//换算关机时间
ss:=sphh.Value*60+udmm.position;
ss:=ss*60;//关机时间(秒)
sidle:=udidle.Position*60;//设定空闲时间长度(秒)
计算时间空闲时间值函数:
function Idletime: integer;//
var LInput: TLastInputInfo;
begin LInput.cbSize:=SizeOf(TL
astInputInfo);
GetLastInputInfo(LInput);
Result:=(GetTickCount-LInput. dwTime)div1000;//已空闲时间长度(秒)
end;
定时器Timer1代码:
timeStamp:= DateTimeToTimeSta
mp (now());
i:=timestamp.Time div 1000-ss;
if i>0 then//定时关机时间到
begin
Timer1.Enabled:=false;
winexec(pansichar(‘cmd/c shutdown-s-f-t00),sw_Hide);//定时关机时间到强行关机
end;
if idletime >=sidle then//如果空闲时间达到设定值
winexec(pansichar('cmd/c shutdown-s-f-t00'),sw_Hide);//空闲时间到强行关机可执行程序界面如图3所示。
3 结论
该文的实际例子,已经在近百台Win7计算机上验证运行了3个月以上,定时开关机和空闲关机执行状况稳定理想。不足之处在于,如果定时开始也能通过Delphi编程实现,那就很完美了,但由于不同机型的BIOS版本和型号有差异,目前Delphi直接读写实现尚有困难。
参考文献
[1] 刘湖平.基于BIOS和Windows XP之任务计划实现定时自动开关机[J].科技资讯,2012(16):31
[2] 黄新革.基于Delphi的Windows 2000服务器定时关机程序[J].信息技术,2003,27(3):72-74.