如何防止学生脱离极域电子教室的控制

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何防止学生脱离极域电子教室的控制相关的知识,希望对你有一定的参考价值。

这是让广大的信息技术教师比较头疼的问题

经观察,学生是利用任务管理器来脱离控制的,原来极域在启动前有一段真空时间不能防进程结束,学生就是利用这点在电脑启动后进入桌面前狂按Ctrl+Alt+Del调出任务管理器,然后把studentmain.exe 主程序结束掉,这样就能脱离控制了!!!这段时间大概有5秒左右,动作快的学生很快可以迅速杀掉极域的进程.
解决方法很简单:
就是把任务管理器给禁止掉,或者把它改名(推荐,这样教师可在需要的时候手工运行即可)
参考技术A “开始”——选择“运行”点击运行后输入“msconfig”后点击“启动”点击“全部禁用”然后在“ctfmon”的那个选项打上勾,接下来就是点击“确定”然后切换用户最后电脑想怎样就怎样。。。这个问题是我自己想出来的个人觉得应该下载个后台的软件把鼠标锁定然后再把USB注册表修改下,让学生不能通过USB端口实现破解。。。。 参考技术B 哈,头痛呢
我们以前遇到过,学生现在多精啊

推荐另一款:管鲍多媒体电子教室。在安装前先卸载原同类程序电脑再重启后安装。学生怎么也逃不掉,功能也强大,如上什么课只能开什么软件.
,可限制U盘和光驱,没有U盘可以插!光驱也没有.他们没游戏玩就只能乖乖的去听课
参考技术C ◆◆一种简单的方法,网上搜索一个免费软件学生!机房管!理助。手,保护电子教室,防止学生脱离控制。。。 参考技术D 看你学生老不老实..
想我这种老是想研究这些东西的学生。再难我也会破解!
最强悍的方法就是上什么课只能开什么软件.
没有U盘可以插!光驱也没有.他们没游戏玩就只能乖乖的去听课..
就算脱离控制也没事好干!

极域教师端预览学生界面学生机按IP重排

极域教师端,表格视图中可以按机器名或者IP地址进行排序,而学生桌面预览处通常是按第一次登录上来的顺序排列的,这个看起来不太方便。另外,我通常喜欢噢易保护系统在刚装好重启进入修改IP地址的时候,让所有学生机连接一遍教师机,这样干活快一点,但这有一个毛病,就是学生母机如果最先开启并登录,导致之后第一个登录的学生机器名显示不正确,而如果学生母机后来开启,那么它的机器名不正确——极域本身的逻辑是要求所有学生机都修改完毕IP地址,重启一遍进入,再去开启教师机,这样显示的机器名才会按顺序。

事实上,第一次登录上的班级信息,极域把它写入了配置文件,配置文件位置在软件配置中可以指定(我一般默认)。修改这个配置文件,就可以修改任何学生机的机器名,也可以移动它的位置。我的任务是按IP地址来命名机器名,同时按IP顺序摆放位置,所以,写了以下PHP脚本来完成任务:

<?php

const DEBUG = 0;

$path = 'C:/Users/Public/Documents';
$filenames = scandir($path);
$dirnames = array_values(array_filter($filenames, function ($name) 
    return substr($name, 0,  6) === '极域';
));
if (count($dirnames) === 0) exit('未找到 C:/Users/Public/Documents 下极域相关目录'.PHP_EOL);
$dirname = $dirnames[count($dirnames)-1];
$path .= '/'.$dirname.'/zime/Class Data';
is_dir($path) || exit($path.' 不是目录'.PHP_EOL); 

$filenames = scandir($path);
$clsnames = array_values(array_filter($filenames, function ($name) 
    return substr($name, -4,  4) === '.cls';
));
$cnt = count($clsnames);
if ($cnt === 0)  exit('No cls file found!!'.PHP_EOL);
$clsname = $clsnames[0];
foreach ($clsnames as $k => $v) 
    echo "[$k]  $v".PHP_EOL;

echo 'Please select cls file, input the number [ENTER = 0]:';
$selectedKey = intval(fread(STDIN, 10));
if ($selectedKey >= 0 && $selectedKey < $cnt)  $clsname = $clsnames[$selectedKey];

$fileName = $path.'/'.$clsname;
echo 'Please input the prefix for machine name (i.e. JF517-):';
INPUT_PREFIX:
$prefix = trim(fread(STDIN, 10));
if (empty($prefix)) 
	echo 'Prefix should not be empty!'.PHP_EOL. 'Prefix: ';
	goto INPUT_PREFIX;


//libxml_disable_entity_loader(true);  // 禁止引用外部实体
$xmlObj = simplexml_load_file($fileName, 'SimpleXMLElement', LIBXML_NOCDATA);
$json = json_encode($xmlObj);
$a = json_decode($json, true);
//var_dump($a['students']['student']);

usort($a['students']['student'], function ($a, $b) 
    $address1 = $a['address']['@attributes']['IP'];
    $address2 = $b['address']['@attributes']['IP'];
    $n1 = intval(explode('.', $address1)[3]);
    $n2 = intval(explode('.', $address2)[3]);
    return $n1 > $n2;
);
//var_dump($a['students']['student']);

$positions = [];
foreach ($a['students']['student'] as $i => $student) 
    $attrs = $student['posThumb']['@attributes'];
    $positions[$i] = ['x' => $attrs['x'], 'y' => $attrs['y']];


usort($positions, function ($a, $b) 
    if ($a['y'] == $b['y']) return $a['x'] > $b['x'];
    else return $a['y'] > $b['y'];
);

//foreach ($positions as $i => $pos)
//    echo $i."\\tx=".$pos['x']."\\ty=".$pos['y'].PHP_EOL;

$indent1 = '    ';
$indent2 = '        ';
$indent3 = '            ';
$result = '';
foreach ($a['students']['student'] as $i => $student) 
    $addressAttributes = $student['address']['@attributes'];
    $n = explode('.', $addressAttributes['IP'])[3];
    $result .= $indent2.'<student>'.PHP_EOL;
    $result .= $indent3.'<name>'.$prefix.
        str_pad($n, 2, '0', STR_PAD_LEFT).
        '</name>'.PHP_EOL;
    $result .= $indent3.'<address';
    foreach ($addressAttributes as $k => $v)
        $result .= ' '.$k.'="'.$v.'"';
    $result .= ' />'.PHP_EOL;
    $result .= $indent3.'<posThumb';
//    foreach ($student['posThumb']['@attributes'] as $k => $v)
//        $result .= ' '.$k.'="'.$v.'"';
    $result .= ' x="'.$positions[$i]['x'].'" y="'.$positions[$i]['y'].'"';
    $result .= ' />'.PHP_EOL;
    $result .= $indent3.'<group';
    foreach ($student['group']['@attributes'] as $k => $v)
        $result .= ' '.$k.'="'.$v.'"';
    $result .= ' />'.PHP_EOL;
    $result .= $indent3.'<signIn';
    foreach ($student['signIn']['@attributes'] as $k => $v)
        $result .= ' '.$k.'="'.$v.'"';
    $result .= ' />'.PHP_EOL;
    $result .= $indent3.'<platform';
    foreach ($student['platform']['@attributes'] as $k => $v)
        $result .= ' '.$k.'="'.$v.'"';
    $result .= ' />'.PHP_EOL;
    $result .= $indent2.'</student>'.PHP_EOL;


$result = '<?xml version="1.0" encoding="utf-8" standalone="yes" ?>'.PHP_EOL.
    '<classmodel version="2.0" name="班级 1">'.PHP_EOL.
    $indent1.'<students>'.PHP_EOL.$result.
    $indent1.'</students>'.PHP_EOL;
$result .= $indent1.'<groups>'.PHP_EOL;
$result .= $indent2.'<group';
foreach ($a['groups']['group']['@attributes'] as $k => $v)
    $result .= ' '.$k.'="'.$v.'"';
$result .= ' />'.PHP_EOL;
$result .= $indent1.'</groups>'.PHP_EOL;
$result .= $indent1.'<signInInfos signInStrategy="0" signInSeqId="0" />'.PHP_EOL;
$result .= '</classmodel>'.PHP_EOL.PHP_EOL;

if (DEBUG)
	echo $result;
else 
	$cmd = 'del "'.$path.'/*.old"';
	$cmd = str_replace('/', '\\\\', $cmd);
	echo $cmd.PHP_EOL;
	system($cmd);  // delete .old file
	$cmd = 'rename "'.$fileName.'" "'.$clsname.'.old"';
	$cmd = str_replace('/', '\\\\', $cmd);
	echo $cmd.PHP_EOL;
	system($cmd);   // rename current to .old 
	file_put_contents($fileName, $result);  // write new data to .cls
	echo 'write new data to '.$fileName.' OK'.PHP_EOL;



//$xmlObj->asXML('/home/sjg/Downloads/newclass.cls');

上述脚本主要逻辑:

  • 查找 C:/Users/Public/Documents 下带有“极域”字样的目录,如果有多个,选择最后一个(多个的原因是装过旧版软件),在目录 C:/Users/Public/Documents/极域..../zime/Class Data  下(其中zime和教师账户名有关)找到所有 .cls 班级文件供选择;
  • 选定班级文件后,设定机器名前缀,我通常使用 JF+房间号+-,如 JF517-
  • 从所选班级文件(是xml文件)中读取数据转换为数组,将数组中学生机器部分进行自定义排序,排序规则为IP地址尾号
  • 读取数组中所有学生机显示位置的信息,把这个位置信息记录到数组并进行自定义排序,按 y 值大的大,y值相同的 x 值大的大
  • 用修改好的班级文件数组来生成新的xml文件,同时,每个位置依次用位置数组中的值

对于xml文件的生成,我采用了直接字符串拼接(没有用simplexml或dom操作之类),主要是因为班级文件比较简单,用拼合反而更容易。

配合这个php脚本处理写了个bat

@echo off
path=%path%;C:\\wamp64\\bin\\php\\php7.4.9
cmd  /c  php  jiyu.php
pause

rem  C:\\Users\\Public\\Documents\\极域课堂管理系统软件V6.0 2016 豪华版\\zime\\Class Data\\班级 1.cls

说实话,这个功能按理应该是极域自己提供的,例如提供一个编辑表格功能

以上是关于如何防止学生脱离极域电子教室的控制的主要内容,如果未能解决你的问题,请参考以下文章

单位用极域电子教室(E-Learning Class)软件,但有两台学生机不受控制,屏幕显示“开放模式”。

极域电子教室如何设置自动锁屏

学生教室教学软件

关于win10企业版在极域电子教室软件 v4.0 2015 豪华版的全屏控制下如何取得自由

惠普课堂管理系统极域教室学生端不能打开word文档等应用软件,提示出现一个电脑一把锁?

极域电子教室是怎样锁住键盘和鼠标的?