潘偉珍 倪 堅 何浩平
摘 要:國家教育部近年進行的遠程教育已遍及全國各地。遠教設備已全部安裝到位,在教育資源方面也給一線教育工作者提供了有力的支撐,給教學帶來了便利與成效,但在資源接收方面仍存在一些困擾和問題。筆者在實踐中不斷摸索,針對問題設計了相應的解決方案供遠程教育工作者參考。
關鍵詞:遠程教育;資源接收;解決方案
中圖分類號:TP315文獻標識碼:A文章編號:1673-8454(2009)02-0064-03
國家教育部近年進行的遠程教育已遍及全國各地。遠教設備已全部安裝到位,在教育資源方面也給一線教育工作者提供了有力的支撐,給教學帶來了便利與成效。遠程教育資源的接收工作是進行遠教的基石,接收的情況好壞直接關系到此項工作的成敗。
本人一直從事信息技術教學與遠程教育工作,在多年的教學實踐中,曾一直被以下一些問題所困擾:一個是每天要定時開機。另一個是無信息接收時為了設備的保護及省電等原因應及時關機。再一個更麻煩的是,自從本人將系統(tǒng)重做及添加了一些應用程序之后,可能是由于系統(tǒng)帶的服務增多了,本來只需手動開機后即自動開始衛(wèi)星鎖定,再開始接收工作,這一切不需人工干預,可現在當接收軟件運行時總是提示“衛(wèi)星尚未鎖定”錯誤(其實這時衛(wèi)星已經鎖定,你再手動進行鎖定也沒用)!而且點“確定”幾次后仍是如此。需過一兩分鐘再點“確定”按鈕,然后再點“開始”按鈕。從開機到開始接收大約需要幾分鐘。
在實踐中筆者經過不斷摸索,終于解決了這一系列問題?,F在,遠教接收工作基本實現自動化?,F拋出本人的解決方案與各位共勉,希望能給各位遠教工作者帶來方便。
一、定時開機
國家教育部配置的聯想計算機主板支持定時開機功能(當然現今所有計算機幾乎都支持此功能)。方法是在CMOS中進行設置:
Power Management FeaturesResume On RTC Alarm設為Enabled;
Date(of Month) Alarm設為0(0為每天,否則為每月某天);
Time(hh:mm:ss)Alarm設為開機時間(本人根據需要設為6∶00∶00, 即6點開機)。
二、來電啟動
對于農村及偏遠山區(qū),停電幾乎是不可避免的事情。筆者所工作的地區(qū)在用電緊張的夏季更是斷電頻繁,一天中時來時斷。同時,有了后面所設的定時關機作保障,在不需開機的時間段來電開機后會自動關機。
其實,在CMOS中同樣可以進行此項的設置。方法是:
進入Integrated PerigheralsSuperIO Device進行設置;
Restore On AC Power Loss 設為Power On (Power off 為來電保持關機,Power On 為來電啟動,Last State為恢復停電前狀態(tài))。
三、遠教接收與定時關機
部分計算機由于自帶服務過多,使衛(wèi)星尚未鎖定時接收軟件便已啟動,于是報錯,針對上述問題本人曾想,何不用程序來模擬人工做反復點擊“確定”、“開始”按鈕呢?可是實現起來有些麻煩,后來也認為沒有必要。 找到問題的癥結所在,我們直接在計算機啟動一分鐘后再啟動接收軟件不是更方便嗎?先是從系統(tǒng)的“開始程序啟動”中刪除遠教接收軟件的快捷方式,再加入我的軟件,讓我的軟件啟動后開始計時,一分鐘后再調用接收軟件進行接收,這時系統(tǒng)自帶的服務已基本到位,衛(wèi)星也已經鎖定,就不會再出現以上所說的問題。同時針對每周數據接收的時間規(guī)律,讓程序接收數據后自動關機,這樣也就解決了關機問題。
思路對了,問題就解決了一半。于是筆者利用業(yè)余時間編了一個遠教輔助管理軟件,對遠教接收機進行自動化管理。軟件可在我個人網站下載:http://flybase.51.net/YJFuZhu.exe。此軟件的源文件也共享給各位:http://flybase.51.net/YJYuanMa.rar。截圖如圖1所示。
各個主要部分源碼剖析于下:
1.開機時啟動接收軟件與關機倒計時
方法是軟件啟動后進行60秒倒計時,時間到了再調用接收軟件。主要的源碼于下:
……
void CHhpForYJDlg::OnTimer(UINT nIDEvent) //計時器
{
CTime curTime = CTime::GetCurrentTime();
switch(nIDEvent)
{
case 1: // 啟動遠教接收程序計時器
……
number60--;
if (number60<=0)
{
WinExec("C:\FileTray\FileTray.exe",1);// 調用接收軟件
KillTimer (1);//停止計時器1
……
}
break;
case 2://定時關機計時器
……
if(curTime.GetHour()>m_Hour )
OnShutDown();
else if(curTime.GetHour()>=m_Hour && curTime.GetMinute() >m_Minute )
OnShutDown();
else if(curTime.GetHour()>=m_Hour && curTime.GetMinute()>=m_Minute && curTime.GetSecond ()>=m_Second)
OnShutDown();
break;
}
}
……
2.定時關機
思路:遠教資源每周衛(wèi)星發(fā)送時間基本是固定的,而且每周一前就會推出資源播出表,一般如下:
周一08:00至23:59
周二08:00至23:59
周三08:00至17:30
周四6:00至8:00
周五無
周六周日重播
同時,由于遠教資源傳送是全國統(tǒng)一時間的,所以一般并不需要那么長的接收時間。(也要考慮那些老式計算機速度及衛(wèi)星信號質量的影響)如我使用CPU為P4 3.06G的聯想計算機,每次連續(xù)播出的資源均只需兩三小時就可收完,如果不使用計算機的話,完全不必整天開機。并且,如果已接收完整,在重播時又重新接收的話(只要開機,就會重新接收,而不是驗證與更新,這是衛(wèi)星傳輸的一個特點),大量數據的讀寫對硬盤也是一種傷害。于是筆者根據資源播出時間表用軟件來進行關機管理。
這部分功能可細分為以下幾步:
(1)取系統(tǒng)時間,判斷星期幾
CTime t=CTime::GetCurrentTime ();//取當前時間
i=t.GetDayOfWeek ();//取當天的星期幾
(2)讀寫文件進行關機時間設置
①讀文件,取關機時間
void CHhpForYJDlg::OnReadFile()//讀文件,從中確定關機時間.
{
……
m_Hour=atoi(m_XingQi[i-1].Mid(0,2));//時
m_Minute=atoi(m_XingQi[i-1].Mid(3,2));分
m_Second=atoi(m_XingQi[i-1].Mid(6,2));秒
UpdateData(false);//數據更新
fShutdownTime.Close();//關閉文件讀寫操作
}
②寫文件,設置關機時間
void CHhpForYJDlg::OnWriteFile()//寫文件,將每星期關機時間寫入文件
{
……
CStdioFile fShutdownTime; //定時關機的時間表文件
fShutdownTime.Open(GetPath()+"\fShutdownTime.txt", CFile::modeWrite | CFile::modeCreate | CFile::typeText);
if(m_BUseStar)//是否用本軟件來啟動接收軟件
str="1";
else
str="0";
fShutdownTime.WriteString(str+" ");
fShutdownTime.WriteString(s_FileName+" ");//寫入要延遲啟動的軟件名
for ( i=0;i<7;i++)//將每天關機時間表寫入關機時間表
fShutdownTime.WriteString(m_XingQi[i]+" ");
fShutdownTime.Close();//關閉文件讀寫操作
}
(3)關機
void CpwzForYJ:: OnShutDown()
{
……
//必須先取得關機權限
HANDLE hToken;
TOKEN_PRIVILEGES tkp;
// Get a token for this process.
if (!OpenProcessToken(GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES | TOKEN_
QUERY, &hToken))
MessageBox("OpenProcessToken");
// Get the LUID for the shutdown privilege.
LookupPrivilegeValue(NULL , SE_SHUTDOWN_ NAME,
&tkp.Privileges[0].Luid);
tkp.PrivilegeCount = 1;// one privilege to set
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ ENABLED;
// Get the shutdown privilege for this process.
AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,
(PTOKEN_PRIVILEGES)NULL, 0);
// Cannot test the return value of AdjustToken Privileges.
if (GetLastError() != ERROR_SUCCESS)
MessageBox("AdjustTokenPrivileges");
// 進行關機
if (!ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE, 0))
MessageBox("ExitWindowsEx");
::ExitProcess (0);
}
注:以上軟件用VC6.0編譯,在Windows XP、Windows 2000、Windows 2003下測試通過。
經過以上設置,并運用本人的輔助軟件,遠教資源接收工作可以說基本實現了自動化,達到事半功倍的效果。如果您也是從事遠程教育的同行,希望對您的工作帶來幫助,并敬請?zhí)岢鰧氋F意見。
(編輯:王天鵬)