概述

SCORM标准的课程是e-learning比较常用的标准,但课程要放到LMS浏览才看到课件数据的交互很不方便,下面介绍.net写的SCORM课件播放器,方便离线浏览SCORM课程或用于SCORM的课件测试。

主要实现

建立winform项目,向窗体添加web browser控件,添加窗体的Load,FormClosing事件

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using System.IO;

namespace ScormPlayer

{

[System.Runtime.InteropServices.ComVisibleAttribute(true)]

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

webBrowser1.ObjectForScripting = this; //让html访问窗体的成员

}

private void Form1_Load(object sender, EventArgs e)

{

string startupPath = System.Configuration.ConfigurationManager.AppSettings["StartupPath"];

//课程的入口文件,写在配置文件里,方便修改

string url = Path.Combine(Application.StartupPath, startupPath);

//SCORM外壳页面,主要初始化SCORM API对象,把课程的地址当做参数传入

string preview = Path.Combine(Application.StartupPath, "Preview.html?url=" + url);

webBrowser1.Navigate(preview);

}

//关闭控制

private bool _CanClose = false;

private void Form1_FormClosing(object sender, FormClosingEventArgs e)

{

if (!_CanClose)

{

//触发页面的onunload方法,让课件提交数据

webBrowser1.Document.InvokeScript("eval", new object[] { "window.top.close()" });

_CanClose = true;

}

e.Cancel = !_CanClose;

}

}

}

向窗体添加SCORM标准的API实现

//SCORM API 对象

public object API

{

get

{

return this;

}

}

public string LMSInitialize(string value)

{

return "true";//没特殊处理返回"true"即可

}

public string LMSFinish(string value)

{

//课件页面unload时关闭窗体

_CanClose = true;

Close();

return "true";//没特殊处理返回"true"即可

}

public string LMSGetValue(string model)

{

Util.Debug("LMSGetValue(" + model + ")");

//TODO:读数据,添加自定义处理,可读写数据库或读写文件

// string value;

// ...

// return value

return "0";//返回指定的数据,这里hard code返回"0"。

}

public string LMSSetValue(string model, string value)

{

Util.Debug("LMSSetValue(" + model + ", " + value + ")");

//TODO:写数据,添加自定义处理,可读写数据库或读写文件

return "true";//没特殊处理返回"true"即可

}

public string LMSCommit(string value)

{

return "true";//没特殊处理返回"true"即可

}

public string LMSGetErrorString(string value)

{

return string.Empty;//没特殊处理返回""即可

}

public string LMSGetLastError()

{

return "0";//没特殊处理返回"0"即可

}

public string LMSGetDiagnostic(string value)

{

return string.Empty;//没特殊处理返回""即可

}

添加SCORM外壳页面preview.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<html>

<head>

<title>课程学习</title>

<script language="javascript" type="text/javascript">

window.API = window.external.API; //创建SCORM API对象,window.external.API是Form1.API属性

//获取地址参数

function getParam(paramName) {

var url = unescape(window.location.href);

var allargs = url.split("?")[1];

var args = allargs.split("&");

for (var i = 0; i < args.length; i++) {

var arg = args[i].split("=");

if (arg[0] == paramName) {

return arg[1];

}

}

return "";

}

function loadUrl() {

var url = getParam("url");//课程的地址

if (url != "") {

document.getElementById("content").src = url;

}

}

</script>

<style>

html{height: 100%;}

body{height: 100%;margin: 0px;overflow: hidden;}

</style>

</head>

<body onload="loadUrl()">

<iframe id="content" name="content" width="100%" height="100%" frameborder="0" scrolling="no" src="">iframe>

<noframes>

</noframes>

</body>

</html>

配置文件配置课程的入口文件

xml version="1.0" encoding="utf-8" ?>

<configuration>

<appSettings>

<add key="StartupPath" value="Course3/index.html"/>

<!--<add key="StartupPath" value="Course1/Player.html"/>

<add key="StartupPath" value="Course2/lo/template.html"/>

<add key="StartupPath" value="Course3/index.html"/>

-->

</appSettings>

</configuration>

进阶

上面基本实现了SCORM标准,进一步完善,可以进行课程数据的存储,上载课程数据到平台,添加课程管理等功能,才算真正实现企业级的SCORM离线播放器。

制作SCORM课件离线播放器(C#)相关推荐

  1. html音频从10秒播放至30秒,基于Arduino制作SD卡音乐播放器

    一.项目介绍 前面用ATtiny85制作SD卡音乐播放器,本次主要利用Arduino UNO 和SD卡制作音乐播放器.这个播放器不需要添加多余的模块,只需要SD读卡器和Arduino UNO开发板就可 ...

  2. html制作在线视频音乐播放器,用html5制作音乐播放器,这3款就足够了!

    用HTML5结合Jquery做一个简易版的音乐播放器 代码展示: 三生草 var sum = 1; function ssss(a) { var s = document.getElementById ...

  3. html通过自适应制作手机端音乐播放器

    html通过自适应制作手机端音乐播放器 实现效果: 实现思路: 1.布局: (1).将手机的宽度进行10等分  为10rem (2).通过rem定义各个元素的宽高.间距.字体大小 (3).通过CSS3 ...

  4. google vr 入门之制作简易的VR播放器(二)

    本篇博客是 <google vr 入门之制作简易的VR播放器及去除界面控制按钮>的续篇: 是对上次创建的GVR播放器的优化与增强,建议先阅读上篇 本篇对播放器设置做了进一步优化: 1.支持 ...

  5. Android制作简易的音乐播放器和视频播放器

    文章目录 制作简易的音乐播放器和视频播放器 播放多媒体文件 播放音频 MediaPlayer的工作流程 项目示例 播放视频 项目示例 制作简易的音乐播放器和视频播放器 播放多媒体文件 Android在 ...

  6. 用html做成的音频播放器,HTML5制作酷炫音频播放器插件图文教程

    上图便是这个音频播放器的UI界面图,里面还隐藏了一个歌曲的播放列表.整个播放器的UI除了大背景的人像图和歌曲的星星评分使用了图片其他全部由CSS和font-face绘制而成,看上去有难度的地方就只有C ...

  7. PHP制作音乐播放器制作教案,js制作简单的音乐播放器的示例代码

    一.设计目的: 1.随着现在人民生活质量的提高同样伴随着生活压力的增大,越来越多的人追求越来越多的娱乐,其中一种娱乐方式就是音乐,于是突发奇想,制作一个音乐播放器. 2.主要功能: 1 支持循环自动播 ...

  8. [DIY]给孩子做个音乐盒(arduino制作LCD显示音乐播放器)

    一次带孩子去商场,他对一个用木盒做的,LCD显示的音乐盒非常感兴趣,玩了半天,于是便想给孩子做一个音乐盒. 完成效果图: 材料: Arduinouno USB供电音箱(或8欧姆喇叭,10欧姆电阻,10 ...

  9. google vr 入门之制作简易的VR播放器及去除界面控制按钮

    在moudle app 的build.gradle文件中 dependencies 节点下添加如下配置: // 使用google vr 添加的 compile 'com.google.vr:sdk-b ...

最新文章

  1. 识别迷雾中的物体,谷歌提出最新目标检测算法Context R-CNN
  2. Python Django 配置URL的方式(url传参方式)
  3. Android之mediarecorder中的方法以及工作流程的过程
  4. 移植U-BOOT之裁剪和修改默认参数(易用性)启动内核,以及对uboot进行分区
  5. 基于顺序存储结构的图书信息表的最贵图书的查找(C++)
  6. spring boot2 kafka
  7. (12)自定义数据流(实战Docker事件推送的REST API)——响应式Spring的道法术器...
  8. BZOJ 1911: [Apio2010]特别行动队 [斜率优化DP]
  9. linux 命名空间Namespace机制【转】
  10. Markdown打造高逼格博客
  11. 计算机专业毕业设计—351个VB管理系统源码打包(计算机专业整理)
  12. EDI 电子数据交换(Electronic data interchange,缩写EDI)
  13. JAVA实现飞机大战详解
  14. 如何对Windows 2000中出现的“Stop 0x0000007B”错误信息进行故障诊断
  15. html打开lync客户端,Lync 2013与Exchange 2013--客户端发现响应内容类型为“text/html ”,但应为“text/xml”...
  16. 多图片拼图怎么操作?这个方法不要错过
  17. 入手评测 锐龙r7 5825u和i5 1240p选哪个好
  18. [HTML] HTML简单实现网络测速
  19. iOS 视频、图片翻转问题
  20. OSI和TCP/IP网络参考模型傻傻分不清?图解和各层作用详细说明

热门文章

  1. P1498 南蛮图腾 题解
  2. PDF怎么编辑,如何去除PDF水印
  3. 4.人工神经网络(BP神经网络)
  4. linux下 批量替换文件内容
  5. Python实现熵值法确定权重
  6. 接收和处理客户投诉流程
  7. Unity与IOS互调
  8. 今日头条中文新闻文本(多层)分类数据集(NLP/文本分类)
  9. 整张TF卡备份与烧录:以镜像的方式
  10. 弹性地基梁板法计算原理_pkpm弹性地基梁计算.doc