潘伟珍 倪 坚 何浩平
摘 要:国家教育部近年进行的远程教育已遍及全国各地。远教设备已全部安装到位,在教育资源方面也给一线教育工作者提供了有力的支撑,给教学带来了便利与成效,但在资源接收方面仍存在一些困扰和问题。笔者在实践中不断摸索,针对问题设计了相应的解决方案供远程教育工作者参考。
关键词:远程教育;资源接收;解决方案
中图分类号:TP315文献标识码:A文章编号:1673-8454(2009)02-0064-03
国家教育部近年进行的远程教育已遍及全国各地。远教设备已全部安装到位,在教育资源方面也给一线教育工作者提供了有力的支撑,给教学带来了便利与成效。远程教育资源的接收工作是进行远教的基石,接收的情况好坏直接关系到此项工作的成败。
本人一直从事信息技术教学与远程教育工作,在多年的教学实践中,曾一直被以下一些问题所困扰:一个是每天要定时开机。另一个是无信息接收时为了设备的保护及省电等原因应及时关机。再一个更麻烦的是,自从本人将系统重做及添加了一些应用程序之后,可能是由于系统带的服务增多了,本来只需手动开机后即自动开始卫星锁定,再开始接收工作,这一切不需人工干预,可现在当接收软件运行时总是提示“卫星尚未锁定”错误(其实这时卫星已经锁定,你再手动进行锁定也没用)!而且点“确定”几次后仍是如此。需过一两分钟再点“确定”按钮,然后再点“开始”按钮。从开机到开始接收大约需要几分钟。
在实践中笔者经过不断摸索,终于解决了这一系列问题。现在,远教接收工作基本实现自动化。现抛出本人的解决方案与各位共勉,希望能给各位远教工作者带来方便。
一、定时开机
国家教育部配置的联想计算机主板支持定时开机功能(当然现今所有计算机几乎都支持此功能)。方法是在CMOS中进行设置:
Power Management FeaturesResume On RTC Alarm设为Enabled;
Date(of Month) Alarm设为0(0为每天,否则为每月某天);
Time(hh:mm:ss)Alarm设为开机时间(本人根据需要设为6∶00∶00, 即6点开机)。
二、来电启动
对于农村及偏远山区,停电几乎是不可避免的事情。笔者所工作的地区在用电紧张的夏季更是断电频繁,一天中时来时断。同时,有了后面所设的定时关机作保障,在不需开机的时间段来电开机后会自动关机。
其实,在CMOS中同样可以进行此项的设置。方法是:
进入Integrated PerigheralsSuperIO Device进行设置;
Restore On AC Power Loss 设为Power On (Power off 为来电保持关机,Power On 为来电启动,Last State为恢复停电前状态)。
三、远教接收与定时关机
部分计算机由于自带服务过多,使卫星尚未锁定时接收软件便已启动,于是报错,针对上述问题本人曾想,何不用程序来模拟人工做反复点击“确定”、“开始”按钮呢?可是实现起来有些麻烦,后来也认为没有必要。 找到问题的症结所在,我们直接在计算机启动一分钟后再启动接收软件不是更方便吗?先是从系统的“开始程序启动”中删除远教接收软件的快捷方式,再加入我的软件,让我的软件启动后开始计时,一分钟后再调用接收软件进行接收,这时系统自带的服务已基本到位,卫星也已经锁定,就不会再出现以上所说的问题。同时针对每周数据接收的时间规律,让程序接收数据后自动关机,这样也就解决了关机问题。
思路对了,问题就解决了一半。于是笔者利用业余时间编了一个远教辅助管理软件,对远教接收机进行自动化管理。软件可在我个人网站下载: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.定时关机
思路:远教资源每周卫星发送时间基本是固定的,而且每周一前就会推出资源播出表,一般如下:
周一08:00至23:59
周二08:00至23:59
周三08:00至17:30
周四6:00至8:00
周五无
周六周日重播
同时,由于远教资源传送是全国统一时间的,所以一般并不需要那么长的接收时间。(也要考虑那些老式计算机速度及卫星信号质量的影响)如我使用CPU为P4 3.06G的联想计算机,每次连续播出的资源均只需两三小时就可收完,如果不使用计算机的话,完全不必整天开机。并且,如果已接收完整,在重播时又重新接收的话(只要开机,就会重新接收,而不是验证与更新,这是卫星传输的一个特点),大量数据的读写对硬盘也是一种伤害。于是笔者根据资源播出时间表用软件来进行关机管理。
这部分功能可细分为以下几步:
(1)取系统时间,判断星期几
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下测试通过。
经过以上设置,并运用本人的辅助软件,远教资源接收工作可以说基本实现了自动化,达到事半功倍的效果。如果您也是从事远程教育的同行,希望对您的工作带来帮助,并敬请提出宝贵意见。
(编辑:王天鹏)