解決的方法是,調用winapi。winapi有一個getactivewindow()函數,用來返回當前活動窗口的句柄(handle)。比較使用jumpoutreturn()前后當前活動窗口句柄,即可判斷外部文件是否播放完畢,authorware是否是當前窗口,再采取相應操作。
以下介紹這個問題在authorware各個版本中解決方法。
authorware4.0或4.0以后版本
1.載入getactivewindow()函數:此函數在winapi.u32中,winapi.u32位于authorware程序目錄下.在載入winapi.u32過程中,只選擇getactivewindow()函數即可,其余不需載入authorware.
2.在jumpoutreturn()函數前,加入一個變量oldhandle:=getactivewindow(), oldhandle初始值可以不設定.
3.添加一個等待圖標,位于jumpoutreturn()所在計算圖標后,無按鈕,無響應,僅設定等待1秒.
4.在等待圖標后添加一個判斷圖標(dicision icon),附一個計算圖標于此判斷圖標,設定判斷圖標為sequential-repeat until true.
5.在repeat until true field中輸入: handle=oldhandle
6.當新參數窗口出現時,點擊確定,不需輸入初始值.
7.在附著計算圖標中,輸入:handle:=getactivewindow()
例子如下:
以上例子實現的功能是:調用外部播放器scplayer.exe來依次播放文件auto1.scm和auto2.scm. jumpoutreturn()函數參數參考如下:jumpoutreturn(filelocation^".//scrncam//scplayer.exe" ,filelocation^ ".//lotus//auto1.scm /s/h/c ").當auto1.scm文件播放完畢后,播放窗口關閉,回到authorware,又一個junmoutreturn()跳到auto2.scm文件......
對于authorware4.0以下版本,裝載getactivewindow()函數的過程有點不同.裝載getactivewindow(),要選擇user.exe,user.exe文件位于/window/system目錄下,在出現的dll對話框中,有以下幾項需要填寫,且大小 匭胝?(a).function name field: getactivewindow (b).arguments field: void (c).return field: word.點擊"load",getactivewindow()函數已被提取.其余步驟同上.
目前出現的問題是,當外部文件沒有播放完畢時,人工干預使authorware成為當前活動窗口,此時,程序向下繼續執行。如果此時再次打開一個外部文件,將會出現兩個外部文件窗口,這是我們不想看到的。仔細看一下junmoutreturn()函數會發現,其還有一個可選參數:creator type,具體怎么指定,我沒查到。authorware能否指定窗口打開外部程序呢?在此提出,共同探討。
新聞熱點
疑難解答