技术问题,有点难度,欢迎讨论!!!(200分)

金洪

Unregistered / Unconfirmed
GUEST, unregistred user!
如何把SWF文件转换成EXE文件?
在FLASH自带的播放器中可以把SWF文件转换成EXE文件,其做法大概是把SWF文件追加到
FLASH自带的播放器文件的文件尾,在其后加上标志$FA123456,再加上总的文件大小。
通过以上的方法,的确可以通过delphi把swf文件转换成EXE文件,但前提是需使用FLASH
自带的播放器。
我的问题是,如何用自己的播放器代替FLASH自带的播放器通过DELPHI实现上述过程?
(http://sd.skycn.net/down/Flashback15.zip这个程序可以实现上述问题,但需要注册)
各位高手请指点!!!
 
用swfxxx.ocx.
 
TO maming:
我的意思是在delphi中通过flash.ocx做一个自己的播放器,再把SWF文件写入自己做的
播放器中并实现播放SWF的功能,也就和FLASH自带的播放器中可以把SWF文件转换成EXE文
件的功能一样!
 
将swf作为一个res应该可以加到程序里面
 
To sxbug:
你试没试 http://sd.skycn.net/down/Flashback15.zip(这个程序需要注册,可恶)
在其列表栏中右键点击选中的SWF文件,执行SWFTOEXE命令。我说的就是这种情况如何
实现,不过可以肯定不是通过资源文件的方法。
 
他那个播放器实际上核心是调用了其它的OCX控件来实现播放的,他的Swf2Exe只是把swf文件
写到他的播放器执行文件的尾部,之后在整个文件的尾部加入了长度标志,从而从文件中读
取数据。我估计他在播放时会将程序尾部包含swf文件的部分通过流的方式读出来写入到一个
临时文件中,播放器退出的时候又删除该临时文件。是否这样做取决于他采用的播放控件是
否支持直接人流中读取数据进行播放(确切地说应该是是否支持内存播放),如果支持的话
就不用转存临时文件这一步了。而他的将Flash做为屏保的功能则更容易理解了,就是把它
的播放器按照屏幕保护程序的规则,修改文件名并复制到Windows的相应目录下,并通过全屏
播放来实现。
总的来说这个程序的技术难度不高。
 
To Sachow:
我用File Monitor 跟踪了一下,发现他那个播放器肯定是使用的是flash.ocx控件,而且
他的Swf2Exe和我原来的想法是一样的:只是把swf文件写到他的播放器执行文件的尾部,
之后在整个文件的尾部加入了长度标志,从而从文件中读取数据,而且采用了临时文件,
(与你想的也是一样的)临时文件的路径是:(Win200系统)
C:/Documents and Settings/Administrator/Local Settings/Temporary Internet Files
但奇怪的是运行生成的EXE文件,应该在该临时文件夹中能够找到相应的SWF文件,但我在
该路径中却找不到其创建的临时的SWF文件!不知道为什么???
那位大虾能指点迷津!!!
 
用swfxxx.ocx,我以前用过。
 
To Anubis99:
swfxxx.ocx是不是flash自带的控件?现在flash 6.0的控件是FLASH.OCX!!!
 
大家来研究一下FlashPla.exe如何播放SWF文件的,希望大家多多讨论!!!
 
即使他是用临时文件的方式,临时文件却不一定是放在系统的临时目录下,为了不被别人轻
易地找到,他可以把文件存在任意一个目录,并且把文件写为任意名称,不一定要是.swf。

还有,我想了一下,如果播放控件支持的话,他甚至不用临时文件交换的方式就可以播放。
假设播放控件提供这样一个方法:
HRESULT _stdcall PlayFromPosition([in] BSTR FileName, [in] long StartPos, [in] long Size );
该方法读取FileName文件,从该文件的StartPos开始播放,播放数据的长度为Size,那么
调用播放控件的程序只需要从自己的尾部读出swf文件的位置、长度标志后,以此标志为参
数调用播放控件的PlayFromPosition方法就可以播放了,从而省去了用临时文件做交换的
那一步。
 
To Sachow:
我用File Monitor 跟踪的的确没错,临时文件的路径是:(Win200系统)
C:/Documents and Settings/Administrator/Local Settings/Temporary Internet Files
不过有点怪的是在资源管理器中该目录下找不到该文件,但在Dos命令行提示符窗口下却可
以看到该文件,我又做了一个试验在Dos命令行提示符窗口下通过COPY命令随便复制到该目
录下几个文件,结果和刚才一样:在资源管理器中该目录下找不到刚才复制的文件,而且
通过文件查找的方法在该目录下也找不到刚才复制的文件 但Dos命令行提示符窗口下却可
以看到,我想也许是Win2000系统的“问题”。
Flash控件没有提供没有提供播放数据流的方法,如果通过使用Flash.ocx控件的话,我想
也只有通过临时文件的方法了,我用File Monitor 跟踪了用Flash自带的播放器生成的EXE
文件的运行情况,结果发现了一个秘密,Flash自带的播放器好像没有使用Flash.ocx控件
而是采用了数据流或是数据缓冲的方法,其运行时也是先定位到swf文件的位置,然后每次
都读取1024字节。
不知道它是用的什么方法,你有什么见解?
 
那是播放器(解码器)的核心问题,只有Flash的开发人员知道细节。播放器(解码器)的
工作方法是与数据格式密切相关的,只有知道数据格式,才能分析出播放器(解码器)的
工作方法。
对于一种流式数据而言,核心代码对于一次播放一小段数据与一次读取整个文件是没有多
少差别的,读取整个文件时,实质上也应该是分次将一定长度的数据读到缓冲区里,直到
文件指针到达文件尾部,而不是把文件的所有数据读到内存里。
 
To Sacho:
Macromedia公司已经公布了SWF的文件格式,不过我不知道在什么地方能够下载,如果知
道的话,给我个地址
E-Mail:generalu@21cn.com。
Thanks!
 
没有研究过,我不是做多媒体编程的。我在Macromedia的网站上搜索了一下“Format”关键
字,找到一个入口,又要注册和填表,我就没有试了:
http://www.macromedia.com/software/flash/open/licensing/fileformat/license2.html
 
To Sachow:
Thanks!
我试一下,另外可以交个朋友吗,我也不是做多媒体编程的,那只是我的个人爱好,我只是
想研究一下Flash自带的播放器转换SWF文件为EXE文件的方法。
谢谢你的关注!
以后又问题还要多多请教!!!
 
接受答案了.
 
顶部