EXE转SWF工具DIY

IT商界

  随着Flash在网络上的广泛流行,越来越多的电脑爱好者也开始加入了闪客的行列。然而,网络上许多Flash作品都是EXE形式提供的,这样虽然方便了没有安装Flash插件的朋友,但是EXE形式的Flash不能用于网页制作,更不用说分析Action什么的了。由于手边没有免费的EXE2SWF工具,于是决定自己DIY一个。

  转换原理

  格式:EXE形式的Flash文件由两部分组成,分别为Flash播放器和后面的Swf文件,播放器文件的标志符是376831、286719、811008(分别对应着Flash 4/5/6版本)。在SWF部分的标志符是ASCII码“FWS”。

  原理:我们只要在EXE形式的Flash文件中查找到“FWS”,然后从FWS开始的部分到文件尾全部写到一个新的SWF文件中即可完成转换。

  编写程序

  下面我们就以C++ Builder 5.0为例来说明实现方法。首先我们设计窗体。打开C++ Builder,在窗体上添加两个Button、两个Edit、一个OpenDialog以及若干个Label工具,界面设计如图所示,其他的采用默认值。

  1.Button1按钮是用来打开硬盘上EXE形式的Flash文件的,双击之,添加如下的代码:

  void_fastcall TForm1::Button1Click(TObject *Sender)

  { OpenDialog1->Title = "打开要转换的Flash文件";

  if (OpenDialog1->Execute())

  {Edit1->Text=OpenDialog1->File Name;

  Edit2->Text=ChangeFileExt(Edit1->Text,".swf");//此处为了方便自动给出目标文件名}}

  2.Button2按钮是用来转换文件格式的,双击之,添加如下代码:

  void_fastcall TForm1::Button2Click(TObject *Sender)

  {int iFileHandle;

  unsigned long iFileLength;

  unsigned long iBytesRead;

  AnsiString dFileName;

  unsigned char *pszBuffer;

  iFileHandle = FileOpen(OpenDia log1->FileName, fmOpenRead);//打开源文件

  iFileLength = FileSeek(iFileHandle,0,2);//确定源文件的长度

  FileSeek(iFileHandle,0,0);

  pszBuffer = new char[iFileLength+1]; //读入源文件

  if (pszBuffer==NULL)

  {return;}

  iBytesRead = FileRead(iFileHandle, pszBuffer, iFileLength);

  FileClose(iFileHandle);//关闭源文件

  if (FileExists(Edit2->Text)) //确定目标文件是否存在,如存在则返回重新命名

  {return;}

  int i=0;

  int ii=0;

  for (i=0;i<iFileLength-2;i++) //查找匹配识别字符 FWS

  {if ((pszBuffer[i-2]==0)&&(pszBuffer[i-1]==0)&&(pszBuffer[i]=='F')&&(pszBuffer[i+1]=='W')&&(pszBuffer[i+2]=='S'))

  {ii=i;}}

  i=ii;

  pszBuffer=pszBuffer+i;

  iFileHandle = FileCreate(Edit2->Text);

  if (i!=376831&&i!=286719&&i!=811008);//判断是否为Flash 4/5/6版本

  {if(!Application->MessageBoxA("不是官方的Flash文件!强制播放?","警告",IDOK))

  return;}

  FileWrite(iFileHandle, pszBuffer,iFile Length-i );

  FileClose(iFileHandle);

  ProgressBar1->Position=i;

  delete [] pszBuffer;}

  好了,我们现在按一下F9运行,打开一个EXE形式的Flash文件,按下“打开EXE文件”按钮,是不是瞬间就生成了SWF形式的Flash。该程序能够正确识别Flash4/5/6生成的EXE形式的Flash文件。

  以上程序在C++ Builder5.5、Windows98下调试通过。