关闭

FScommand()实现与外部程序的信息交互

916人阅读 评论(0) 收藏 举报
 

FScommand()实现与外部程序的信息交互

作为制作课堂教学课件的三大主流程序(PowerPoint, Authorware和Flash)之一的Flash,它是公认的制作高品质的课件的首选。而Flash的ActionScript(动作脚本语言)则是Flash制作的灵魂和精髓。可以毫不夸张地说,不会ActionScript的人,就是不懂得Flash。

FScommand()命令是Flash用来和支持它的其他应用程序互相传达命令的工具。我在这里通过几个例子来说明FScommand()命令的常用的方法。

 

一.控制Flash影片(swf)或Flash播放器(exe)的播放

FScommand()命令的使用方法是:FScommand(command,argument)

Command是命令字符串;argument是参数字符串。

Command命令字符串可以是:

“Quit”             退出播放

“FullScreen”       是否全屏播放

“Exec”             运行指定的程序或调用函数

“Show Menu”        显示播放器菜单

 

先来个简单的,在Flash的时间轴中,选中第一帧,打开“动作”面板(或按F9),在面板的编辑区中输入代码:

fscommand("fullScreen", true);

再导出影片。运行影片文件时,你会发现,影片以全屏的方式播放!

 

二.利用中间程序运行其他程序并传递参数

FScommand()的Exce命令,会让影片文件或播放器运行其他的程序或调用IE中的函数。

 

Flash 3、4、5版本中,调用exce命令是非常方便的。用法是

fscommand("exce",程序名+空格+文件名);  //某种程序打开某个文件

程序名和文件名的前面可以加上绝对路径或相对路径,这样它就能以命令行的方式来打开所有的文件。这也成了黑客入侵的方便途径。

而在Flash 6、7、8版本中,Flash增强了它的安全性,对exce命令的使用作了限制:其他的程序必须在播放器中exe)才能才能运行,在Flash影片(swf)中是无法运行的;需要调用的程序必须在播放器所在的文件夹的FScommand子文件夹中;而且argument参数字符串只能是程序名,不能带路径,不能带文件名,也就是fscommand("exce",程序名)

这样,用exce就只能打开程序,而无法直接打开文件。难道就没有别的办法把文件名作为参数传给程序?

在这里,我举一个例子,按动Flash播放器(exe)中的一个按钮,用wplayer2.exe播放beijing.avi影片。

原理: 我们可以在Flash中,把命令行以字符串的形式传入系统剪贴板中(“wplayer2.exe beijing.avi”),然后调用自己编写一个中间程序fOpen.exe,利用fOpen.exe程序调动mplayer2.exe播放beijing.avi影片。

关于fOpen.exe程序,这是一个用VB编写的程序,这需要有一点点VB的编程知识。程序运行时,自动读取系统剪贴板中的文字(即命令行),然后启动命令行(“shell 程序及参数,窗口状态”))。程序将运行剪贴板中的命令行。

注意在制作时要先写中间程序,后写Flash播放器(exe),具体过程是:1。建一个文件夹myflash,在该文件夹中建子文件夹fscommand。  2。把C:/Program Files/Windows Media Player/mplayer2.exe复制到fscommand文件夹中,把要播放的影片beijing.avi也复制进来。 3。启动VB 6.0,新建一个工程,在窗体代码中粘贴代码,并在fscommand文件夹中生成fOpen.exe。 4。启动Flash MX 2004,在场景中添加一个按钮,选中按钮,打开动作面板,粘贴脚本代码。 5。在myflash文件夹中生成Flash播放器(exe)。生成播放器有两种方法:一种是按“文件——发布设置”,在打开的发布设置面板中,去掉默认的Flash和HTML前的选择,改选windows放映文件前打钩,然后按“文件——发布”就会在Flash保存的文件夹中生成一个同名的Flash播放器(exe),当然,你要事先把Flash保存在myflash文件夹中。另一种方法是,先在myflash文件夹中生成Flash影片(swf),然后打开Flash影片(swf),按“文件——创建播放器”也能生成Flash播放器(exe)。这样,打开Flash播放器(exe),按Flash播放器(exe)中的按钮,就能启动wplayer2.exe播放beijing.avi影片。

 

VB程序fOpen的代码:

Private Sub Form_Load()

On Error GoTo OpenErr  '发生错误后,程序结束

  Dim txtstr As String '定义变量

  If App.PrevInstance Then End  '为防止运行时出现混乱,所以只允许运行一个实例

  txtstr = Clipboard.GetText   '把剪贴板的数据储存在一个名为FilNam的变量里.

  Clipboard.Clear '清空剪贴板

 

  Shell App.Path & "/" & txtstr, vbNormalFocus

  End

OpenErr:

  End

End Sub

 

Flash中按钮代码:

on(press){

    strval=fname+":varstr="+inputstr

    System.setClipboard(strval)  //这句话用于将命令行字符串传到剪贴板,

    fscommand ("exec", "fOpen.exe"); //剪贴板获得数据后,可以打开fOpen.exe, //让该程序来获取剪贴板数据,并运行命令行

}

 

三.利用VB程序写文件

我再举一个例子,按动Flash播放器(exe)中的一个按钮,调用一个自编的VB程序writetextfile.exe,利用writetextfile.exe程序中的“open 文件名 For Binary As #1”的语句,以二进制的方式,写文本文件。

运行的原理和上个例子差不多,我就几点不同作一下说明:

1.在场景的帧动作面板(在时间轴面板中选择第一帧,打开动作面板)中输入代码:

system.useCodepage=true;

stop()

为什么要这样呢?原来,system.useCodepage 的默认值是False,这就是说Flash采用Unicode的编码来处理字符信息,而操作系统默认则采用ANSI的编码来处理(如“记事本”的默认编码就是ANSI)。这也是我们用“loadVariables("text.txt","")”来读取文本文件中的内容时(内容一般是:字符型变量名=字符串),如果变量值的字符串中含有中文字符时会出现乱码的原因。因此,你在Flash中输入或输出字符串时,就要写上system.useCodepage=true的代码。

2.注意要传入系统剪贴板中的、供writetextfile.exe调用的信息,要经过串格化处理。

 

Flash按钮代码:

on(press){

    fname="c2k20.txt"

    strval=fname+":varstr=大家好!"

    //剪贴板中的内容为:文件名 + ":" + 文件内容

  //由于文件内容要供FLASH导入使用,注意要使用  变量名 = 变量值   的形式

 

    System.setClipboard(strval)  //这句话用于将文件名的数据传到剪贴板,

    fscommand ("exec", "writetextfile.exe"); //剪贴板获得数据后,可以打开writetextfile.exe了,让该程序来获取剪贴板数据,并写文件

}

VB程序代码:

Private Sub Form_Load()

On Error GoTo OpenErr  '发生错误后,程序结束

  Dim txtstr As String '定义变量

  Dim temps() As String

  If App.PrevInstance Then End  '为防止运行时出现混乱,所以只允许运行一个实例

  txtstr = Clipboard.GetText   '把剪贴板的数据储存在一个名为FilNam的变量里.

  Clipboard.Clear '清空剪贴板

  

  '剪贴板中的内容为:文件名 + ":" + 文件内容

  '由于文件内容要供FLASH导入使用,注意要使用  变量名 = 变量值   的形式

  temps = Split(txtstr, ":")

  Open App.Path & "/" & temps(0) For Binary As #1

  Put #1, , temps(1)

  Close #1

  End

OpenErr:

  End

End Sub

 

四.IE进行信息交互

在上面举的例子中,我们利用的是自编的程序来完成预定的操作,这需要有一定的编程知识,并且你的计算机中要安装有像VB6.0之类的编程软件。有没有更简单的办法呢?有!那就是利用IE来进行信息交流及文件操作。

要利用IE进行信息交互,就要把Flash影片(swf)嵌入到HTML网页文件中,要用时,再双击HTML文件,在IE中播放Flash影片(swf),并进行信息从Flash到IE、或从IE到Flash的传递。HTML网页文件的编写可以用专用的网页编写软件如FrontPage或Dreamweaver等,也可以用“记事本”编写,然后在保存时,选择保存的文件类型为“*.*”,然后在保存文件名中输入带后缀名的文件名(文件名.html),再保存即可。(注意在嵌入Flash影片(swf)时需要注明版本号,这里所用的Flash MX 2004的版本号为6,0,29,0;在使用Flash MX 2004导出影片时要选择“Flash player 7”,“动作脚本2.0”)

我仍以上面举的点击Flash影片(swf)中的按钮,在磁盘写文件为例(文件名为“c2k20.txt”文件内容为“varstr=大家好!”),来说明何如何把信息从Flash传给IE,并在IE中利用JavaScript进行写文件的操作。

Flash中按钮的动作:

on(press){

fscommand ("c2k20.txt ", " varstr=大家好!");

}

 

Player.html网页文件的代码:(用记事本编写)

<HTML>

<HEAD>

<TITLE>player</TITLE>

<SCRIPT LANGUAGE=JavaScript>

<!--

var InternetExplorer = navigator.appName.indexOf("Microsoft") != -1;

//从Flash导入的参数,command是要保存的文件名,args是要保存的文件内容

function myFlash_DoFSCommand(command, args) {

  var myFlashObj = InternetExplorer ? myFlash : document.myFlash;

  var fso = new ActiveXObject("Scripting.FileSystemObject");

  tf = fso.CreateTextFile("E://" + command, true);

  tf.WriteLine(args) ;

  tf.Close();

  alert ("成功保存" + command + "文件!");

}

if (navigator.appName && navigator.appName.indexOf("Microsoft") != -1 &&

  navigator.userAgent.indexOf("Windows") != -1 && navigator.userAgent.indexOf("Windows 3.1") == -1) {

  document.write('<SCRIPT LANGUAGE=VBScript/> /n');

  document.write('on error resume next /n');

  document.write('Sub myFlash_FSCommand(ByVal command, ByVal args)/n');

  document.write(' call myFlash_DoFSCommand(command, args)/n');

  document.write('end sub/n');

  document.write('</SCRIPT/> /n');

}

//-->

</SCRIPT>

 

</HEAD>

<BODY>

<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0" width="550" height="400" id="myFlash">

<param name="allowScriptAccess" value="sameDomain" />

<param name="movie" value="player.swf" />

<param name="quality" value="high" />

<param name="bgcolor" value="#ffffff" />

<embed src="player.swf" quality="high" bgcolor="#ffffff" width="550" height="400" name="myFlash" swLiveConnect="true" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />

</object>

</body>

</html>

代码说明:JavaScript中的函数名称为myFlash_DoFSCommand,myFlash是嵌入的Flash影片(swf)的名字,它和<object>中的id,<embed>中的name的值要相一致。DoFSCommand则是Flash影片(swf)与JavaScript信息交互的标志。还有一点,由于JavaScript中的文件操作对象需要的文件名的实际的,完整的文件名,因此,我把文件保存在E盘的根目录下。

 

操作过程:1在myflash文件夹中建立Flash文件,并生成Player.swf影片文件;2仍在myflash文件夹中用记事本编写Player.html文件;3双击Player.html文件,用IE运行Player.html文件,如果IE的运行ActiveX的限制未打开,会出现警告,则取消限制,运行ActiveX。4点击Flash中的按钮,即可保存文件E:/c2k20.txt。

 

五.IE到Flash传递信息

从上一个例子中,我们已经实现了从Flash到IE的信息传递,大家如果有兴趣,可以了解一下从IE到Flash传递信息的方法。

1.我们可以在Flash文件中添加一个动态文本框,选中动态文本框,在“属性”面板中,设置变量名为myval。重新生成Player.swf。

2.接下来在Player.html网页文件<body>中加上一个表单,在表单中放一个输入文本框。(代码如下,放在<body>与</body>之间,且放在<object>与</object>之后:)

<p>

<form name="form1" onSubmit="doPassVar(sendText);" action="#">

  <input type="text" name="sendText" maxlength="45" onChange="doPassVar(this);">

</form>

 

JavaScript函数:(放在<SCRIPT>与</SCRIPT>之间,且放在函数function myFlash_DoFSCommand(command, args){   }之后)

function doPassVar(args){

    var sendText = args.value;

    window.document.myFlash.SetVariable("myval", sendText);

    //要导入到Flash的参数,“myval”是swf文件中接收的变量名,sendText是值

}

3.双击player.html文件,在IE中,在Flash影片(swf)下的输入文本框中输入一些文字,如“Hello,大家好!”,点击文本框外的其他部分,会看到Flash影片(swf)中的动态文本显示为“Hello,大家好!”

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:23679次
    • 积分:367
    • 等级:
    • 排名:千里之外
    • 原创:15篇
    • 转载:0篇
    • 译文:0篇
    • 评论:2条
    文章分类
    最新评论