Flash中如何通過按鈕在本地打開視頻

這問題很多人曾經問過(當然也有一部分是閃吧的成員),所以,筆者打算寫個教程,希望能爲大家排憂解難.
大家的問題的意思大概是:在本地,怎樣在Flash裏通過點一個按鈕,用視頻播放器打開一段視頻(如RM電影)
這裏涉及三個程序:Flash,視頻播放器.然後,由於Flash無法直接把文件名的數據傳給播放器,所以還需要一箇中間的程序來通信(筆者用VB寫了一個).
現在先把整套文件帖上來
 點擊瀏覽該文件
    下載解壓後,運行裏頭的open.exe,點擊裏面的按鈕,就可以打開相應的視頻了(由於暴風影音播放器本身的問題,文件包的路徑不要包含空格).
接下來會把教程寫給大家.
工作原理:
在MX或以上版本里,可以通過fscommand調用一個應用程序,但是,由於安全性的問題,fscommand的exec命令中,調用的應用程序不可以帶有命令行參數,對於命令行參數,可能有些人不是很瞭解.下面給大家解釋一下命令行參數的問題.
    在Flash3~5裏,我們可以通過如下辦法用GreenMPC.exe程序打開一個文件a.rm
fscommand("exec","GreenMPC.exe a.rm")
其中,a.rm成爲GreenMPC.exe的命令行參數,flash通過該語句,先打開GreenMPC.exe,再通過命令行參數告訴GreenMPC,要它打開a.rm這個文件.
所以,在5裏頭,做這個是非常方便的.

    現在普遍都用7或以上版本了.fscommand("exec","GreenMPC.exe a.rm")失效,只能用fscommand("exec","GreenMPC.exe"),而這是達不到目的的,因爲它只能打開GreenMPC.exe,而不能用GreenMPC.exe打開a.rm.

    所以,目前最大的問題有兩個:
1 要把a.rm傳遞出去
2 要讓a.rm這個參數給GreemMPC.exe接收.

    Flash把變量存在於內存裏,至少對於大部分Flash設計者來說,在別的程序裏是沒辦法獲得的.所以,要嘗試把a.rm存到硬盤裏.
然而,在本地,Flash6和7版本都只能把數據存在於SharedObject裏,其保存路徑非常複雜(跟系統,用戶名等因素相關),一不小心就會出錯,所以,本地的硬盤還是不行.

    那是否就沒辦法,"山窮水復疑無路"了?
回過頭來想內存,會想到有一塊很活潑的區域:剪貼板,Flash可以往剪貼板發送數據,這就"柳暗花明又一村"了!

    第一個問題解決了.下面是第二個問題.
如何讓GreenMPC獲取到剪貼板的信息呢?
Flash是沒有能力直接告訴GreenMPC直接獲取剪貼板的數據作爲命令行參數,因此,我們要通過一箇中介.
筆者用VB寫了個程序,獲取剪貼板數據,並且把數據以命令行參數的形式交給GreenMPC.exe.

    這樣,問題就完全解決了,下面說說具體做法

    下面說說具體做法

    1 因爲涉及多個文件,所以第一步先把文件放好.

    1.1 新建一目錄,你以後的文件都在此目錄裏.

    1.2 在該目錄下新建一Flash文檔.

    1.3 由於6或7的版本都只能調用fscommand目錄下的程序,所以,新建一個文件夾fscommand,把播放器和視頻文件放進去(注意,在放播放器的時候,跟播放器有關的系統文件都要放進去.

    1.4 放入中間程序,文件在樓頂的壓縮包裏面的fscommand文件夾下,名爲openMovie.exe.

該程序是筆者用VB寫的,裏頭的代碼如下(因爲這是討論Flash的地方,所以不作詳細解釋,讀者有興趣的話,可以參考跟VB有關的書籍).

Private Sub Form_Load() ’子過程,當程序窗體加載時運行
  On Error GoTo OpenErr  ’發生錯誤後,程序結束
  Dim FilNam As String   ’定義FilNam變量
  If App.PrevInstance Then End  ’爲防止運行時出現混亂,所以只允許運行一個實例
  FilNam = Clipboard.GetText   ’把剪貼板的數據儲存在一個名爲FilNam的變量裏.
  Clipboard.Clear              ’清空剪貼板
  Shell "GreenMPC.exe " & """" & FilNam & """" ’運行GreenMPC.exe,並往把文件名以命令行參數的形式往播放器傳遞,讓播放器打開FilNam.
OpenErr:
 End '程序結束

    2 文件放好了,下面編輯Flash文檔

    2.1 新建一個元件Button,是用來打開視頻的,

    2.2 在裏頭添加代碼

on(release){
  System.setClipboard("a.rm")  //這句話用於將文件名的數據傳到剪貼板,
  fscommand("exec","openMovie.exe")  //剪貼板獲得數據後,可以打開openMovie.exe了,讓該程序來獲取剪貼板數據,傳輸給GreenMPC.exe
}
    2.3 現在,測試影片,你現在是看不到任何效果的.

    2.4 但是,你現在如果打開記事本,"粘貼"一下,你會發現粘貼出來的是a.rm,可見,剪貼板已經從Flash裏獲得數據了.

    2.5 之後的沒有運行,是因爲fscommand("exec",args)只能在獨立播放器裏使用(該觀點並不完全正確,如果從更大的範圍來講),調試是沒效果的.

    2.6 在獨立的播放器(請使用7或以上的版本)裏打開生成的Flash,還是沒有反應,爲什麼呢?
因爲安全性,swf不能調用exe,需要exe才能調用exe.因此,在Flash播放時,選擇"文件"-"創建播放器",保存個exe文件到當前路徑.然後,運行該exe文件,點擊按鈕,a.rm就被GreenMPC.exe打開了.

    2.7 如果你屏蔽了菜單,那就要在Flash設計模式下生成exe
"文件"-"發佈設置",把"Windows放映文件(*.exe)勾上,按"發佈",就可以了.

文章來自: 好喜愛學習網(http://www.haoxiai.net) 網址:http://www.haoxiai.net/tuxingsheji/Flash/36498.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章