Flash与C#通信

  1. 注册控件

    首先要插入Flash就必须使用Flash控件,在工具栏右键选择"选择项…",然后在"COM组件"面板下点击"浏览"按钮,在本机电脑C:\WINDOWS\system32\Macromed\Flash\目录里选择Flash10x.ocx(也有可能是Flash10v.ocx或flash10p.ocx),然后点击确定就可以了。在CMD里面输入如下:
    regsvr32 C:\WINDOWS\system32\Macromed\Flash\Flash10x.ocx
    系统会提示注册成功。

  2. 控件属性

    打开VS,然后工具栏中选择的Flash控件Shockwave Flash Object拖到窗体中,
    注意到该控件主要有几个属性:
    Name属性,这个是所有对象都会有的。
    Menu属性,这个是Flash菜单项,默认值为true,也就是右键的时候会出现完整的Flash菜单,如果设置为False,则只出现最简单的菜单(设置与关于)。
    Move属性,这个属性是用来指定要播放的Flash文件的。
    Playing属性,指定是否装在影片之后马上播放。
    Quality属性,设置影片的质量。
    Scale Mode属性,设置影片的缩放模式。
    Visible属性,设置影片控件的可视与否。

  3. 隐藏Flash控件右键菜单

    这个方法主要用到继承和重写等面向对象的核心内容。
    首先声明一个类,让它去继承AxShockwaveFlashObjects.AxShockwaveFlash,该类是实例化Flash控件生成的类。该类中包含各种Flash的事件和属性,在这里我们只对右键菜单的事件感兴趣,因此我们去重写该事件。
    类的代码如下:

    public class FlashRightKey : AxShockwaveFlashObjects.AxShockwaveFlash
    ??? {
    ??????? //定义一个公共类FlashRightKey(类名自己定义)来继承AxShockwaveFlashObjects.AxShockwaveFlash(在实例化Shockwave Flash Object控件后生成)类

    ??????? protected override void WndProc(ref Message m) //重载WndProc方法(此方法即消息处理机制)
    ??????? {
    ??????????? if (m.Msg == 0X0204) //0×0204即鼠标右键的16进制编码
    ??????????????? return; //返回并不输出
    ??????????? else
    ??????????????? base.WndProc(ref m); //如果不是右键的话则返回正常的信息
    ??????? }
    }

    类写好了,我们要在Flash控件里面使用它,必须在实例化Flash控件的时候用如下代码(写在Flash.Designer.cs文件相应的地方):

private FlashRightKey RollFlash;

this.RollFalsh = new Namespace.FlashRightKey();

  1. C#与Flash控件通信

    通信数据采用XML格式。

    C#代码:

    绑定Flash控件

    private void FlashTest_Load(object sender, EventArgs e)

    {

    Flash.Movie = Application.StartupPath + @"\Test.swf";

    }

    调用flash提供的外部接口

    private void CallFunction(string funName, string flag)

    {

    Flash.CallFunction(EncodeXML(funName, flag));

    }

    将数据转换成XML格式

    private string EncodeXML(string funName, string flag)

    {

    StringBuilder sb = new StringBuilder();

    XmlTextWriter xw = new XmlTextWriter(new StringWriter(sb));

    ?

    xw.WriteStartElement("invoke");

    xw.WriteAttributeString("name", funName);

    xw.WriteAttributeString("returntype", "xml");

    ?

    xw.WriteStartElement("arguments");

    xw.WriteStartElement("string");

    xw.WriteString(flag);

    xw.WriteEndElement();

    xw.WriteEndElement();

    xw.WriteEndElement();

    ?

    xw.Flush();

    xw.Close();

    ?

    return sb.ToString();

    }

    执行动画开始操作

    private void Btn_Start_Click(object sender, EventArgs e)

    {

    CallFunction("Call", "001");

    }

    执行动画结束操作

    private void Btn_End_Click(object sender, EventArgs e)

    {

    CallFunction("Call", "002");

    }

    ?

    接收Flash发送过来的数据

    private void Flash_FlashCall(object sender, AxShockwaveFlashObjects._IShockwaveFlashEvents_FlashCallEvent e)

    {

    XmlDocument xd = new XmlDocument();

    xd.LoadXml(e.request);

    XmlNodeList xl = xd.GetElementsByTagName("arguments");

    ?

    MessageBox.Show(xl[0].FirstChild.InnerText);

    }

    ?

Flash代码:

package {

????import flash.display.*;

????import flash.text.*;

????import flash.events.MouseEvent;

????import flash.external.ExternalInterface;

?

????public class Test extends flash.display.MovieClip {

????????public function Test() {

????????????ExternalInterface.addCallback("Call",Call);//外部接口,供C#调用

????????????btn.addEventListener(MouseEvent.CLICK,SendCsharp);

????????}

????????//供C#窗体调用的方法

????????private function Call(flag:String):void {

????????????switch (flag) {

????????????????case ‘001‘ :

????????????????????df.gotoAndPlay(2);//控制动画开始

????????????????????break;

????????????????case ‘002‘ :

????????????????????df.gotoAndStop(1);//控制动画结束

????????????????????break;

????????????????default :

????????????????????break;

????????????}

????????}

????????//像c#窗体发送信息

????????public function SendCsharp(e:MouseEvent):void {

????????????ExternalInterface.call("Send","Hello World!");//外部接口,向C#传递数据

????????}

????}

}

?

?

时间: 2024-11-05 15:47:26

Flash与C#通信的相关文章

[No000070]Flash与C#通信

注册控件 首先要插入Flash就必须使用Flash控件,在工具栏右键选择"选择项…",然后在"COM组件"面板下点击"浏览"按钮,在本机电脑C:\WINDOWS\system32\Macromed\Flash\目录里选择Flash10x.ocx(也有可能是Flash10v.ocx或flash10p.ocx),然后点击确定就可以了.在CMD里面输入如下:regsvr32 C:\WINDOWS\system32\Macromed\Flash\Flas

FlashSocke 通过flash进行socket通信(as代码)

在早期的项目中, 因为需要用IE上连接socket进行通信, 所以不得不借助于flash的socket功能,于是有了下面这个`FlashSocke`,供JavaScript调用 和 回调JavaScript. code: 1 package 2 { 3 import flash.external.*; 4 import flash.display.Sprite; 5 //import flash.external.ExternalInterface; 6 import flash.events.

Flash Socket通信的安全策略问题 843端口

1.问题描述       将flash发布为html格式后,加载页面后,swf无法与服务器进行socket通信.Flash端显示的错误为:securityErrorHandler信息: [SecurityErrorEvent type="securityError" bubbles=false cancelable=false eventPhase=2 text="Error #2048"] 在服务器端显示的信息是由客户端尝试进行连接,但是无法接受数据.接受的数据显

c# 与flash通信简介

许久不曾写随笔,即使许久的怠惰,是该抬抬头,看看天了. 公司项目,项目要求是在winForm端先获取下位机的肌电信号采集数据,然后根据这些数据的变化来控制flash游戏,这样一些患者在flash游戏中达到肢体训练的效果. 在这里 需要用到c#与flash的通信, 先上通信示例 ActionScript3.0 与ActionScript2.0 略有差异,但和C#的通信方式是不变的. function xmlToArray(list:XML):Array { //xml转数组 list.ignore

Flash Media Server 入门教程

本文原地址:http://www.nshen.net/article/2007/08/29/fms-tutorial/ ,转载请保留链接 . 我把我以前的那些FMS学习笔记整理了一下,做了下修改,成了一页的FMS教程,方便想学FMS的新手来看,如果还有错误或者看不懂的地方欢迎留言. 注意: Flash Media Server的最新版本已经到FMS 4.X了 ,由于本入门教程是在2006~2007年所写,年代久远所以使用FMS 2演示,但当你了解了原理后可以很容易的升到4,因为FMS 1 到 F

Flash上传文件(结合asp.net)

一.实现原理.在某些场合,我们需要使用Flash进行“文件上传”,原因是Flash 能制作出表现力丰富的UI界面. (自负又孤陋寡闻的我在这里做一个补充:Flash使用flash.net包中的FileReference是可以发送文件数据到一个asp,asp.net或php页的,可以看浪子的[Flash FileUpload]用flash.net.FileReference实现ASP.NET无刷新文件上传,codeproject有这样的示例:Multiple File Upload With Pr

最简单的基于Flash的流媒体示例:RTMP推送和接收(ActionScript)

本文记录一些基于Flash的流媒体处理的例子.Flash平台最常见的流媒体协议是RTMP.此前记录的一些基于C/C++的RTMP播放器/推流器,但是没有记录过基于Flash中的ActionScript的RTMP播放器/推流器.其实基于Flash的RTMP播放器/推流器才能算得上是RTMP技术中的"正规军".RTMP本身设计出来就是用于Flash平台之间通信的,而且RTMP最大的优势--"无插件直播",也是得益于广泛安装在客户端的Flash Player.因此本文分别

基于Flash ActionScript 实现RTMP发布与播放媒本流

1  为什么要采用Flash ActionScript实现RTMP协议发布或播放媒体流,播放媒体流,协议可控,比如对流媒体数加密,混音等. 2 核心思路使用Flash Socket建立TCP二进制传输出通道,二进制数据主要是RTMP协议封装与音视频数据,播放音视频采用NetStream的appendBytes,通过Microphone采集数据和或网络获取音频文件并解码混音后发布给RTMP流媒体服务器. 3 github开源源码地扯:https://github.com/LucasLorentz/

框架选型

前面的话 有一个流传较广的笑话,一个人在stackoverflow中提了一个问题,如何使用javascript实现一个数字与另外一个数字相加.最高票回答是你应该使用jQuery插件,jQuery插件可以做任何事情. 历史总是在重演,以前是jQuery,现在可能是react或vue.不同的框架有不同的应用场景,杀鸡不要用牛刀.本文将详细介绍框架选型 框架与库 库(lib)具有以下三个特点: 1.是针对特定问题的解答,具有专业性: 2.不控制应用的流程 3.被动的被调用 框架(frameword)具