论文部分内容阅读
【摘要】exe格式的swf文件不过是一个Flash播放器程序后面跟着一个swf文件,两个文件合成一个文件.由于它自带了播放器,所以比较方便,但缺点是文件体积大.本文着重介绍运用VB 6.0实现对*.swf文件到*.exe文件的转换.
【关键词】VB6.0;转换;Flash播放器
1.引 言
在实际教学中,我们经常会遇到这样的问题,我们制作的Flash课件拿到没有安装Flash播放器的机器上不能够播放演示.那么,有没有一种好的办法能够在没有安装Flash播放器的机器上顺利地播放Flash程序呢?带着这个问题,我们首先想到了格式转换,利用VB6.0能够很好地解决此问题.
2.播放器对swf文件的处理
Flash播放器在一个显示帧标签到来之前会处理显示帧标签之前swf文件的所有标签.在这个时候,播放列表被复制到屏幕上面,与此同时Flash播放器在处理下一帧之前是空闲的.第一帧所显示的内容,是在第一个显示帧标签之前的所有控制型标签操作产生的累积效果.第二帧所显示的内容,是从文件开始到第二个显示帧标签所有控制型标签操作产生的累积效果.以此类推.
3.由swf文件转换为exe格式的文件
swf文件转换为exe格式的文件转换步骤:
(1)以二进制方式读入你选定的Flash播放器,并原封不动地写入新文件.这个播放器以Adobe Flash Player为宜.播放器的版本不要太高,6.0左右即可,因为版本越高,体积越大.
(2)以二进制方式读入一个swf文件内容,并原封不动地写入新文件.
(3)写入四个字节的文件标识符“56 34 12 FA”.
(4)写入swf文件长度.
4.代码实现过程
新建一个工程,在窗体上添加3个文本框、1个按钮.
Text1输入全路径源文件名,Text2输入转换后的全路径文件名,Text3输入全路径播放器文件名.
按钮1的标题是“转为exe”.
如下图所示:
程序代码:
Option Explicit
Private Sub Text1_DblClick() ’选择源文件
On Error GoTo 100
CD.Filter = "*.exe;*.swf|*.exe;*.swf"
CD.ShowOpen
If Len(Dir(CD.FileName)) = 0 Then Exit Sub
Text1 = CD.FileName
Text2 = Left(Text1, Len(Text1) - 3) & IIf(LCase(Right(Text1, 3)) = "swf", "exe", "swf")
100
End Sub
Private Sub Text3_DblClick() ’选择播放器
On Error GoTo 100
CD.Filter = "播放器文件(*.exe)|*.exe"
CD.ShowOpen
If Len(Dir(CD.FileName)) Then Text3 = CD.FileName
100
End Sub
Private Sub Command1_Click() ’SWF转EXE
If Len(Text1) = 0 Or LCase(Right(Text1, 3)) <> "swf" Then MsgBox "请选择要转换的 SWF 文件": Exit Sub
If Len(Text3) = 0 Or LCase(Right(Text3, 3)) <> "exe" Then MsgBox "请输入播放器文件名": Exit Sub
If Len(Text2) = 0 Then MsgBox "请输入要保存的 EXE 文件名": Exit Sub
If SWFtoEXE(Text1, Text2, Text3) Then
MsgBox "转换成功!"
Else
MsgBox "转换失败!"
End If
End Sub
Private Sub Command2_Click() ’EXE转SWF
If Len(Text1) = 0 Or LCase(Right(Text1, 3)) <> "exe" Then MsgBox "请选择要转换的 EXE 文件": Exit Sub
If Len(Text2) = 0 Then MsgBox "请输入要保存的 SWF 文件名": Exit Sub
If EXEtoSWF(Text1, Text2) Then
MsgBox "转换成功!"
Else
MsgBox "转换失败!"
End If
End Sub
Private Function SWFtoEXE(swfFile As String, exeFile As String, PlayreFile As String) As Boolean
On Error GoTo 100
Dim fLen As Long
Dim Dat() As Byte
Open swfFile For Binary As #1’打开待转换的SWF文件
Open exeFile For Binary As #2’创建将生成的EXE文件
Open PlayreFile For Binary As #3’创建将生成的EXE文件
fLen = LOF(3)
ReDim Dat(fLen - 1)
Get #3, , Dat
Put #2, , Dat ’将播放器写入文件2
fLen = LOF(1)
ReDim Dat(fLen - 1)
Get #1, , Dat
Put #2, , Dat ’将SWF文件写入到文件2
ReDim Dat(3)
Dat(0) = Val(&H56): Dat(1) = Val(&H34): Dat(2) = Val(&H12): Dat(3) = Val(&HFA) ’56 34 12 FA是EXE形式的标识符
Put #2, , Dat ’写入标识符
Put #2, , fLen ’写入SWF文件长度
SWFtoEXE = True
100
Close
End Function
Private Function EXEtoSWF(exeFile As String, swfFile As String) As Boolean
On Error GoTo 100
Dim Dat() As Byte
Dim fLen As Long
Dim n As Long, i As Long, st As String
Open exeFile For Binary As #1
fLen = LOF(1) ’获取exe文件长度
ReDim Dat(3)
Get #1, fLen - 7, Dat ’获取exe格式的Flash文件标识
For i = 0 To 3: st = st & Hex(Dat(i)): Next
If st <> "563412FA" Then GoTo 100 ’如果不是EXE格式的Flash文件退出
Get #1, fLen - 3, n ’获取exe文件中的swf部分长度
ReDim Dat(n - 1)
fLen = fLen - n - 7
Get #1, fLen, Dat ’读取exe文件中的swf部分
Close #1
st = ""
For i = 0 To 2: st = st & Chr(Dat(i)): Next
If InStr("FWS,CWS", st) = 0 Then Exit Function ’如果不是EXE格式的Flash文件退出
Open swfFile For Binary As #2
Put #2, , Dat
Close #2
EXEtoSWF = True
Exit Function
100
Close
End Function
以上程序代码为*.swf文件到*.exe文件的转换.由于篇幅有限,我们对以上的EXEtoSWF 函数的代码稍加改动,还可以由exe格式的文件中剥离出播放器来.
【参考文献】
[1]Visual Basic从入门到精通.北京:人民邮电出版社,2010.
[2]剖析SWF文件结构探秘AVM运行原理.by laan,2009(12).
[3]龚沛曾,等.Visual Basic程序设计简明教程.北京:高等教育出版社,2006.
【关键词】VB6.0;转换;Flash播放器
1.引 言
在实际教学中,我们经常会遇到这样的问题,我们制作的Flash课件拿到没有安装Flash播放器的机器上不能够播放演示.那么,有没有一种好的办法能够在没有安装Flash播放器的机器上顺利地播放Flash程序呢?带着这个问题,我们首先想到了格式转换,利用VB6.0能够很好地解决此问题.
2.播放器对swf文件的处理
Flash播放器在一个显示帧标签到来之前会处理显示帧标签之前swf文件的所有标签.在这个时候,播放列表被复制到屏幕上面,与此同时Flash播放器在处理下一帧之前是空闲的.第一帧所显示的内容,是在第一个显示帧标签之前的所有控制型标签操作产生的累积效果.第二帧所显示的内容,是从文件开始到第二个显示帧标签所有控制型标签操作产生的累积效果.以此类推.
3.由swf文件转换为exe格式的文件
swf文件转换为exe格式的文件转换步骤:
(1)以二进制方式读入你选定的Flash播放器,并原封不动地写入新文件.这个播放器以Adobe Flash Player为宜.播放器的版本不要太高,6.0左右即可,因为版本越高,体积越大.
(2)以二进制方式读入一个swf文件内容,并原封不动地写入新文件.
(3)写入四个字节的文件标识符“56 34 12 FA”.
(4)写入swf文件长度.
4.代码实现过程
新建一个工程,在窗体上添加3个文本框、1个按钮.
Text1输入全路径源文件名,Text2输入转换后的全路径文件名,Text3输入全路径播放器文件名.
按钮1的标题是“转为exe”.
如下图所示:
程序代码:
Option Explicit
Private Sub Text1_DblClick() ’选择源文件
On Error GoTo 100
CD.Filter = "*.exe;*.swf|*.exe;*.swf"
CD.ShowOpen
If Len(Dir(CD.FileName)) = 0 Then Exit Sub
Text1 = CD.FileName
Text2 = Left(Text1, Len(Text1) - 3) & IIf(LCase(Right(Text1, 3)) = "swf", "exe", "swf")
100
End Sub
Private Sub Text3_DblClick() ’选择播放器
On Error GoTo 100
CD.Filter = "播放器文件(*.exe)|*.exe"
CD.ShowOpen
If Len(Dir(CD.FileName)) Then Text3 = CD.FileName
100
End Sub
Private Sub Command1_Click() ’SWF转EXE
If Len(Text1) = 0 Or LCase(Right(Text1, 3)) <> "swf" Then MsgBox "请选择要转换的 SWF 文件": Exit Sub
If Len(Text3) = 0 Or LCase(Right(Text3, 3)) <> "exe" Then MsgBox "请输入播放器文件名": Exit Sub
If Len(Text2) = 0 Then MsgBox "请输入要保存的 EXE 文件名": Exit Sub
If SWFtoEXE(Text1, Text2, Text3) Then
MsgBox "转换成功!"
Else
MsgBox "转换失败!"
End If
End Sub
Private Sub Command2_Click() ’EXE转SWF
If Len(Text1) = 0 Or LCase(Right(Text1, 3)) <> "exe" Then MsgBox "请选择要转换的 EXE 文件": Exit Sub
If Len(Text2) = 0 Then MsgBox "请输入要保存的 SWF 文件名": Exit Sub
If EXEtoSWF(Text1, Text2) Then
MsgBox "转换成功!"
Else
MsgBox "转换失败!"
End If
End Sub
Private Function SWFtoEXE(swfFile As String, exeFile As String, PlayreFile As String) As Boolean
On Error GoTo 100
Dim fLen As Long
Dim Dat() As Byte
Open swfFile For Binary As #1’打开待转换的SWF文件
Open exeFile For Binary As #2’创建将生成的EXE文件
Open PlayreFile For Binary As #3’创建将生成的EXE文件
fLen = LOF(3)
ReDim Dat(fLen - 1)
Get #3, , Dat
Put #2, , Dat ’将播放器写入文件2
fLen = LOF(1)
ReDim Dat(fLen - 1)
Get #1, , Dat
Put #2, , Dat ’将SWF文件写入到文件2
ReDim Dat(3)
Dat(0) = Val(&H56): Dat(1) = Val(&H34): Dat(2) = Val(&H12): Dat(3) = Val(&HFA) ’56 34 12 FA是EXE形式的标识符
Put #2, , Dat ’写入标识符
Put #2, , fLen ’写入SWF文件长度
SWFtoEXE = True
100
Close
End Function
Private Function EXEtoSWF(exeFile As String, swfFile As String) As Boolean
On Error GoTo 100
Dim Dat() As Byte
Dim fLen As Long
Dim n As Long, i As Long, st As String
Open exeFile For Binary As #1
fLen = LOF(1) ’获取exe文件长度
ReDim Dat(3)
Get #1, fLen - 7, Dat ’获取exe格式的Flash文件标识
For i = 0 To 3: st = st & Hex(Dat(i)): Next
If st <> "563412FA" Then GoTo 100 ’如果不是EXE格式的Flash文件退出
Get #1, fLen - 3, n ’获取exe文件中的swf部分长度
ReDim Dat(n - 1)
fLen = fLen - n - 7
Get #1, fLen, Dat ’读取exe文件中的swf部分
Close #1
st = ""
For i = 0 To 2: st = st & Chr(Dat(i)): Next
If InStr("FWS,CWS", st) = 0 Then Exit Function ’如果不是EXE格式的Flash文件退出
Open swfFile For Binary As #2
Put #2, , Dat
Close #2
EXEtoSWF = True
Exit Function
100
Close
End Function
以上程序代码为*.swf文件到*.exe文件的转换.由于篇幅有限,我们对以上的EXEtoSWF 函数的代码稍加改动,还可以由exe格式的文件中剥离出播放器来.
【参考文献】
[1]Visual Basic从入门到精通.北京:人民邮电出版社,2010.
[2]剖析SWF文件结构探秘AVM运行原理.by laan,2009(12).
[3]龚沛曾,等.Visual Basic程序设计简明教程.北京:高等教育出版社,2006.