在Flash中實現寫文件功能

在Flash中實現寫文件功能

FlashAction技術  |  flash技術教程

fscommand(cmd_string, arg_string)

 執行主機端指令。cmd_string指定所要執行的指令名,可爲FlashPlayer的

 指令或瀏覽器javascript函數。arg_string聲明該指令所用到的參數。

 FlashPlayer的指令有(只能在獨立播放器時使用):

 "fullscreen" 是否全屏播放,參數爲true或false

 "allowscale" 是否允許通過拉伸窗口縮放影片,參數爲true或false

 "showmenu" 是否在播放器顯示菜單,參數爲true或false

 "trapallkeys" 是否屏蔽播放器的快捷鍵(如Esc表示停止播放並恢復

 視窗顯示),參數爲true或false。但Alt+F4系統快捷

 鍵(關閉窗口)依然可用。

 "save" 隱藏屬性,作用是存變量到文本文件.

 "exec" 運行arg_string所指定的文件。

 ■□ FSCommand語句中的exec命令可以使swf 文件具有讀寫磁盤的功能

 這部分內容說的是,FSCommand->exec命令與操作系統進行交互的用法,包括如何打開本地文件,存儲文件,建

 立目錄,打開瀏覽器窗口以及其它外部程序。針對MAC機和PC機使用不同的操作系統,FSCommand語句在實際寫

 法上不盡相同,本文以PC機爲例進行說明。(MAC機中的情況不作翻譯)

 適用於Windows 9X的FSCommand->exec命令詳細說明:

 (注:若要將以下命令句法移植到NT/2000/Me上,不能原封不動的照搬,需要略作改動,請自行實踐。)

 1、存儲文件到硬盤

 有時我們想要在用戶的機子上留下cookie,或在用戶的硬盤上存儲一些其它類型的信息,唯一可行的方法就是

 藉助FSCommand,它通過調用用戶Windows系統的command.com命令打開MS-DOS窗口實現文件的存儲。因爲使用

 DOS命令行的方式生成文件,所以MS-DOS窗口是必然要出現的,但在高配置機子上,這個過程一閃而過,用戶

 不易察覺。使得該命令生效的前提是,含有這個FSCommand語句的swf文件必須是在本機上運行,而不是通過網

 絡來訪問。

 舉例:將swf文件中文本輸入框(變量名爲:textbox)的內容存到一個新創建的和swf文件位於相同目錄下的名

 爲textfile.txt的文件中,並作爲值賦給新的變量var。如下書寫FSCommand 語句:

 打開Action面板選擇Normal模式,在語句列表中選取FSCommand語句,轉到面板下部:

 在Command框中填寫:exec (不要複選其後的Expression複選框)

 在Arguments框中填寫:"command.com" add chr(9) add "/c" add chr(9) add "echo" add chr(9) add

 "var=" add textbox add ">textfile.txt" (一定要將其後的Expression複選框打上鉤!)

 若在Expert模式下編寫,則應寫成:

 fscommand ("exec", "command.com" add chr(9) add "/c" add chr(9) add "echo" add chr(9) add "var="

 add textbox add ">textfile.txt");

 說明:一個chr(9) 表示一個空格;/c爲command.com的參數,加上這個參數其後的命令才能被執行;>是重定向

 符,我們正是靠它將變量值寫入textfile.txt中。另外,還可指定文件存放目錄,如要在用戶桌面上建立

 textfile.txt文件,那麼將">textfile.txt"改爲">c://windows//desktop//textfile.txt"

 【注】:// 是轉意字符。在Flash中,“ / ”被當成保留關鍵字,已失去了本來的意義,所以要想顯示斜槓 /

 ,必須加前綴轉意符 / ,使之是還原本來的意義,連在一起寫就成了兩個斜槓的形式。又比如,要想表示單引

 號,須寫成 /’ 這樣的形式;實現回車的效果,須用轉意符號 /r 。

 2、刪除硬盤上的文件

 通過FSCommand->exec命令還可以刪除硬盤上的文件,下面的語法只適用於Windows 9X系統。

 舉例:將前面創建的textfile.txt刪除

 打開Action面板選擇Normal模式,在語句列表中選取FSCommand語句,轉到面板下部:

 在Command框中填寫:exec (不要複選其後的Expression複選框)

 在Arguments框中填寫:"command.com" add chr(9) add "/c" add chr(9) add "del" add chr(9) add

 "textfile.txt" (一定要將Expression複選框打上鉤!)

 若在Expert模式下編寫,則應寫成:

 fscommand ("exec", "command.com" add chr(9) add "/c" add chr(9) add "del" add chr(9) add

 "textfile.txt");

 警告:使用這個命令要慎重,因爲是採用DOS命令刪除文件,在回收站裏是看不到的被刪文件的。還有,萬勿用

 來做壞事。

 3、在硬盤上新建目錄

 通過執行FSCommand->exec生成的cookie若置於和所屬swf文件位於同一目錄下,容易被識別,用戶在清理系統

 垃圾時極有可能將其清除,那樣的話就失去意義了,考慮到用戶一般不會輕易刪除文件夾,我們專門新建一個

 目錄存放cookie不失爲一個好計。

 舉例:在swf文件所在目錄下新建一個名爲textfile的子目錄

 打開Action面板選擇Normal模式,在語句列表中選取FSCommand語句,轉到面板下部:

 在Command框中填寫:exec (不要複選其後的Expression複選框)

 在Arguments框中填寫:"command.com" add chr(9) add "/c" add chr(9) add "md" add chr(9) add

 "textfile" (一定要將Expression複選框打上鉤!)

 若在Expert模式下編寫,則應寫成:

 fscommand("exec","command.com" add chr(9) add "/c" add chr(9) add "md" add chr(9) add "textfile"

 說明:md是DOS命令集中用來建立目錄的專用命令;如果換成rd則可以刪除硬盤上已存在的目錄,提醒諸位三思

 而後行。

 ■□ 用FSCommand調用EXE可執行程序

 我們都知道,調用一個可執行程序(擴展名爲.exe或.bat或.com) 和打開一個一般文件是不同的,前者可自動運

 行,而後者需要相應的可執行程序支持打開,像擴展名爲doc和pdf的文件必須由相應的可執行程序才能打開閱

 讀。分三種情況考慮:

 ● 開啓一個外部可執行程序:擴展名.exe可以省略。具體來說,若一個exe文件(假設爲another.exe)和該

 swf文件本身在同一個目錄下,則直接鍵入程序文件名即可。如:

 fscommand("exec","another")

 否則,應寫明路徑。如打開IE瀏覽器窗口:

 fscommand("exec","c://progra~1//intern~1//iexplore")

 //注意DOS下對長文件(夾)名的處理形式。

 下面兩種情況也可以不寫路徑——

 (1)當可執行程序是在c:/windows目錄下時,可以不寫路徑。如調用windows的計算器,下面三種寫法均可:

 fscommand("exec","c://windows//calc.exe")

 fscommand("exec","c://windows//calc")

 fscommand("exec","calc")

 (2)調用DOS命令也可省略路徑。如下例打開MS-DOS下的Edit編輯器:

 fscommand("exec","edit.com")

 如果熟悉批處理文件寫法,通過FSCommand->exec命令執行批處理文件可以一舉多得。

 ● 調用默認程序打開一般文件:這種情況不能省略擴展名,同樣要注意文件路徑。比如我們要打開和該swf文

 件本身在同一個目錄下的名爲fs.htm的文件,則命令寫作:

 fscommand("exec","start" add chr(9) add "fs.htm")

 執行後,如果用戶機子默認的瀏覽器是IE,則自動調用IE打開這個網頁文件。

 ● 指定程序打開一個一般文件:Windows並未規定一種類型的文件只能由一種程序打開(比如.txt文件既可以

 用記事本打開,也可以用寫字板閱讀),這就使我們可以任意選擇可用於打開一般文件的可執行程序。當然前

 提是在大多數用戶機子上都能夠找到我們所指派的可執行程序,因此實際上能選取的是那些常用的、隨windows

 9X預裝的程序,像記事本(notepad)、寫字板(write)、IE瀏覽器(iexplorer)、command命令等等。如我們希望

 調用客戶機上的“寫字板”程序,打開一個和該swf文件本身在同一個目錄下的名爲fs.txt的文本文件,可以這

 麼寫命令:

 fscommand("exec","c://windows//write.exe" add chr(9) add "fs.txt")

 前已述及,凡是在c:/windows目錄下的可執行程序,在書寫FSCommand->exec命令時都可以省略路徑,簡寫成:

 fscommand("exec","write" add chr(9) add "fs.txt") 也是正確的。

 以上只對FlashMX以下版本纔有效

 ----------------------------------------------

 Flash MX中增強了安全性,它雖然也可以調用exe文件,但它是有條件的。

 1.你的flash文件不能是swf,而應該是exe文件,比如jimsons.exe;

 2.要在jimsons.exe同一目錄中新建一命名fscommand目錄,你要調用的外部可執行文件要在fscommand目錄下,

 且不能在子目錄下,比如是notepad.exe,請copy notepad.exe到fscommand目錄下;

 3.action的寫法爲:

 on (release) {

 fscommand("exec", "notepad.exe");

 }

 4.導出exe格式

   發佈方法如下:

      選中 File -> Publish Settings 或按ctrl+shift+F12

      它默認的發佈類型爲HTML(.html)與Flash(.swf),

      你將這兩項取消,選中Windows Projectors(.exe)

      即可將你的Flash文件直接發佈爲exe可執行文件

      按ctrl+F12即可發佈

      若你的文件尚未保存則它會發布在你flash的安裝目錄中

      若你的文件已保存則會發布在你的文件同一目錄下

   還有一種比較簡便的方法是:

     先用 File -> Export Movie...或按Ctrl+Alt+Shift+S 導出swf文件

     再打開這個文件,通過 文件 -> 創建播放器 即可產生EXE可執行文件

 下面有個例子

 

 點擊瀏覽該文件

 ===================================================================

 □■ 關於 Fscommand 和 javascript 的配合

 在網頁裏面,flash播放器是可以和瀏覽器通訊的。你可以在flash 裏面用 Fscommand() 發送參數給瀏覽器,

 然後在瀏覽器裏面用 Movie1_DoFscommand() 獲得參數。movie1是你在html裏面給這個swf文件的ID名。

 ·新建一個flash,插入一個按鈕

   在按鈕上添加AS

  

 on (release) {

  fscommand("press");

 }

  

 

 · 作用爲當鼠標按下這個按鈕時,發出一個名字叫"press"的FS Command

 · 然後把它插進網頁中,給它起一個ID的名字,如"jimsons";

 · 然後在<head></head>中加進如下的代碼:

 <SCRIPT LANGUAGE="javascript">

 function jimsons_DOFSCommand(command,args)

 //上面的一般是調用FS Command所需要的格式,其中"jimsons"就是給插入網頁中的FLASH動畫的ID名字

 {

 if (command=="press")

 //當fs command="press"時(按鈕被按下時發出這個FS Command)

 alert("呵呵,不要碰我啦!");

 //彈出警告菜單,這是屬於javascript裏的語句

 }

 </SCRIPT>

 <SCRIPT LANGUAGE="VBScript">

 Sub jimsons_FSCommand(ByVal command, ByVal args)

 call jimsons_DoFSCommand(command, args)

 end sub

 </SCRIPT>

 //運用VBScript,當FLASH發出FS Command時,執行flash1_DoFSCommand(command, args);

 //flash1爲FLASH動畫的id ,這也是運用FS Command時一般所需要的格式

 · 將flash插入到網頁中,將其ID號命名爲jimsons如下

 

  <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"

 codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0"

 name="jimsons" width="300" height="300" >

     <param value="jimsons.swf">

     <param value="high">

     <embed src="jimsons.swf" width="300" height="300" quality="high"

 pluginspage="http://www.macromedia.com/go/getflashplayer";; type="application/x-shockwave-flash"

 name="jimsons"></embed></object>

 

 

 □■ Flash Methods函數集

    看了上面的例子,你一定對Flash Methods有所瞭解了吧!下面我來介紹一下Flash Methods的全部函數:

 Flash Method函數 函數解釋

 Play()  使已停止了的FLASH動畫在停止處開始播放

 格式:YourMovieName.Play()

 StopPlay()  停止正在播放的FLASH文件

 

 格式:YourMovieName.StopPlay()

 IsPlay()  如果FLASH文件正在播放中,此函數值爲true

 

 例如:if (YourMovieName.IsPlaying)

     alert("Playing")

 如當動畫正在播放,就會彈出一個警告條。

 

 GotoFrame(int frameNum)  控制FLASH跳到指定的frame

 格式:YourMovieName.GotoFrame(10)

 TotalFrames()  傳回FLASH動畫的總幀數

  

 格式:YourMovieName.TotalFrames()

 CurrentFrame()  傳回FLASH動畫目前所在的幀數減一

 FS Command控制的幀都是由0開始的

 格式:YourMovieName.CurrentFrame()+1

 Rewind()  控制FLASH動畫條會第一幀並停止

 格式:YourMovieName.Rewind()

 SetZoomRect(int left,

 int top,int right,int bottom)  放大指定的座標區域(int left=左座標的整數;int right爲右座標的整數

 ;int top和int bottom分別表示上座標和下座標的整數)

 

 Zoom(int percent)  改變FLASH動畫的大小。這函數只允許你將放大後的 圖片縮小到原圖片的大小 

 YourMovieName.Zoom(50)放大一倍

 YourMovieName.Zoom(200)縮小一倍

 YourMovieName.Zoom(0)恢復原始尺寸

 Pan(int x,int y,int mode)  平移放大後的FLASH動畫。x,y表示移動目的地的x軸和y軸的座標;int mode表示

 表示座標的單位,但其值爲"0"時,以象數爲單位,爲"1"時,以百分比爲單位。

 

 PercentLoaded() 回傳0~100的值,此值爲瀏覽器載入FLASH的百分比程度。可用此功能製作loading畫面

 如:if (YourMovieName.PercentLoaded()<100)

  YourMovieName.GotoFrame(YourMovieName.PercentLoaded())

 LoadMovie(int layer,String url) 載入其他的FLASH動畫,"int layer"爲level的值,數值越大,動畫就放得

 越上;"string url"爲要栽入的動畫的路徑和名稱

 如:LoadMovie(1, "yourmovie.swf")表示把yourmovie.swf的動畫加載到原來的動畫上,level爲1

 LoadMovie("", "yourmovie.swf")表示卸載yourmovie.swf動畫

 

 TGotoFrame(String target,int frameNum)  控制動畫跳到指定的movie clip的第幾幀 

 TGotoFrame("_flash0/mm",10)表示跳到instance name爲mm的movie clip的第十幀

 TGotoLabel(String target,String label)  控制動畫跳到指定的movie clip的指定的label 

 TGotoFrame("_flash0/mm","ten")

 TCurrentFrame(String target) 傳回指定的movie clip的當前所在幀減一 

 fras=YourMovieName.TCurrentFrame("_flash0/mm")+1

 TCurrentLabel(String target) 傳回指定的movie clip當前所在的label 

 label=play_movie.TCurrentLabel("_flash0/mm")

 TPlay(String target)  控制指定的movie clip從停止出開始播放

 YourMovieName.Play("_flash0/mm")

 TStopPlay(String target)  控制指定的movie clip停止播放 

 YourMovieName.Play("_flash0/mm")

 GetVariable(variable_name) 獲取變量

 SetVariable(variable_name,value) 變量賦值

 TCallFrame(movie_clip,frame_number) call指定幀上的action

 TCallLabel(movie_clip,label) call指定標籤上的action

 TGetProperty(movie_clip,property) 獲取movie_clip的指定屬性

 TSetProperty(movie_clip,property,number) 設置movie_clip的指定屬性

   需要說明的是:最後兩個函數在獲取movie_clip的屬性時,是以0到18的數字來表示的。下面列出它們分別

 代表的意思:

 屬性 作用 數字 使用方式

 X Position X座標 0 Get,Set

 Y Position Y座標 1 Get,Set

 X Scale X方向縮放比率 2 Get,Set

 Y Scale Y方向縮放比率 3 Get,Set

 CurrentFrame movie_clip當前所在幀數 4 Get

 TotalFrames movie_clip總幀數 5 Get

 Alpha movie_clip的透明度 6 Get,Set

 Visibility movie_clip是否可見 7 Get,Set

 Width movie_clip的寬度 8 Get

 Height movie_clip的高度 9 Get

 Rotation movie_clip的旋轉度 10 Get,Set

 Target movie_clip的路徑 11 Get

 Framesloaded movie_clip已載入的幀數 12 Get

 Name movie_clip的實體名字 13 Get,Set

 DropTarget movie_clip的拖拽 14 Get

 Url 包含movie_clip的動畫的url 15 Get

 HighQuality 設置畫面質量爲高質量 16 Get,Set

 FocusRect 顯示按鈕邊框 17 Get,Set

 SoundBufTime 預設聲音緩衝時間 18 Get,Set

   我們可以看到,FS Command爲Flash打開了一個使用腳本語言的接口,這可以彌補Flash在函數上的不足。

 所以,利用好這個方法,將使我們在製作Flash動畫時如虎添翼!

 □■ 最後,我想說說在FLASH中如果想調用javascript(或VBscript)的另外一種方法,不需要用FS Command,

 只需要運用getURL.

 · 這做法爲先在<head>與</head>之間寫如下javascript代碼:

 <script language="javascript">

 function jimsons(theURL,winName,features) {

   window.open(theURL,winName,features);

 }

 </script>

 · 意思是定義一個jimsons()的函數,若被調用時,就打開一個新的窗口。

 函數裏面有三個參數theURL是網址,winName是網頁的標題,features是用來設置一些窗口特性如是否顯示狀態

 欄,滾動條等

 · 然後就用FLASH做一個按鈕,把它拖到場景後,在按鈕上寫入AS

 on (release) {

     getURL("javascript:jimsons(http://bbs.flash8.net&/#39;,Jimsons製作

 ,scrollbars=no,width=550,height=400)");

 }

 

 · 作用是,當按下按鈕時,就從本網頁中的javascript獲取jimsons()這個函數。

 下面壓縮包中有兩個例子分別FScommand與javascript的結合

 與getURL與javascript的結合

 

 點擊瀏覽該文件

 將頁面設爲首頁和加入收藏夾

 將頁面設爲首頁和加入收藏夾

 【 用getURL的方法 】

 設爲首頁:

 on (release) {

 getURL("javascript:void(document.links.style.behavior=url(#default#homepage));void document.links.setHomePage(http://www.flash8.net/&#39;)", "_self", "POST");

 }

 注意要將網頁中的flash的ID號命名爲"links"

 加入收藏夾:

 on (release) {

 getURL("javascript:void window.external.AddFavorite(http://www.flash8.net&/#39;,閃吧);", "_self", "POST");

 }

 下面有個例子

  點擊瀏覽該文件

 【用fscommand的方法】

 1,先在flash的按鈕上添加代碼:

 首頁:

 on (release) {

 fscommand("setHomePage", "http://www.flash8.net/";;;;);

 }

 收藏夾:

 on (release) {

 fscommand("addFavorite", "http://www.flash8.net/|閃吧");

 }

 然後在發佈設置中選擇flash with fscommand,發佈成html

 2,修改html:

 找到

 // Handle all the the FSCommand messages in a Flash movie

 function sethomepage_DoFSCommand(command, args) {

 }

 這一段,修改成:

 // Handle all the the FSCommand messages in a Flash movie

 function sethomepage_DoFSCommand(command, args) {

 var sethomepageObj = InternetExplorer ? sethomepage : document.sethomepage;

 if (command == "setHomePage") {

 document.links[0].style.behavior = "url(#default#homepage)";

 document.links[0].setHomePage(args);

 } else if (command == "addFavorite") {

 args = args.split("|");

 window.external.AddFavorite(args[0], args[1]);

 }

 }

 最後,如果html裏一個鏈接都沒有,還需在<SCRIPT LANGUAGE=javascript>這句的前面添加一句<a href="javascript:"></a>

原文地址:

http://www.7880.com/info/Article-1dbc9c20.html

http://blog.programfan.com/trackback.asp?id=10056

發佈了20 篇原創文章 · 獲贊 1 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章