解决的方法是,调用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能否指定窗口打开外部程序呢?在此提出,共同探讨。
新闻热点
疑难解答