Flash To EXE
Flex端 Flex创建一个Flex Project命名为Demo1,类型选Web application(runs in Flash Player)
在Demo1.mxml上添加一个按钮,并未按钮添加点击事件
private function ButtonClick(event:MouseEvent):void
{
//调用外部程序SayHello方法,并传入方法参数"Hunk",输出方法返回值result
if (!ExternalInterface.available) return ;
var result:String = ExternalInterface.call("SayHello", "Hunk");
trace(result);
}
EXE端
VS2008创建window应用程序项目
打开默认的窗体,向窗体添加ShockwaveFlashObject控件
向窗体添加下面代码,为ShockwaveFlashObject控件注册FlashCall事件接收Flash发送过来的请求
protected override void OnLoad(EventArgs e)
{
if (m_Init) return;
m_Init = true;
string swfPath = Path.Combine(Application.StartupPath, ConfigurationManager.AppSettings["SwfPath"]);
if (System.IO.File.Exists(swfPath))
{
axShockwaveFlash1.FlashCall += new AxShockwaveFlashObjects._IShockwaveFlashEvents_Fla shCallEventHandler(axShockwaveFlash1_FlashCall);
//通过配置文件加载Demo1.swf
axShockwaveFlash1.Movie = System.IO.Path.Combine(Application.StartupPath, swfPath);
}
}
private void axShockwaveFlash1_FlashCall(object sender, AxShockwaveFlashObjects._IShockwaveFlashEvents_Fla shCallEvent e)
{
try
{
//当点击Demo1.swf的按钮时,该方法就会被触发,这里需要解析swf发送过来的xml请求信息
//e.request格式
//Hunk
//根据e.request内容执行相关操作
//操作处理完成后需要返回值到swf,这时需要调用ShockwaveFlashObject控件的SetReturnValue方法
//返回Hello!给Demo1.swf
axShockwaveFlash1.SetReturnValue("Hello!");
}
catch (Exception ex)
{
}
}
总结
Flex调用外部应用程序方法(或flash to html)时主要使用ExternalInterface.call方法,详细了解该方法请查阅帮助。该方法会有一个比较严重的问题,当外部应用程序方法执行时间过长(大于60秒)而没有值返回时会报1502错误,所以操作时间大于60秒的方法需要另外的方式来实现,下篇会介绍如何实现异步调用方式解决该问题。
外部应用程序主要通过注册ShockwaveFlashObject控件的FlashCall事件来接收flash发送过来的请求,请求是xml格式的字符串,详细可查找flex builder的帮助了解。返回值时调用ShockwaveFlashObject控件的SetReturnValue方法。
进阶
理解了Flex To EXE的原理后就可以设计一些比较有用的方法让EXE来完成Flex所不能完成的操作(不用AIR),下面实现一个本地IO的API
package common
{
import flash.external.ExternalInterface;
public class LocalAPI
{
//Singleton static obj
private static var g_Instance:LocalAPI = null;
//获取LocalAPI单件实例
public static function get Instance():LocalAPI
{
if (g_Instance == null)
{
g_Instance = new LocalAPI();
}
return g_Instance;
}
public function LocalAPI()
{
if (g_Instance != null)
throw new Error("Singleton class. Please use Instance static filed.");
}
//写日志 public function Log(message:String):Number { return ExternalInterface.call(Command.FLASH_TO_APP_LOG, message); } //复制文件
public function CopyFile(srcFilePath:String, destFilePath:String):Number
{
return ExternalInterface.call(Command.FLASH_TO_APP_COPY_F ILE, srcFilePath, destFilePath);
}
//删除文件
public function DeleteFile(filePath:String):Number
{
return ExternalInterface.call(Command.FLASH_TO_APP_DELETE _FILE, filePath);
}
//复制文件夹
public function CopyFolder(srcFolderPath:String, destFolderPath:String):Number
{
return ExternalInterface.call(Command.FLASH_TO_APP_COPY_F OLDER, srcFolderPath, destFolderPath);
}
//删除文件夹
public function DeleteFolder(FolderPath:String):Number
{
return ExternalInterface.call(Command.FLASH_TO_APP_DELETE _FOLDER, FolderPath);
}
//写文件
public function WriteFile(filePath:String, content:String, append:Boolean):Number
{
if (append)
return ExternalInterface.call(Command.FLASH_TO_APP_WRITE_ FILE, filePath, content, "true");
else
return ExternalInterface.call(Command.FLASH_TO_APP_WRITE_ FILE, filePath, content, "false");
}
//读取文件
public function ReadFile(filePath:String):String
{
return ExternalInterface.call(Command.FLASH_TO_APP_READ_F ILE, filePath);
}
//获取路径的子文件夹列表
public function GetFolderList(folderPath:String):Array
{
return ExternalInterface.call(Command.FLASH_TO_APP_GET_FO LDER_LIST, folderPath);
}
//获取路径的子文件列表
public function GetFileList(folderPath:String):Array
{
return ExternalInterface.call(Command.FLASH_TO_APP_GET_FI LE_LIST, folderPath);
}
//创建新的文件夹
public function CreateDirectory(folderPath:String):Number
{
return ExternalInterface.call(Command.FLASH_TO_APP_CREATE _FOLDER, folderPath);
}
//判断文件是否存在
public function IsFileExist(path:String):Number
{
return ExternalInterface.call(Command.FLASH_TO_APP_EXIST_ FILE, path);
}
//判断文件夹是否存在
public function IsFolderExist(path:String):Number
{
return ExternalInterface.call(Command.FLASH_TO_APP_EXIST_ FOLDER, path);
}
}
}
转自 http://blog.csdn.net/hunkcai/archive/2009/12/15/50 11767.aspx
发表评论
-
字符串输入函数gets( ) fgets( ) scanf( )
2012-07-06 09:52 825C库提供了三个读取字符串的函数:gets( ) fget ... -
php-study
2012-07-06 09:46 694Let start! 1 静态变量拥有全局变量一样的生存周 ... -
在VC中使用代码组件的三种方法
2012-07-03 13:44 620我是北方的一匹狼,孤军南下…… 喜欢这边的天气,冬天也一样 ... -
Flex权威指南3学习笔记之一------界面知识(三)
2012-07-02 13:09 534使用视图状态 1.新建一个显示购物车的视图状态 ... -
Flex缓存客户端
2012-07-02 13:09 581flex或者flash客户端 ... -
Building a custom Flex preloader
2012-07-02 13:09 831http://www.adobe.com/devnet/f ... -
Felx中的声明addChild方法的类的层级关系
2012-07-02 13:09 538这里需要提到的是,不能在flex里直接用addChild( ... -
Flex4的可视化显示对象
2012-07-02 13:08 411flex3中用addChild(child:Display ... -
flex与twisted通过socket通信
2012-07-01 10:39 486flex端代码 Array = []; while( ... -
Flex TXT文件导入
2012-07-01 10:39 325在上一篇文章中,我们做了一个文件上传、导入组件,其实就是一 ... -
小白学Flex之数据类型
2012-07-01 10:39 420这是第一次写关于flex的文章,也是John开始学习Fle ... -
Flex 捆绑式验证处理
2012-07-01 10:39 529Flex提供的默认的验证器,比如:日期验证器、货币验证器等 ... -
PHP作为Flex程序的数据源
2012-06-30 17:03 332PHP作为Flex程序的数据源 2010年10月20日 ... -
myeclipse6.5+flex 3 + tomcat6.0 + ds-console.war环境搭建
2012-06-30 17:03 900myeclipse6.5+flex 3 + tomcat6.0 ... -
使用blazeds实现flex和java交互
2012-06-30 17:03 492使用blazeds实现flex和java交互 2010年07 ... -
flex笔记--安装与项目建立
2012-06-30 17:03 540flex笔记--安装与项目建立 2011年01月04日 ...
相关推荐
Flex简介、Flex的安装和开发环境的建立、MXML 语法简介、使用容器控制界面布局、使用组件处理数据和交互、使用行为对象和动画效果、ActionScript 3.0编程知识、Flex的事件机制、数据绑定、组件的使用、Flex 2.0新...
Flex第一步:基于ActionScript3.0的Flex2应用开发》讲述的:Flex是开发富互联网应用程序(RichInternetApplication,缩写为RIA)的利器,目前已广泛应用于各种商业领域,如电子商务、行政管理,企业业务流程自动化等...
《Flex第一步:基于ActionScript3.0的Flex2应用开发》讲述的:Flex是开发富互联网应用程序(RichInternetApplication,缩写为RIA)的利器,目前已广泛应用于各种商业领域,如电子商务、行政管理,企业业务流程自动化等...
《Flex第一步:基于ActionScript3.0的Flex2应用开发》讲述的:Flex是开发富互联网应用程序(RichInternetApplication,缩写为RIA)的利器,目前已广泛应用于各种商业领域,如电子商务、行政管理,企业业务流程自动化等...
Flex简介、Flex的安装和开发环境的建立、MXML 语法简介、使用容器控制界面布局、使用组件处理数据和交互、使用行为对象和动画效果、ActionScript 3.0编程知识、Flex的事件机制、数据绑定、组件的使用、Flex 2.0新...
编译和部署使用RSL的Flex应用程序 25.6节. 在Flex Builder调试中创建和监视表达式 25.7节. 在Flex Builder中安装Ant窗口 25.8节. 为自动通用任务创建一个Ant构建文件 25.9节. 使用mxmlc和Ant编译Flex应用程序 25.10...
比较全的教程 目录 第 1-4 章, ActionScript 编程概述讨论 ActionScript 3.0 核心概念,其中包括语言语 法、语句和运算符、ECMAScript 第 4 版语言规范草 ...件输入和输出、外部接口、应用程序安全模型等。
外部API示例:在ActionScript和Web浏览器中的JavaScript之间进行通信 第章:AIR中的XML签名验证 XML签名验证的基础知识 关于XML签名 实现IURIDereferencer接口 第章:客户端系统环境 客户端系统环境基础知识 使用...
“ExternalInterface”类是外部API,在ActionScript和FlashPlayer的容器之间实现直接通讯的应用程序编程接口,例如,含有JavaScript的HTML页。推荐对所有JavaScript与ActionScript之间的通信使用ExternalInterface。...
名称:CQU_S32K144_DEV开发板/评估板---综合...* (5) 运用FlexCAN总线通信功能,CAN0发送数据(500Kbps),CAN1中断接收数据(500Kbps) * (6) 运用LPIT定时器超时中断功能,每定时时间到(1s)读取A/D转换结果并通过CAN_0发送
28.4.1应用程序配置 591 28.4.2初始化窗口设置 595 28.4.3图标设置 595 28.4.4关联文??柚?596 28.5小结 597 第29章AIR部分特性介绍 598 29.1AIR本地窗口 598 29.1.1创建与关闭本地窗口 598 29.1.2添加窗体内容 600 ...
项目:资源项目 此渲染由Paul Lerat-Lambert进行,Denis ... 折叠,Navbar,NavbarToggler,NavbarBrand,Nav,NavItem ( ):主应用程序的导航栏。 用户界面材料 按钮( ):按钮设计。 芯片:( ):用于在客户管
12.4 更快地构建更好的应用程序 493 12.4.1 问题 493 12.4.2 解决方案 494 12.4.3 工作原理 494 12.5 从项目中删除Spring Roo 500 12.5.1 问题 500 12.5.2 解决方案 500 12.5.3 工作原理 501 12.6 ...
12.4 更快地构建更好的应用程序 493 12.4.1 问题 493 12.4.2 解决方案 494 12.4.3 工作原理 494 12.5 从项目中删除Spring Roo 500 12.5.1 问题 500 12.5.2 解决方案 500 12.5.3 工作原理 501 12.6 ...