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#传递数据

}

}

}

[No000070]Flash与C#通信的更多相关文章

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

    在早期的项目中, 因为需要用IE上连接socket进行通信, 所以不得不借助于flash的socket功能,于是有了下面这个`FlashSocke`,供JavaScript调用 和 回调JavaScr ...

  2. [转]Flash Socket通信的安全策略

    昨天做测试的时候遇到一个问题,做好的SWF在Flash AS3中调试通过,但是发布到html中之后就无法得到数据了.查了一些资料之后找到了解决办法.这里感谢 剑心 提供帮助,以及同事若水三千提供Jav ...

  3. c# 与flash通信简介

    许久不曾写随笔,即使许久的怠惰,是该抬抬头,看看天了. 公司项目,项目要求是在winForm端先获取下位机的肌电信号采集数据,然后根据这些数据的变化来控制flash游戏,这样一些患者在flash游戏中 ...

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

    1.问题描述       将flash发布为html格式后,加载页面后,swf无法与服务器进行socket通信.Flash端显示的错误为:securityErrorHandler信息: [Securi ...

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

    一.实现原理.在某些场合,我们需要使用Flash进行“文件上传”,原因是Flash 能制作出表现力丰富的UI界面. (自负又孤陋寡闻的我在这里做一个补充:Flash使用flash.net包中的File ...

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

    1  为什么要采用Flash ActionScript实现RTMP协议发布或播放媒体流,播放媒体流,协议可控,比如对流媒体数加密,混音等. 2 核心思路使用Flash Socket建立TCP二进制传输 ...

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

    ===================================================== Flash流媒体文章列表: 最简单的基于Flash的流媒体示例:RTMP推送和接收(Acti ...

  8. spinor/spinand flash之高频通信延迟采样

    SPI协议 对于spinor和spinand flash,其通信总线为SPI总线. SPI有四种工作模式,对应不同的极性和相位组合 极性,一般表示为CPOL(Clock POLarity),即SPI空 ...

  9. RTMP协议

    Real Time Messaging Protocol(实时消息传送协议协议)概述   实时消息传送协议是Adobe Systems公司为Flash播放器和服务器之间音频.视频和数据传输开发的私有协 ...

随机推荐

  1. Hibernate插入数据后获得ID

    很多表的主键都是自增型的,新增的记录使用save()方法保存以后,要获得ID,直接使用getId()就可以了,因为此时记录已经保存进数据库,已经有了ID. 另一种方法是使用MySQL的SELECT L ...

  2. os模块汇总

    os.name 输出字符串指示正在使用的平台.如果是window 则用'nt'表示,对于Linux/Unix用户,它是'posix'. os.getcwd() 函数得到当前Python脚本工作的目录路 ...

  3. Eclipse导入项目出现红色叹号的解决方法

    情景: 我在另一台电脑开发Java Web项目,开发环境为 JDK 1.7,Tomcat v7.0,然后导入另一台电脑上,开发环境为为 JDK 1.8,Tomcat v8.0. 问题: 导入项目出现红 ...

  4. UDS(ISO14229-2006) 汉译(No.6 应用层服务)

    6.1总览 应用层服务通常被当作诊断服务.应用层服务用于在基于客户端-服务器的系统(Client-Server base System)中执行一些功能,例如针对车载服务器(ECU)的检测.检查.监控和 ...

  5. JMeter专题系列(二)录制脚本

    环境 Badboy  version 2.1.1 JDK: 1.7.0_67 Apache  JMeter-2.11 ----------------------------------------- ...

  6. C# Cache 设定缓存过期时间方法 绝对过期时间 和 相对过期时间(即:访问激活后不过期)

    摘自: http://www.cnblogs.com/zj1111184556/p/3493840.html 1. 设定绝对过期时间 /// <summary> /// 设定绝对的过期时间 ...

  7. 配置文件(App.config文件)

    1. 配置文件概述: 应用程序配置文件是标准的 XML 文件,XML 标记和属性是区分大小写的.它是可以按需要更改的,开发人员可以使用配置文件来更改设置,而不必重编译应用程序.配置文件的根节点是 co ...

  8. JavaScript闭包理解【关键字:普通函数、闭包、解决获取元素标签索引】

    以前总觉得闭包很抽象,很难理解,所以百度一下"闭包"概览,百度的解释是:“闭包是指可以包含自由(未绑定到特定对象)变量的代码块:这些变量不是在这个代码块内或者任何全局上下文中定义的 ...

  9. SVN版本控制系统学习(中文配置)

    先吐槽下往上搜索的一些SVN下载地址,里面乱七八糟啥都有,下载好后点击安装一不注意啥玩意都安装上了, 什么玩意都有,真心不明白这些推送者是怎么想的.搜集了一个WIN32的百度网盘下载地址: http: ...

  10. jQuery静态方法globalEval使用和源码分析

    Eval函数大家都很熟悉,但是globalEval方法却很少使用,大多数参考手册也没有相关api,下面就对其用法和源码相应介绍: jQuery.globalEval()函数用于全局性地执行一段Java ...