阿里甫江·夏木西张广泰新疆大学建筑工程学院830046
摘要:由于PowerPoint课件(简称PPT)采用开放式文件,因而难以避免课件内容被随意复制更改。为了解决此问题,首先介绍了PPT封装并保护的一种新的思路,然后采用VisualBasic计算机编程语言编程实现了PPT封闭式资源库的创建、PPT的提取并直接播放程序,达到有效保护PPT的目的。
关键词:PowerPoint课件VisualBasic封装
一、引言
PowerPoint是Microsoft公司开发的Office系列软件包的重要组成部分,作为一种简便的演示文稿制作平台,在教学领域内广泛地用于多媒体教学课件的制作。但是,由于PowerPoint课件采用开放式文件,难以保护课件内容被复制,无法保证制作者的合法权益。鉴于PowerPoint课件的这些缺点,本文提出了保护课件的简易而有效的一种方法。
二、基本思路
借助一种计算机编程语言(以下简称编程语言)和一种程序打包工具软件较好的解决PowerPoint课件的封装问题。基本思路如下。
1.利用编程语言创建课件内容(PowerPoint演示文稿,以下简称PPT文件)的资源库。
2.利用编程语言建立集提取和播放资源库里PPT文件为一体的程序(PPT文件应被提取到本地硬盘比较隐蔽的位置,播放应借助计算机上已经安装的PowerPoint程序文件),课件内容只能由此程序负责放映。
三、制作过程
VisualBasic是Microsoft公司开发的另一款计算机高级编程语言,它具有应用简便、开发周期短等特点,是非专业程序开发者的理想工具。本文利用VisualBasic6.0(以下简称VB6)完成,PowerPoint课件的封装操作。
1.建立课件内容资源库
使用VB6的ActiveXDLL编译器创建课件内容的资源库,即把若干个PowerPoint演示文稿封装到一个资源库文件里,具体操作步骤如下。
(1)建立用于存取课件资源库文件的工作文件夹(例如建立“D:\PPT资源库”的文件夹)。
(2)启动VB6(依次点击:开始→所有程序→MicrosoftVisualBasic6.0中文版→MicrosoftVisualBasic6.0中文版)并从如图1所示的窗口中选择“ActiveXDLL”再点击“打开”按钮,此时程序进入ActiveXDLL创建界面(以下简称设计界面)。
(3)设计界面中依次点击菜单:外接程序(A)→外接程序管理器(A)…。此时出现如图2所示的窗口并从窗口中选择“VB6资源编辑器”再复选“加载/卸载(L)”,最后点击“确定”按钮。
(4)通过步骤3资源编辑器已加载完毕,现在定义用户资源文件。依次点击菜单:工具(T)→资源编辑器,此时出现VB6的资源编辑器窗口(如图3所示),在窗口中:
①点击“添加自定义资源”按钮通过Windows系统的资源管理器的文件打开对话框,按课件的章节顺序依次选择PPT文件,每添加一次文件,程序自动将其编号并将编号显示在“CUSTOM”下方。
②所需的PPT文件全部添加完成后点击“保存”按钮,此时出现系统资源管理器的文件保存对话框,保存时先将路径定位到前面创建的“D:\PPT资源库”,给资源文件(以下简称RES文件)起适当的名称(如ppt_resource.res等)或点击“保存”按钮。保存完成后关闭“VB6资源编辑器窗口”。
(5)第4步RES文件保存完成后即可生成资源库,依次点击:文件(F)→生成工程1.dll(K)…。出现“生成工程”对话框时先将路径定位到前面创建的“D:\PPT资源库”,给资源库文件起适当的名称(如ppt_resource.dll等)。
通过上述1—5步操作,课件的资源库文件创建完毕,按说明资源库文件的完整路径是“D:\PPT资源库\ppt_resource.dll”。
2.建立资源提取及PPT文件播放程序
成功创建资源库文件后,下一步要编制提取资源提取及PPT文件播放程序(以下简称播放程序),操作步骤如下。
(1)建立用于生成播放程序的工作文件夹(例如建立“D:\PPT播放程序”的文件夹)。并将资源库文件(ppt_resource.dll)复制到此文件夹中。
(2)启动VB6(依次点击:开始→所有程序→MicrosoftVisualBasic6.0中文版→MicrosoftVisualBasic6.0中文版)并从如图1所示的窗口中选择“标准EXE”再点击“打开”按钮,此时程序进入标准EXE创建界面(以下简称设计界面)。在设计界面显示一名为Form1的窗体,用户接着根据自己的需要在窗体上添加命令按钮(CommandButton)、框架(Frame)、标签(Label)等控件(注意:其中命令按钮添加时以控件数组添加)。本文拟设计如图4所示。
(3)编写代码(编写过程中随时将代码保存,保存路径为:“D:\PPT播放程序”)
程序代码主要部分为以下4项(其余说明的部分请参见相关的VB6API手册)。
①播放按钮的代码:
SubCommand1_Click(IndexAsInteger)
DimlResultAsBoolean,sFileNameAsString
sFileName=Save_Path&“gfgsdfgsretertfzcbnbfhfgy
rtyerty.mdb”'Save_Path为较为隐蔽的文件夹
lResult=SaveAnyResource(“100”+Index,sFileName,app.path&“\ppt_resource.dll”)
提取资源库里的PPT文件(详见②)
IflResultThen
IfDir(sFileName)<>“”Then
CallShowPPT(sFileName)调用播放过程(详见③)
Else
MsgBox“文件创建错误!”,vbCritical
EndIf
Else
MsgBox“发生错误!请确认关闭了上一次播放!”,vbCritical
EndIf
EndSub
②根据资源库文件路径提取资源库里的PPT文件并将其保存在磁盘上,代码如下:
FunctionSaveAnyResource(lngIDAsLong,strFileNameAsString,resDllNameAsString)AsBoolean
DimhInstAsLong,hFindAsLong,hLoadAsLong,hLockAsLong,hSizeAsLong
DimsNameAsString,b()AsByte,iFileAsIntegerSaveAnyResource=False
OnErrorGoTomERR:
sName=“#”&lngID
hInst=LoadLibrary(resDllName)'LoadLibrary为API函数
IfhInst=0ThenGoTomERR:
hFind=FindResource(hInst,ByValsName,“CUSTOM”)'FindResource为API函数
IfhFind=0ThenGoTomERR:
hLoad=LoadResource(hInst,hFind)'LoadResource为API函数
IfhLoad=0ThenGoTomERR:hLock=LockResource(hLoad)'LockResource为API函数
IfhLock=0ThenGoTomERR:
hSize=SizeofResource(hInst,hFind)'SizeofResource为API函数
IfhSize=0ThenGoTomERR:
ReDimb(0TohSize)AsByte
CopyMemoryb(0),ByValhLock,hSizeCopyMemory为API函数
OnErrorResumeNext
KillstrFileName
OnErrorGoTomERR:
iFile=FreeFile
OpenstrFileNameForBinaryAccessWriteLockReadAsiFile
Put#iFile,b
Close#iFile
iFile=0FreeLibraryhInst'FreeLibrary为API函数
SaveAnyResource=True
ExitFunction
mERR:
MsgBoxErr.Description,vbCritical
Err.Clear
IfNot(iFile=0)ThenClose#iFile
IfhInst<>0ThenFreeLibrary(hInst)'FreeLibrary为API函数
EndFunction
调用方法:SaveAnyResource({资源ID},{临时文件名},{资源库文件名})
③播放提取的PPT文件,代码如下:
SubShowPPT(pptFileNameAsString)
OnErrorGoTomERR:
CallShell(GetPrg_Path&“/s”&“““&pptFileName&”””,vbNormalFocus)’
GetPrg_Path为获得PowerPoint程序精确路径的函数(详见④)
ExitSubmERR:
MsgBox“发生未知错误!”,vbCritical
Err.Clear
EndSub
④获得PowerPoint程序的精确路径,代码如下:
FunctionGetPrg_Path()AsString
DimReg_ValueAsString
DimStrTmp,strFileNameAsString
Reg_Value=“SOFTWARE\Microsoft\Windows\Cur
rentVersion\AppPaths\”&“powerpnt.exe”
StrTmp=CStr(GetStringValue(HKEY_LOCAL_MAC
HINE,Reg_Value,“Path”))
GetStringValue为取得注册表值的函数
IfStrTmp<>“”Then
IfRight(StrTmp,1)<>“\”Then
strFileName=StrTmp&“\”&“powerpnt.exe”
Else
strFileName=StrTmp&“powerpnt.exe”
EndIf
EndIf
IfDir(strFileName)<>“”Then
GetPrg_Path=strFileName
Else
GetPrg_Path=“”
MsgBox“PowerPoint程序POWERPNT.EXE无法找到!”,vbCritical
EndIf
EndFunction
(4)生成播放程序
写完相关的代码及测试成功后,生成最后的可执行程序,依次点击以下菜单:文件(F)→生成工程1.exe(K)…。出现“生成工程”对话框时先将路径定位到前面创建的“D:\PPT播放程序”,给程序文件起适当的名称(如“PPT_CAI.EXE”等)。
通过上述1-4步操作,播放程序生成完毕,按说明播放程序文件的完整路径是“D:\PPT播放程序\PPT_CAI.EXE”。
3.完成封装及使用播放程序
通过上述操作完成了课件资源库及播放程序的创建,使用时只要将资源库文件(如文件“D:\PPT资源库\ppt_resource.dll”)和播放程序(如文件“D:\PPT播放程序\PPT_CAI.EXE”)放置在同一文件夹就可以从资源库中正常播放PPT文件而使用者无法得知PPT文件的存放位置。另外,还可以利用安装程序制作工具(如SmartInstallMaker)将相关文件打包成单一的安装程序,需要时直接安装使用。
四、结束语
PowerPoint作为一种应用广泛、使用简便的演示文稿制作工具成为很多学者的首选多媒体课件制作平台,但由于演示文稿采用开放文件,很难保证课件开发者的合法权益。本文结合计算机高级编程语言,较好地解决了PowerPoint演示文稿的封装问题。介绍中可以看出,封装完毕后只需携带资源库文件和播放程序,就可以在安装有PowerPoint软件的计算机上正常观看演示文稿,而不必携带开放的PowerPoint演示文稿的文件,达到了保护课件的目的。
参考文献
[1]刘瑞新王远征VisualBasic程序设计教程[M].北京:机械工业出版社,2008。
[2]李天启VisualBasic6.0学习捷径[M].北京:清华大学出版社,1999。