当你调用JumpOutReturn()函数打开外部文件,authorware本身并没有停下来,而是沿"线"继续运行。如何才能使authorware在播放外部文件的时候,暂停下来呢?也许你会用等待图标,或一个交互按钮,但有时这样满足不了要求。例如,依次连续播放几个外部文件(当然这些文件在authorware本身是不能播放的),当一个文件播完后,返回authorware,另一个文件自动打开播放或向下执行其他内容。
解决的方法是,调用WinAPI。WinAPI有一个GetActiveWindow()函数,用来返回当前活动窗口的句柄(handle)。比较使用JumpOutReturn()前后当前m.tulaoshi.com活动窗口句柄,即可判断外部文件是否播放完毕,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秒.
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/authorware/)4.在等待图标后添加一个判断图标(dicision icon),附一个计算图标于此判断图标,设定判断图标为Sequential-Repeat Until True.
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/authorware/)5.在Repeat Until True Field中输入: handle=oldhandle
6.当新参数窗口出现时,点击确定,不需输入初始值.
7.在附着计算图标中,输入:handle:=GetActiveWindow()
例子如下:
以上例子实现的功能是:调用外部播放器scplayer.exe来依次播放文件auto1.scm和auto2.scm. JumpOutReturn()函数参数参考如下:JumpOutReturn(FileLocation^".scrncamscplayer.exe" ,FileLocation^ ".lotusauto1.scm /s/h/c ").当auto1.scm文件播放完毕后,播放窗口关闭,回到authorware,又一个JunmOutReturn()跳到auto2.scm文件......
对于authorware4.0以下版本,装载GetActiveWindow()函数的过程有点不同.装载GetActiveWindow(),要选择user.exe,user.exe文件位于windowsystem目录下,在出现的DLL对话框中,有以下几项需要填写,且大小 匦胝?(a).function name field: GetActiveWindow (b).Arguments field: VOID (c).Return field: WORD.点击"Load",GetActiveWindow()函数已被提取.其余步骤同上.
目前出现的问题是,当外部文件没有播放完毕时,人工干预使authorware成为当前活动窗口,此时,程序向下继续执行。如果此时再次打开一个外部文件,将会出现两个外部文件窗口,这是我们不想看到的。仔细看一下JunmOutReturn()函数会发现,其还有一个可选参数:creator type,具体怎么指定,我没查到。authorware能否指定窗口打开外部程序呢?在此提出,共同探讨。