999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

在Authorware中解決重復(fù)調(diào)用外部文件的方法

2006-01-01 00:00:00
現(xiàn)代教育技術(shù) 2006年4期

【摘要】重復(fù)調(diào)用外部程序會(huì)占據(jù)大量的系統(tǒng)資源,甚至?xí)?dǎo)致系統(tǒng)不堪重負(fù)而崩潰。本文介紹了在Authorware中,如何借助外部擴(kuò)展函數(shù),通過(guò)程序的類名或標(biāo)題名獲得外部程序窗口的句柄,然后用函數(shù)操作該句柄,來(lái)改變程序窗口的顯示狀態(tài),從而避免程序被多次同時(shí)執(zhí)行的方法。

【關(guān)鍵詞】Authorware,外部擴(kuò)展函數(shù),窗口句柄,窗口顯示狀態(tài)

【中圖分類號(hào)】G434

【文獻(xiàn)標(biāo)識(shí)碼】B

【論文編號(hào)】1009—8097(2006)04—0057—03

一、問(wèn)題提出

在用Authorware(AW)制作課件時(shí),我們常常會(huì)遇到需要調(diào)用外部程序的情況。這種被調(diào)用的外部程序若沒(méi)有隨活動(dòng)窗口(Actived Window)的轉(zhuǎn)移而自動(dòng)退出,它的界面就有可能會(huì)被其他窗口所遮蓋,尤其是在全屏顯示的模式下。用戶在不知情的情況下,可能會(huì)頻繁調(diào)用該程序,這就有可能導(dǎo)致系統(tǒng)不堪重負(fù)而崩潰。如何才能保證調(diào)用的外部程序始終只有一個(gè)唯一運(yùn)行的實(shí)例(Instance),即一個(gè)外部程序在桌面上只打開(kāi)唯一的一個(gè)窗口呢?初學(xué)者常常為此困惑。

筆者在制作《交大電子年鑒》的時(shí)候,就碰到了類似的問(wèn)題:我們?yōu)橛脩粼O(shè)計(jì)的系列功能中包含了【查詢信息】的功能。在具體程序設(shè)計(jì)時(shí)發(fā)現(xiàn)AW制作檢索的功能比較簡(jiǎn)單,于是就考慮用第三方軟件來(lái)彌補(bǔ)它的不足。筆者用Help builder制作了一個(gè)CHM文件,可是如何實(shí)現(xiàn)外部程序(CHM文件)與AW程序(a7p文件)之間的無(wú)縫連接呢?

我們知道,在AW中,利用內(nèi)置的系統(tǒng)函數(shù)JumpOutReturn可以實(shí)現(xiàn)外部程序的調(diào)用及返回。但是該函數(shù)并沒(méi)有提供關(guān)閉外部程序窗口的功能。那么若再次調(diào)用,AW又將新開(kāi)一個(gè)窗口,這就會(huì)造成多個(gè)窗口副本(實(shí)例)同時(shí)運(yùn)行的情況。而且由于每次打開(kāi)的都是新文件,用戶上次查詢結(jié)果沒(méi)有被保留。這不是用戶所期待的檢索功能。

理想的情形是:

1、用戶在使用過(guò)【檢索功能】后,沒(méi)有關(guān)閉此窗口,而是將焦點(diǎn)(Focus)轉(zhuǎn)到其他窗口。此時(shí)該窗口會(huì)被隱藏到后臺(tái),當(dāng)用戶再次需要檢索功能時(shí),上次使用過(guò)的那個(gè)窗口就會(huì)置頂,即成為活動(dòng)窗口。

2、用戶在使用【檢索功能】后關(guān)閉了窗口,那么當(dāng)他再次點(diǎn)擊檢索功能后,新的窗口被打開(kāi)且置頂。

二、基本概念

為了進(jìn)一步描述外部程序窗口的管理方法,先解釋一下幾個(gè)概念。

1、什么叫做窗口句柄(Window Handle)?

一個(gè)窗口句柄是一個(gè)定義窗口的編號(hào)。每個(gè)窗口都有唯一的句柄。可以使用此句柄來(lái)控制這個(gè)窗口。比如讓窗口在最前面(stay on top),關(guān)閉窗口(close)等等。

2、什么是窗口的類(Class)?

每一個(gè)窗口都有一個(gè)類名。這是由程序員指定的。類常被用作查找一個(gè)特定窗口。例如:MS Word 窗口的類名為“OpusApp”,Authorware窗口的類名為\"APWMainClass\"等。常用程序的類名參見(jiàn)下表。[1]

表1 常用程序的類名

3、什么是窗口的標(biāo)題(Title)?

窗口的標(biāo)題一般就在程序窗口的左上角,如(圖1)所示。對(duì)于標(biāo)題名不顯示在窗口界面上的程序,可以在任務(wù)欄中查看其窗口標(biāo)題,如(圖2)所示。

圖1 程序窗口標(biāo)題

圖2 任務(wù)欄中查看其窗口標(biāo)題

三、實(shí)現(xiàn)方法一

我們可以用外部擴(kuò)展函數(shù)Budapi.u32來(lái)實(shí)現(xiàn)這個(gè)功能。Budapi函數(shù)集是一組與計(jì)算機(jī)操作系統(tǒng)相關(guān)的LINGO函數(shù)。這里用到了它的窗口函數(shù)集( Window Functions )中兩個(gè)子函數(shù)BaFindWindow和BaSetWindowState。在進(jìn)行制作前,首先要確定您的計(jì)算機(jī)中必須有Budapi.u32文件,這個(gè)文件可以從網(wǎng)上下載,也可以從一些多媒體光盤(pán)中找到。把它拷貝到AW的安裝目錄下即可。至于AW中導(dǎo)入外部函數(shù)的方法,本文中不再贅述。

如何獲得窗口句柄或窗口的類呢?我們知道,在AW中有一個(gè)叫做WindowHandle的系統(tǒng)變量,它存儲(chǔ)的是AW演示窗口的句柄信息。但是它不能提供外部程序窗口的句柄及類信息。BaFindWindow幫助我們實(shí)現(xiàn)這個(gè)功能。

BaFindWindow返回一個(gè)窗口句柄,此函數(shù)可以使用一個(gè)或兩個(gè)參數(shù)作為查找的標(biāo)志。[2]

用法: Result:= BaFindWindow( Class, Title )

參數(shù): Class 是窗口的類名;Title 是窗口的標(biāo)題名

返回值: 整型。返回窗口句柄,如果沒(méi)找到窗口,返回值為0

例如查找一個(gè)WORD窗口句柄,可以使用BaFindWindow

( \"OpusApp\", \"\" )。如果知道要查找窗口的標(biāo)題,也可以使用Title參數(shù)來(lái)查找。例如:BaFindWindow( \"\" , \" mydoc.doc-Microsoft Word\" )。在獲得了外部程序窗口的句柄之后,我們就可以將它作為其他函數(shù)的參數(shù)來(lái)使用了。

lBaSetWindowState函數(shù)用于改變窗口的狀態(tài)。[2]

用法: BaSetWindowState( WinHandle, State )

變量: WinHandle 參數(shù)是被改變窗口的句柄;

state參數(shù)是指窗口被改變后的新?tīng)顟B(tài),具體取值如下所示:

\"Hidden\"――隱藏窗口并且取消它的激活狀態(tài);

\"Restored\"――激活、顯示一個(gè)窗口,如果窗口為最大(?。┗瑒t使窗口還原;

\"Normal\"――激活、顯示一個(gè)窗口,使它保留當(dāng)前尺寸和位置

\"Maximised\"――激活、顯示一個(gè)窗口并使它最大化

\"Minimised\"――激活、顯示一個(gè)窗口并使它最小化,以圖標(biāo)方式顯示

\"MinNotActive\"――最小化一個(gè)窗口并使它以圖標(biāo)方式顯示,但不激活它。

\"NotActive\"――使窗口以原來(lái)狀態(tài)顯示,但不激活它。

\"ShowNotActive\"――使窗口以當(dāng)前尺寸和位置顯示,但不激活它。

\"StayOnTop\"――使窗口成為頂部窗口

\"DontStayOnTop\"――準(zhǔn)許窗口在其他窗口之后顯示。

返回值: 空

在本示例中,我們要查找的外部程序?yàn)閟earch.chm,程序窗口的標(biāo)題名為“上海交通大學(xué)2005年年鑒”。我們用Restored狀態(tài)作為程序窗口的新?tīng)顟B(tài)。具體程序流程如下所示(圖3)。

在計(jì)算圖標(biāo)【判斷查詢窗口是否已打開(kāi)】中,輸入以下語(yǔ)句:

hnd:=BaFindWindow(\"HH Parent\", \"上海交通大學(xué)2005年年鑒\")

――獲得標(biāo)題為\"上海交通大學(xué)2005年年鑒\"的查詢窗口的句柄,將其值賦給變量hnd

if hnd<>0 then

BaSetWindowState( hnd, \"Restored\")

GoTo(IconID@\"wait\")

end if

――判斷變量hnd的值,如果不為0,說(shuō)明此窗口已打開(kāi),則將這個(gè)已打開(kāi)的窗口激活并顯示。并且將流程跳轉(zhuǎn)至等待圖標(biāo)“wait”;如果hnd的值為0,說(shuō)明窗口已關(guān)閉,則不執(zhí)行判斷語(yǔ)句,進(jìn)入下一個(gè)計(jì)算圖標(biāo)【打開(kāi)查詢窗口】。

在計(jì)算圖標(biāo)【打開(kāi)查詢窗口】中,輸入以下語(yǔ)句:

JumpOutReturn(\"\" , FileLocation^\"search.chm\")

圖3程序流程

――打開(kāi)search.chm文件。

四、實(shí)現(xiàn)方法二

由于Budapi是一個(gè)第三方的擴(kuò)展函數(shù)集,我們可能無(wú)法獲得。那么用AW自帶的WinAPI函數(shù)集可以實(shí)現(xiàn)同樣的功能。我們用到了WinAPI中的兩個(gè)子函數(shù):FindWindow與Show

WindowAsync來(lái)實(shí)現(xiàn)。簡(jiǎn)單介紹一下這兩個(gè)子函數(shù)的用法:

FindWindow函數(shù)的作用是獲得指定的窗口的句柄。

用法: FindWindow( LPCSTR lpClassName , LPCSTR lpWindowName)

參數(shù): LPCSTR lpClassName是類名,LPCSTR lpWindowName是窗口的標(biāo)題。

返回值:找到的窗口的句柄。如未找到相符合的窗口,則返回零。

ShowWindowAsync函數(shù)用來(lái)控制窗口是否可見(jiàn)。

用法: ShowWindowAsync( HWND hWnd, int nCmdShow)

參數(shù): hWnd是窗口句柄;

nCmdShow定義如何顯示程序啟動(dòng)后的窗口形式。取值如下:

0 ――隱藏窗口,活動(dòng)狀態(tài)給另一個(gè)窗口

1或9 ――用原來(lái)的大小和位置顯示一個(gè)窗口,同時(shí)令其進(jìn)入活動(dòng)狀態(tài)

2 ――最小化窗口,并將其激活

3 ――最大化窗口,并將其激活

4 ――用最近的大小和位置顯示一個(gè)窗口,同時(shí)不改變活動(dòng)窗口

5 ――用當(dāng)前的大小和位置顯示一個(gè)窗口,同時(shí)令其進(jìn)入活動(dòng)狀態(tài)

6 ――最小化窗口,活動(dòng)狀態(tài)給另一個(gè)窗口

7 ――最小化一個(gè)窗口,同時(shí)不改變活動(dòng)窗口

8 ――用當(dāng)前的大小和位置顯示一個(gè)窗口,不改變活動(dòng)窗口

編程的思路與前面是相似的:首先用FindWindow來(lái)獲得調(diào)用的那個(gè)窗口的句柄信息,然后利用ShowWindowAsync來(lái)顯示這個(gè)窗口于最頂層。

參考文獻(xiàn)

[1] 鄧椿志. Authorware 多媒體設(shè)計(jì)專家門(mén)診[M].清華大學(xué)出版社,2004,(10)

[2] Budapi中文幫助[EB/OL].http://www.authorware.cn

How to Avoid Duplicated Loading of Routine in Authorware

He QingHuang Jian

Shanghai JiaoTong University,Shanghai,200030

Abstract:The duplicated loading of a routine will consume vast system resource, and even result in a system crash. This paper introduces the way to eliminate the concurrent running of one routine in Authorware: by means of the external function, which can get window’s Handle from its class or title name and can change the window’s display status.

Keywords:Authorware,External Funtions,Window Handel,Window Display Status

“本文中所涉及到的圖表、注解、公式等內(nèi)容請(qǐng)以PDF格式閱讀原文”

主站蜘蛛池模板: 国产黑丝一区| 中文成人在线视频| 中文字幕久久亚洲一区| 国产乱子伦一区二区=| 亚洲高清无码久久久| 国产在线自揄拍揄视频网站| 国产精品亚欧美一区二区| 中文字幕 日韩 欧美| 亚洲视频免费在线看| 国产黄色免费看| 亚洲国产欧美国产综合久久| 欧美综合区自拍亚洲综合绿色| 国产精品尹人在线观看| 国产一区二区三区在线无码| 再看日本中文字幕在线观看| 黄片一区二区三区| 国产欧美日韩18| 国产毛片高清一级国语| 又黄又湿又爽的视频| 成人噜噜噜视频在线观看| 亚洲无码不卡网| 国产成人精品18| 美女国产在线| 无遮挡国产高潮视频免费观看 | 四虎免费视频网站| 国产精品开放后亚洲| 91原创视频在线| 国产爽爽视频| 亚洲区第一页| 亚洲成网站| 亚洲综合18p| 亚洲成人精品| 亚洲中文字幕无码爆乳| 香蕉久人久人青草青草| 国产精品冒白浆免费视频| 精品国产一区91在线| 天天摸天天操免费播放小视频| 国产欧美视频在线观看| 亚洲人成人无码www| 黄色网页在线观看| 亚洲一区二区视频在线观看| 99青青青精品视频在线| 久久久久无码国产精品不卡| 九九久久精品国产av片囯产区| 亚洲香蕉久久| 爽爽影院十八禁在线观看| 女人av社区男人的天堂| a毛片在线免费观看| 亚洲va视频| 亚洲成人一区二区三区| 试看120秒男女啪啪免费| 欧美精品xx| 青青草原国产一区二区| 亚洲va精品中文字幕| 日韩在线影院| 无码AV动漫| 91啪在线| 亚洲欧美日韩高清综合678| 亚洲男人在线| 日日拍夜夜操| 最新亚洲人成无码网站欣赏网| 日韩小视频网站hq| 亚洲天堂视频在线观看免费| 啦啦啦网站在线观看a毛片| 国内精品久久久久鸭| 久久一色本道亚洲| 97久久超碰极品视觉盛宴| 中文无码毛片又爽又刺激| 国产微拍一区二区三区四区| 亚洲第一在线播放| 美女国内精品自产拍在线播放 | 欧美成人午夜影院| 国产99视频精品免费视频7 | 97影院午夜在线观看视频| 国产成人av一区二区三区| 日韩福利视频导航| 国产在线视频自拍| 亚洲最大情网站在线观看| av午夜福利一片免费看| 午夜精品区| 91精品最新国内在线播放| 国产精品浪潮Av|