|
 |
Converting SWF to EXEActually, there is not conversion as such. The exe file (another name is Projector) consists of an executable player and SWF-movie. So "converting" is the creating of a single file from these two ones. It is possible to use Macromedia Player (SAFlashPlayer.exe) as an exe-part and it does not request Flash Player have been installed before.
function SWF2Exe(SourceName, DestName, PlayerName: string): boolean;
var
RStream, WStream: TFileStream;
flag, SwfFileSize: DWord;
begin
result := false;
WStream := TFileStream.Create(DestName, fmCreate);
try
RStream := TFileStream.Create(PlayerName, fmOpenRead or fmShareDenyWrite);
try
WStream.CopyFrom(RStream, RStream.Size);
finally
RStream.Free;
end;
RStream := TFileStream.Create(SourceName, fmOpenRead or fmShareDenyWrite);
try
WStream.CopyFrom(RStream, RStream.Size);
flag := $FA123456;
WStream.Write(flag, 4);
SwfFileSize := RStream.Size;
WStream.Write(SwfFileSize, 4);
result := true;
finally
RStream.Free;
end;
finally
WStream.Free;
end;
end;
... Procedure TMyForm.Button1Click(Sender: TObject); begin SWF2Exe('my.swf', 'my.exe', 'c:\Flash MX\Players\SAFlashPlayer.exe'); end;
Converting EXE to SWF
SWF can be extracted in case the exe-file is Macromedia Projector only.
function Exe2SWF(SourceName, DestName: string): boolean;
var
RStream, WStream: TFileStream;
flag, SwfFileSize: DWord;
begin
Try
RStream := TFileStream.Create(SourceName, fmOpenRead or fmShareDenyWrite);
try
RStream.Seek(8, soFromEnd);
RStream.Read(flag, 4);
if flag = $FA123456 then
begin
RStream.Read(SwfFileSize, 4);
RStream.Seek(SwfFileSize + 8, soFromEnd);
WStream := TFileStream.Create(DestName, fmCreate);
try
WStream.CopyFrom(RStream, SwfFileSize);
Result := true;
finally
WStream.Free;
end;
end;
finally
RStream.Free;
end;
except
result := false;
end;
end;
... Procedure TMyForm.Button1Click(Sender: TObject); begin Exe2SWF('my.exe', 'my.swf'); end;
to top |