珞珈山水BBS武汉大学计算机学院 → 单文区文章阅读

单文区文章阅读 [返回]
发信人: bigwhu (无产阶级战士), 信区: C.S
标  题: Re: 求助:如何打开dxr文件?【网上搜的,不太明白】
发信站: BBS 珞珈山水站 (Thu Mar 22 04:14:42 2007)


【 在 samantha338 (sam) 的大作中提到: 】
: 请教达人,下载了一个关于office的视频教程,但是全是dxr文件,没有办法打开。


DXR是Macromedia Director受保护(不可编辑)电影文件 

Director文件的保护与还原 
donlee 

作为广受多媒体开发人员钟情的开发平台,Director可以根据开发人员的需要输出多种格
式的文件,其中最常用的格式当属dir文件以及加以保护的dxr文件,后两种格式的文件是
用于播放的,不可再用Director编辑,一般最终作品都做成这样的格式。但在我们在实际
开发过程中,往往由于备份文件损坏或出于学习观摩的目的等种种原因,有必要打开这类
文件作为参考或继续编辑。本文从技术的角度出发,完全依靠Director自身提供的工具,
对dxr文件的保护与还原手段作一探讨,所有讨论基于Director 8.0。 

一、保护 

Director在其IDE环境可通过逐级选择菜单"Xtras"->"Update Movie...",来把文件改为d
xr格式,或通过publish输入为dcr格式的文件,不允许再被Director打开或编辑,以此来
保护作品不被篡改。这是Director所提供的最基本的保护手段。 

二、还原 

不知出于何种考虑,Director所内嵌的lingo语言中有savemovie、save castlib两个保存
movie和cast的命令,而且这两个命令对于dxr和dcr也有效!正是这两个命令,为还原被保
护的文件大开方便之门。由于我们不能在Director下直接打开这两种文件,于是我们想到
了MIAW,把它们通过MIAW打开,Director允许使用tell命令向miaw发送消息,因而我们尝
试用这种途径来遥控dxr保存成可以再编辑的dir文件。作法如下: 
新建一个movie,编写一个movie script,内容为: 
on outputdir input output 
miaw=window(input) 
tell miaw to savemovie output 
forget(miaw) 
end 

假设我们要打开的文件是“D:\Locked.dxr”,希望解除保护并另存为“D:\unlocked.dir
”,则执行此movie,在message窗口中输入outputdir "D:\Locked.dxr" "D:\unlocked.d
ir",然后我们察看D盘根目录,将会在那里发现unlocked.dir文件,这个文件可以用Dire
ctor打开,所有的score、member安排与原文件毫无二致,但其中所有的script内容均为空
白。 
正如把李白的诗翻译成英文,再由英文译成的中文已完全见不到诗仙的影子。由于转换成
dxr格式时,movie内的script都经过编译,转换成由计算机执行的代码。所以用savemovi
e也不可能得到原来文本格式script,下面谈到的所有还原手段对此都无能为力。 
目前在Director各论坛上大受青睐的还原工具dirOpener实际上完全基于以上思路来完成的
,这个小工具也的确是用Director来制作的。但dirOpener具有一个很好用的界面并补充了
一些关于光标和不规则窗口的“秘技”,这为Director初学者提供了一些方便,但对于有
一定lingo编程基础的人来说,它的能力实在有限,不如自己做一个更强的opener,至于理
由,请看“再保护”。 

三、再保护 

通常开发人员希望全面保护自己的作品,即使是score也不愿被他人窥视,怎样防止别人用
savemovie之类的手段来还原呢?还是用lingo!我们可以写一个处理程序,当movie接收到
savemovie命令时不保存movie,而是执行我们所定义的代码,对于save castlib也做同样
处理。下面的例子是方法之一: 
on savemovie 
quit 
end 
on save castlib 
quit 
end 

如果movie script含有以上内容时,则当movie接收到savemovie命令时,不会执行保存,
而是退出集成环境或projector,如果企图用dirOpener还原这样的dxr文件,结果将是没有
任何dir或cst文件输出,并且dirOpener自身也被退出,这是由quit命令的特点决定的,既
然dirOpener是用Director制作的,自然难以逃此噩运,有此软件的朋友一试便知。 

四、再还原 

为了解除用上述savemovie方法施加的保护,我们再次仔细研究一下lingo,发现可以用li
ngo在runtime动态地增加或删除member,或修改现有的member的内容。于是我们有了这样
的想法,先检查一下movie中所有的member,如果是script,则删除它,自然savemovie之
类的保护手段也不存在了。前面已经讨论过,还原出来的dir总是丢失所有script内容,所
以在这里删去它们也不会带来更多的遗憾。解除所有script作用的代码(包括保存新的mov
ie部分)如下: 
FileToBeOut=the file name to be output --modify it in your scripts 
miaw=window(FileToBeOut) 
tell miaw 
repeat with i=1 to the number of castlibs 
repeat with j=1 to the number of members of castlib i 
if member(j,i).type=#script then 
if member(j,i).scripttype=#movie then 
member(j,i).scripttext="" --script内容成为空白,但member名称会保留 
--或者 member(j,i).erase() --整个member被删除 
end if 
end if 
end repeat 
end repeat 
--上面的两层循环查找所有cast中的所有member,并解除所有movie script的作用 
savemovie "输出文件名" --为输出的文件命名 
end tell 
forget(miaw) 

至此,基于lingo的保护完全失效。我想在Director的下一个版本中,Macromedia应该不会
保留这种双手互搏之术了。 

如果朋友们有兴趣,可以在此基础上包装一个好界面,自己做一个新的dirOpener。如果希
望方便使用,可以用fileio xtra的displayopen和displaysave函数,来选择要输入、输出
文件的位置及文件名。至今我还是不能理解为什么作为免费软件的dirOpener要捆绑大而贵
的三个net相关的xtras和directOs。 

这种方法并不是万能的,尤其对于dcr文件,上面的手段往往无所施其技。
--
雾失楼台,月迷津渡,桃源望断無寻处。可堪孤馆闭春寒,杜鵑聲里斜陽暮。驿寄梅花,魚传尺素,砌成此恨無重数。郴江幸自绕郴山,爲谁流下潇湘去。              三国游戏攻略  http://blog.sina.com.cn/u/xubo
我的相册:     http://photo.163.com/photos/bigwhu
我的百度空间  http://hi.baidu.com/bigwhu
我的QQvideo   http://video.qq.com/userinfo.htm?u=383330169
我的G宝盘     http://bigwhu.gbaopan.com/

※ 来源:·珞珈山水BBS站 http://bbs.whu.edu.cn·[FROM: 222.20.216.*]
[返回单文区目录]

武汉大学BBS 珞珈山水站 All rights reserved.
wForum , 页面执行时间:12.099毫秒