周昌海 樊玲
摘 要:針對圖書館公用電腦開機后長時間無人使用甚至24 h處于開機狀態(tài)的問題,提出了通過BIOS設置和Delphi編程,實現(xiàn)計算機每天無人值守條件下定時開關(guān)機及空閑關(guān)機功能,是對節(jié)能減排、低碳校園積極響應,在上百臺公用電腦中實際運行效果非常良好。
關(guān)鍵詞:圖書館 定時開關(guān)機 空閑關(guān)機 BIOS Delphi2010
中圖分類號:C931.9 文獻標識碼:A 文章編號:1674-098X(2015)03(c)-0228-01
圖書館作為大學的文獻中心和第二課堂,是大學生利用數(shù)字化網(wǎng)絡技術(shù)獲取課本外知識的重要場所?,F(xiàn)在的圖書館,公共區(qū)域的電腦,一般都有近百臺甚至數(shù)百臺。很多電腦每天開機后很少有人使用,甚至24 h開著機,每年的耗電是驚人的。管理人員因計算機分布在不同樓層,數(shù)量多,常在下班時直接給所有計算機強行拉閘斷電,也常常造成計算機硬盤壞掉或者Window系統(tǒng)故障,無法再開機。
該文針對這一問題,將計算機BIOS定時開機功能和Delphi編程二者配合使用,完美地解決了這個問題。
1 設計思路
如圖1所示定時開關(guān)機框圖,通過計算機的BIOS,設置每天定時開機時間;通過Delphi2010編程,實現(xiàn)每天定時關(guān)機和空閑關(guān)機目標。何時關(guān)機,空閑多久關(guān)機,是否啟用空閑關(guān)機,都可以隨時進行修改。
需要指出的是,Windows自身有定時關(guān)機和空閑關(guān)機的功能,但實際使用過程中,穩(wěn)定性不好,偶爾會發(fā)生定時關(guān)機和空閑關(guān)機沒有執(zhí)行的情況。相比較而言,通過Delphi編程所實現(xiàn)的定時關(guān)機和空閑關(guān)機,界面簡潔,操作簡單,經(jīng)過半年的使用,沒有發(fā)生未執(zhí)行關(guān)機任務的案例。
2 實現(xiàn)過程
2.1 定時開機的設置方法
以聯(lián)想啟天M7150為例,開機后按F1進入BIOS,按照以下步驟進行設置。
Power→After Power Loss,該項設置為Last State。這個設置的含義是,如果突然停電后再來電,計算機恢復到停電前的狀態(tài):若停電前是開機的,那么來電后自動開機;如果停電前是關(guān)機狀態(tài),那么來電后計算機不開機。
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 定時關(guān)機和空閑關(guān)機
定時關(guān)機,是讓計算機每天到了指定時間,強制關(guān)機,是為了避免計算機通宵開機而設置這一功能。
所謂空閑時間,也叫Idle time,是指計算機沒有鼠標或者鍵盤操作的時間長度,之所以要引入這個功能,是因為不少計算機開機后,一直處于無人使用狀態(tài),白白地消耗著電能。
之所以要設計定時關(guān)機和空閑關(guān)機兩個選項,這是因為,有些公用電腦,是允許白天一直開機的,如讀報機;而閱覽室的公用電腦,數(shù)量多,無人使用一定時間時,則需要關(guān)機,以達到節(jié)能目的。但是,不管什么情況,晚上指定時間(如22:00)所有電腦都需要強行自動關(guān)機。
定時關(guān)機和空閑關(guān)機,在程序設計中,需要允許修改關(guān)機時間和空閑關(guān)機時間,以及是否啟用這些功能。本程序?qū)⑦@些設置參數(shù)保存在一個配置文件里面,當程序每天開機運行時會自動讀取這些參數(shù),如果配置文件被刪除或者丟失,會載入默認參數(shù)。
按照以上思路,設計程序主界面,如圖2所示。
“設置”按鈕只用于設置關(guān)機時間和空閑關(guān)機時間以及是否啟用它,當程序運行時,會自動載入這些配置參數(shù)并按照這些參數(shù)執(zhí)行。
2.3 定時關(guān)機和空閑關(guān)機部分關(guān)鍵代碼
procedure calshutdowntime;//換算關(guān)機時間
ss:=sphh.Value*60+udmm.position;
ss:=ss*60;//關(guān)機時間(秒)
sidle:=udidle.Position*60;//設定空閑時間長度(秒)
計算時間空閑時間值函數(shù):
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//定時關(guān)機時間到
begin
Timer1.Enabled:=false;
winexec(pansichar(‘cmd/c shutdown-s-f-t00),sw_Hide);//定時關(guān)機時間到強行關(guān)機
end;
if idletime >=sidle then//如果空閑時間達到設定值
winexec(pansichar('cmd/c shutdown-s-f-t00'),sw_Hide);//空閑時間到強行關(guān)機可執(zhí)行程序界面如圖3所示。
3 結(jié)論
該文的實際例子,已經(jīng)在近百臺Win7計算機上驗證運行了3個月以上,定時開關(guān)機和空閑關(guān)機執(zhí)行狀況穩(wěn)定理想。不足之處在于,如果定時開始也能通過Delphi編程實現(xiàn),那就很完美了,但由于不同機型的BIOS版本和型號有差異,目前Delphi直接讀寫實現(xiàn)尚有困難。
參考文獻
[1] 劉湖平.基于BIOS和Windows XP之任務計劃實現(xiàn)定時自動開關(guān)機[J].科技資訊,2012(16):31
[2] 黃新革.基于Delphi的Windows 2000服務器定時關(guān)機程序[J].信息技術(shù),2003,27(3):72-74.