目前,出於安全考慮Flash不支持寫文件的操作,在AS3的API中找不到相應的方法。但是我們可以去看看其它的編程語言的文檔,比如VB,VC++,Java。它們都支持對文件的操作。因此,我們的策略就是讓Flash去調用一個執行寫文件操作的應用程序來實現我們的計劃。這裏有兩個知識點:
1、fscommand("exec", "Write_File.exe") 這句話的意思就是讓 Flash 去調用一個名爲Write_File.exe 的應用程序,這裏有兩點要非常注意:第一,被調用的程序必須在fscommand子文件夾中,並且調用時不能傳遞參數;第二,Flash 影片必需發佈爲一個 .exe 的可執行文件,即讓一個可執行文件調用另一個可執行文件。
2、System.setClipboard(string:String) 調用這句話時,可以根據給定的 String 參數來設置剪貼板。下面就開始製作吧,今天我們的 ActionScript 尤其簡單喲!
步驟1:在舞臺中放入一個輸入文本框:實例名"input_txt";一個按鈕:實例名"Submit_btn";
步驟2:在第一幀中加入 ActionScript;
// 提示用戶在此輸入要寫入的信息
input_txt.text = "在此寫入一些內容,點擊按鈕後提交!";
// 點擊按鈕後執行 onClick 函數
Submit_btn.addEventListener(MouseEvent.CLICK, onClick);
function onClick(evt:MouseEvent):void {
// 將文本內容寫入到剪貼板(Clipboard)中
System.setClipboard(String(input_txt.text));
// 執行用於寫文件的應用程序(這裏不用寫 fscommand 路徑名,程序默認到這裏取)
fscommand("exec", "Write_File.exe");
}
步驟3:在菜單中選擇“文件”->“發佈設置”,勾選"Windows 放映文件(.exe)",點擊"發佈";
步驟4:在當前目錄下,創建命爲 fscommand 的子目錄(必需);
步驟5:萬事具備,只欠東風!只要在 fscommand 子目錄下再加入 Write_File.exe 就搞定了。您可以使用任何喜歡的語言去編寫,如 VB, VC 甚至可以是 Java(用包裝軟件將 jar 包裝成 exe,但不推薦這樣使用,因爲可能需要客戶端去下載 jvm)。這裏我使用 VC++ 製作一個 MFC 來生成Write_File.exe。整體思想很簡單:讀取剪貼板內容,創建文件,將讀入的字符串寫入文件。最終會在應用程序的同一目錄下生成Save_Text.txt
文件,其內容就是我們在 Flash 的文本框中輸入的。以下是 VC++ 代碼摘要:
// 導入 fstream 庫文件
#include "fstream.h"
// TODO: Add extra initialization here
// 在窗口的初始化中加入
//***************************************************************************
// 獲得存儲路徑
CString strPath;
GetCurrentDirectory(MAX_PATH,strPath.GetBuffer(MAX_PATH));
strPath.ReleaseBuffer();
CString fullPath = strPath + '\\' + "Save_Text.txt";
// 讀取剪貼板
char * buffer = NULL;
CString fromClipboard;
if (OpenClipboard()) {
HANDLE hData = GetClipboardData(CF_TEXT);
char * buffer = (char*)GlobalLock(hData);
fromClipboard = buffer;
GlobalUnlock(hData);
CloseClipboard();
}
// 寫文件
ofstream outfile;
outfile.open(fullPath);
if (outfile.is_open()) {
outfile << fromClipboard << endl;
outfile.close();
}
//**************************************************************************
步驟6:如果您不想使用其它語言編寫也沒關係,您可以直接使用下面我已經寫好的這個 exe 文件(其中附有 Flash 源文件):http://www.fs2you.com/files/7bf1fb75-4fcb-11dd-aa18-0014221b798a/
結語:
好了,完成!我們實際上就是在使用剪貼板作爲中間媒介來傳送消息,這也是一種進程間通信的方式,因爲所有進程都共享着同一個剪貼板。大家如果感興趣可以把他製作成一個日記本的程序—— 每次生成文件的文件名都以系統日期和時間命名。本次教程中,沒有太多實質的內容,甚至我們的主角都不是 Flash,但是它可以給我們一些啓發。如果某些任務 Flash 無法完成,是否能讓其它人來助我們一臂之力呢?一個好漢三個幫...