|
楼主 |
发表于 2012-4-11 15:53:33
|
显示全部楼层
;鉴于因flash版本的更新,不能正常运行旧版本swf文件
;特意编写这个小工具将较早版本的swf文件转为exe程序
;先准备个旧版flashplayer,我的是Micromedia Flash
;Player 7,将swf的打开方式设为它。然后随便打开一个
;,创建播放器,选择你的理想目录,回车。这样再次创建
;时就默认是这个目录了。接着将以下代码保存为au3文件
;放到swf目录的上一级,运行。一袋烟的功夫转换完成了
;完成后,再将swf打开方式设为adobe flash 10,删除旧
;版即可。
;-------------------------------------------------
;学思甚浅,天悯成果。菜鸟出品,大牛指正
;software:swf2exe author:vigiles
#include <File.au3>
#include <Array.au3>
;创建文本
$Log = _FileCreate(@ScriptDir & "\filelist.log")
;得到目录内的文件名列表(目录,过滤器,只返回文件)
Local $FileList = _FileListToArray(@ScriptDir & "\swf", "*", 1)
;将得到的文件列表写入文本(文本,数组内容,从数组的1索引开始,全部的,分隔符)
_FileWriteFromArray(@ScriptDir & "\filelist.log", $FileList, 1, 0, "|")
;得到文本行数,即文件个数(文件)
$Lines = _FileCountLines(@ScriptDir & "\filelist.log")
;循环(初始值,目标值,步进值)
For $i=1 To $Lines Step +1
;从文本读取文件名(文件,行号)
$FileLine = FileReadLine(@ScriptDir & "\filelist.log", $i)
;删除后缀(原文本,要替换的字符,目标字符)
$Str = StringReplace($FileLine, ".swf", "")
;更新文本(文件,行号,文本,覆盖)
_FileWriteToLine(@ScriptDir & "\filelist.log", $i, $Str, 1)
;运行目录内的文件(文件,文件目录)
;不能用ShellExecuteWait。好像没法用ProcessClose、WinClose、WinKill关闭。
ShellExecute(@ScriptDir & "\swf\" & $FileLine, @ScriptDir & "\swf")
;等待flash打开
;WinWait("Micromedia Flash Player 7");此句...没有达到理想效果
Sleep(500);把上一句换成这句效果不错。但不知为何好像必须有个延时
;获取进程ID
$ProID = ProcessExists("SAFlashPlayer.exe")
Sleep(10)
;保持激活状态
WinActivate("Micromedia Flash Player 7")
Sleep(10)
;ALT+f
Send("!f")
Sleep(10)
;r键
Send("r")
Sleep(10)
;文件名
Send($Str)
Sleep(1500)
;回车
Send("{ENTER}")
Sleep(1000)
;关闭
ProcessClose($ProID)
Next |
|