專利名稱:父子應用集成的系統(tǒng)及方法
技術領域:
本發(fā)明涉及父子應用集成,更具體地說,涉及父子應用集成的系統(tǒng)及方法。
背景技術:
在采用如富客戶端技術(WCT,Workplace Client Technology)一樣的插件系統(tǒng)中,必須具有可集成到父應用的子應用,該子應用通常為插件。
在支持跨進程窗口標識的操作系統(tǒng)中,比如微軟的視窗系統(tǒng),通過使用OLE/ActiveX實現(xiàn)了應用集成,并且由此實現(xiàn)了應用插件。對于非OLE/ActiveX控件的應用集成而言,我們需要更一般的方法。事實上,如果操作系統(tǒng)為跨進程的應用提供了獨立于進程的窗口標識,我們能夠容易地構建跨進程的應用集成。比如,在微軟的視窗系統(tǒng)中,因為多個窗口由獨立于進程的句柄hWnd標識,所以我們能夠容易地為該不同進程中的多個窗口構建父/子關系。由此,當用戶期望在其自己的應用(A)中將另一個應用(B)作為插件來使用時,上述更一般的方法在如下的三種不利情況中顯得非常有用1.操作系統(tǒng)不提供獨立于進程的窗口標識;2.B沒有為用戶提供符合某種組件標準的控件;3.B是一個非常復雜的應用并且將其改寫為符合某種組件標準的代價很大。同時,通過使用上述更一般的方法,我們能夠在最小改變插件應用的原始結構的條件下最大限度地重用該插件應用的功能。
但是,在不支持獨立于進程的窗口標識的操作系統(tǒng)上,比如在蘋果的Mac OS X上,在窗口系統(tǒng)這一級實現(xiàn)跨進程的應用集成卻遇到困難。這是由于當從應用管理程序創(chuàng)建應用時,這類操作系統(tǒng)不能為不同進程中的應用提供獨立于進程的標識。比如就Mac OS X而言,當從窗口管理程序創(chuàng)建窗口時,用戶可以得到標識該窗口的WindowRef。但是,該WindowRef是僅在其自身的進程中有效的指針變量。并且,更糟糕的是WindowRef指針的結構是不透明結構(內部結構)。這意味著即便我們能夠從其它進程訪問由WindowRef指針所指向的存儲器,但是仍然不能直接地操作該窗口。事實上,WindowRef僅僅是由窗口管理程序所管理的一些窗口的索引號。窗口管理程序可以控制所有的窗口,但是我們卻不能。因此,在蘋果的Mac OS X上,在窗口系統(tǒng)這一級不能實現(xiàn)跨進程的窗口之間的父/子關系。這樣,有必要在這樣的操作系統(tǒng)上,在窗口系統(tǒng)這一級模擬跨進程的應用集成的實現(xiàn)。比如,在蘋果的Mac OS X上,模擬跨進程的窗口之間的父/子關系,從而實現(xiàn)應用插件。
由于上述問題的存在,確保應用集成中用戶界面的正常行為尤其困難。比如,父/子窗口的一般活動包括(1)子窗口總在父窗口之前(Z次序);(2)子窗口和父窗口一同移動;(3)子窗口和父窗口一同調整大??;(4)子窗口和父窗口一同最大或最小化;(5)子窗口的事件可以被傳播至主窗口。在不支持獨立于進程的窗口標識的操作系統(tǒng)中,比如蘋果的Mac OS X,可以解決活動(2)至(5)。但是,在Mac OS X上我們不能確??邕M程窗口之間正確的Z次序,由此我們不能采用現(xiàn)有的功能來模擬活動(1)。
在不支持跨進程的窗口標識的操作系統(tǒng)中實現(xiàn)跨進程應用集成的過程中,還存在如下兩點問題首先,由于在現(xiàn)有技術中通常使用進程間通信(IPC),因此當存在頻繁的用戶事件時開銷很大并且讀取/寫入存儲模塊的時間過長,這導致效率低。其次,如果在不支持組件技術的大型復雜應用中實現(xiàn)Windows的OLE或類似的組件技術,需要花大量精力進行對程序的接口改造。
發(fā)明內容
有鑒于上述情況,本發(fā)明的目的之一是提供一種用于集成父應用和子應用的方法和一種集成父應用和子應用的系統(tǒng),從而在不支持跨進程應用集成的操作系統(tǒng)的窗口系統(tǒng)這一級,可以模擬跨進程的父/子應用集成、跨進程的應用插件以及跨進程的窗口之間的父/子關系,由此,在不支持跨進程應用集成的操作系統(tǒng)的窗口系統(tǒng)這一級,可以實現(xiàn)跨進程的父/子應用集成、跨進程的應用插件以及無縫的跨進程窗口之間的父/子關系。
根據(jù)本發(fā)明的一方面,提供一種用于集成父應用和子應用的方法包括步驟所述父應用通過一用戶接口得到至少一個事件,如果該事件應由子應用處理,則將該至少一個事件傳播至所述子應用;根據(jù)所接收的至少一個事件,所述子應用生成內容數(shù)據(jù),并且將該內容數(shù)據(jù)寫入一存儲模塊中,然后發(fā)出一通知給所述父應用;以及所述父應用讀出寫入該存儲模塊中的該內容數(shù)據(jù)。
根據(jù)本發(fā)明的另一方面,提供一種集成父應用和子應用的系統(tǒng),包括用戶事件接口處理模塊,所述父應用通過該用戶事件接口處理模塊得到至少一個事件;子應用事件處理模塊;第一通信模塊,如果該事件應由子應用處理,則將該至少一個事件從用戶事件接口處理模塊傳播至所述子應用事件處理模塊,并且所述子應用事件處理模塊根據(jù)所接收的至少一個事件生成內容數(shù)據(jù);存儲模塊,用于存儲所述子應用事件處理模塊生成的內容數(shù)據(jù);內容更新模塊,用于從所述子應用事件處理模塊將該內容數(shù)據(jù)寫入所述存儲模塊;內容讀取模塊;和第二通信模塊,用于當所述存儲模塊存儲該內容數(shù)據(jù)之后,將一通知從所述子應用發(fā)送給所述內容讀取模塊;其中,當接收該通知之后,所述內容讀取模塊讀出寫入該存儲模塊中的該內容數(shù)據(jù)。
采用本發(fā)明的用于集成父應用和子應用的方法及其系統(tǒng),在不支持跨進程應用集成的操作系統(tǒng)的窗口系統(tǒng)這一級,可以實現(xiàn)跨進程的父/子應用集成、跨進程的應用插件以及跨進程的窗口之間的無縫父/子關系。由此,產(chǎn)生如下技術效果首先,因為父應用無需知道子應用的任何具體細節(jié)、各種子應用的接口是相同的(包括顯示接口和通信接口)以及我們可以指定通信接口發(fā)送系統(tǒng)基本鍵盤和鼠標事件到子應用,所以在一般地定義接口的條件下,子應用仍然能夠容易地被其它的應用所使用。進而,應用插件和子窗口也能夠容易地被其它主應用和父窗口分別使用。其次,在不支持跨進程應用集成的操作系統(tǒng)的窗口系統(tǒng)這一級,可以模擬Z次序顯示。再次,可以改善由于使用進程間通信(IPC)而導致的效率降低。
通過以下借助附圖的詳細描述,將會更容易地理解本發(fā)明,其中相同的標號指定相同結構的單元,并且在其中圖1是根據(jù)本發(fā)明優(yōu)選實施例的在父應用和子應用之間實現(xiàn)集成的系統(tǒng)的功能模塊圖;圖2是根據(jù)本發(fā)明優(yōu)選實施例的在父應用和子應用之間實現(xiàn)集成的方法的流程圖;和圖3是根據(jù)本發(fā)明優(yōu)選實施例的在父應用和子應用之間實現(xiàn)集成的方法/系統(tǒng)的基本工作流圖。
具體實施例方式
下面將結合附圖詳細描述本發(fā)明的優(yōu)選實施例。在下面的描述中,現(xiàn)有不支持跨進程應用集成的操作系統(tǒng)中公知的方法和模塊將不再詳細描述,以免以不必要的細節(jié)混淆本發(fā)明。在本發(fā)明的說明書中,我們將父應用的窗口和子應用的窗口分別稱為父窗口和子窗口。
圖1是根據(jù)本發(fā)明優(yōu)選實施例的在父應用和子應用之間實現(xiàn)集成的系統(tǒng)的功能模塊圖。如圖1所示,根據(jù)本發(fā)明優(yōu)選實施例的在父應用和子應用之間實現(xiàn)集成的系統(tǒng)包括用戶事件接口處理模塊11,所述父應用通過該用戶事件接口處理模塊得到至少一個事件;子應用事件處理模塊21;第一通信模塊13,如果該事件應由子應用處理,則將該至少一個事件從用戶事件接口處理模塊通過第二通信模塊23傳播至所述子應用事件處理模塊,并且所述子應用事件處理模塊根據(jù)所接收的至少一個事件生成內容數(shù)據(jù);存儲模塊30,用于存儲所述子應用事件處理模塊生成的內容數(shù)據(jù);內容更新模塊22,用于從所述子應用事件處理模塊將該內容數(shù)據(jù)寫入所述存儲模塊;內容讀取模塊12;和第二通信模塊23,用于當所述存儲模塊存儲該內容數(shù)據(jù)之后,將一通知從所述子應用通過第一通信模塊13發(fā)送給所述內容讀取模塊;其中,當接收該通知之后,所述內容讀取模塊讀出寫入該存儲模塊中的該內容數(shù)據(jù)。
本領域的技術人員應當了解,第一通信模塊13可直接將該至少一個事件從用戶事件接口處理模塊傳播至所述子應用事件處理模塊,而不通過第二通信模塊23。同樣,第二通信模塊23也可直接將一通知從所述子應用發(fā)送給所述內容讀取模塊,而不通過第一通信模塊13。
采用該系統(tǒng),在傳統(tǒng)的不支持跨進程應用集成的操作系統(tǒng)上,比如在蘋果的Mac OS X上,即便父應用和子應用分別屬于不同的進程,在窗口系統(tǒng)這一級仍然實現(xiàn)了父應用對子應用的訪問,并且能在一個一致的透明模式下交換和更新數(shù)據(jù)。從而模擬了在窗口系統(tǒng)這一級的應用集成,同時不用開發(fā)大而復雜的程序的接口模塊。
在該系統(tǒng)中,存儲模塊30可以是一般的傳輸介質,比如共享存儲區(qū)和共享文件等等,而不局限于共享顯示存儲區(qū)。由此,可以在不消耗顯示資源的條件下完成對應用集成的模擬。
基于該系統(tǒng)可以模擬Z次序,即子窗口總在父窗口之前。下面詳細說明模擬Z次序的工作流圖。
圖3是根據(jù)本發(fā)明優(yōu)選實施例的在父應用和子應用之間實現(xiàn)集成的系統(tǒng)的基本工作流圖,其中,插件窗口302、插件應用303和傳輸介質304分別對應上述子窗口、子應用和存儲模塊。如圖3所示,當插件應用303被激活時,因為它是最前面的進程,所以插件窗口302在父窗口301之前。此時,不存在Z次序問題,或者可以說當前父窗口301和插件窗口302滿足Z次序,可由處于活動狀態(tài)的插件應用303處理其所接收的用戶接口事件。但是,當插件應用303沒有被激活時,或者說當用戶將焦點轉到其它的主應用的區(qū)域時,此時我們需要使用本發(fā)明優(yōu)選實施例的在父應用和子應用之間實現(xiàn)集成的系統(tǒng)來模擬Z次序。圖3基于主應用300、主窗口301、插件窗口302、插件應用303和傳輸介質304,圖解了采用根據(jù)本發(fā)明優(yōu)選實施例的在父窗口和子窗口之間實現(xiàn)集成的系統(tǒng)來模擬Z次序的工作流。如圖3所示,對應于上述用戶事件接口處理模塊11、內容讀取模塊12、第一通信模塊13,子應用事件處理模塊21、內容更新模塊22、第二通信模塊23和存儲模塊30之間作所述數(shù)據(jù)的傳輸,如果主應用300所接收的用戶接口事件應由插件應用303處理,父應用將通過用戶接口循環(huán)所得到的至少一個用戶接口事件傳播至插件應用303,根據(jù)所接收的至少一個事件,插件應用303生成內容數(shù)據(jù),并且將該內容數(shù)據(jù)寫入傳輸介質304中,然后發(fā)出一通知給所述父應用300,以及父應用300讀出寫入傳輸介質304中的該內容數(shù)據(jù),與此同時,顯示模塊顯示激活的父應用窗口301以及插件窗口302,其中插件窗口302在父窗口301前面(Z次序)。接著,顯示模塊還根據(jù)父應用處理模塊10所讀出的內容數(shù)據(jù)通過對插件窗口302進行刷新,同時仍然保持窗口顯示的Z次序。這樣,無論插件應用303是否被激活,插件窗口302總在父窗口301之前,實現(xiàn)了跨進程之間的窗口的無縫父/子關系的Z次序模擬。
在上述父應用300根據(jù)所讀出的內容數(shù)據(jù)進行插件窗口302刷新時,父應用可以有選擇地使用從傳輸介質304中讀出的內容數(shù)據(jù)。
在該系統(tǒng)中,由于僅在插件應用沒有被激活時將用戶事件從主應用傳播至插件應用,由此帶來如下兩點改進(1)防止了將所有的用戶事件從主應用傳播至插件應用,從而降低了進程間通信和讀取/寫入存儲模塊的次數(shù),提高了效率;(2)對插件應用的改動較小,比如無須寫附加用戶事件處理函數(shù)。
圖2是根據(jù)本發(fā)明優(yōu)選實施例的在父應用和子應用之間實現(xiàn)集成的方法的流程圖。下面,根據(jù)圖2詳細介紹本發(fā)明優(yōu)選實施例的在父應用和子應用之間實現(xiàn)集成的方法。
在步驟S201中,執(zhí)行用戶接口事件循環(huán);接著,在步驟S202中,父應用接收該用戶接口事件。在步驟S203中,主應用判斷該用戶接口事件是否屬于子應用應處理的用戶接口事件,如果否,則轉到步驟S204,由父應用處理該用戶接口事件,進而返回步驟S201,繼續(xù)執(zhí)行用戶接口事件循環(huán);如果是,則前進到步驟S205,父應用將至少一個用戶事件傳播至子應用。然后,所述方法繼續(xù)前進到步驟S206,子應用根據(jù)所接收到的用戶接口事件判斷是否需要更新內容數(shù)據(jù),如果否,則返回步驟S201,繼續(xù)執(zhí)行用戶接口事件循環(huán);如果是,則前進到步驟S207,根據(jù)所接收的用戶接口事件,子應用生成內容數(shù)據(jù)。然后,在步驟S208中,子應用將該內容數(shù)據(jù)寫入一存儲模塊中并且發(fā)出一通知給所述父應用。接著,在步驟S209中,父應用讀出寫入該存儲模塊中的該內容數(shù)據(jù)并且完成子應用集成更新。最后,返回步驟S201,繼續(xù)執(zhí)行用戶接口事件循環(huán)。
在該方法中,父應用和子應用為采用公知技術構建的,其至少包括接口和實現(xiàn);并且,本領域的技術人員應當了解步驟子應用根據(jù)所接收到的用戶接口事件判斷是否需要更新內容數(shù)據(jù)S206不是必須的,該方法可以從步驟S205直接前進到步驟S207。因此,在傳統(tǒng)的不支持跨進程應用集成的操作系統(tǒng)上,比如在蘋果的Mac OS X上,即便父應用和子應用分別屬于不同的進程,在窗口系統(tǒng)這一級仍然實現(xiàn)了父應用對子應用的訪問,并且能在一個一致的透明模式下交換和更新數(shù)據(jù)。從而模擬了在窗口系統(tǒng)這一級的應用集成,同時不用開發(fā)大而復雜的程序的接口。
在該方法中,存儲模塊可以是一般的傳輸介質,比如共享存儲區(qū)或共享文件等等,而不局限于共享顯示存儲區(qū)。由此,可以在不消耗顯示資源的條件下完成對應用集成的模擬。
基于該方法可以模擬Z次序,即子窗口總在父窗口之前。下面詳細說明模擬Z次序的工作流圖。
圖3是根據(jù)本發(fā)明優(yōu)選實施例的在父窗口和子窗口之間實現(xiàn)集成的方法的基本工作流圖其中,插件窗口302、插件應用303和傳輸介質304分別對應上述子窗口、子應用和存儲模塊。當插件應用303被激活時,因為它是最前面的進程,所以插件窗口302在父窗口301之前。此時,不存在Z次序問題,或者可以說當前父窗口301和插件窗口302滿足Z次序。由此,我們不使用本發(fā)明優(yōu)選實施例的在父應用和子應用之間實現(xiàn)集成的方法,而由插件應用303自行處理其所接收的用戶接口事件。但是,當插件應用303沒有被激活時,或者說當用戶將焦點轉到其它的主應用的區(qū)域時,此時我們需要使用本發(fā)明優(yōu)選實施例的在父應用和子應用之間實現(xiàn)集成的方法來模擬Z次序。圖3基于主窗口301、插件窗口302、插件應用303和傳輸介質304,圖解了采用根據(jù)本發(fā)明優(yōu)選實施例的在父窗口和子窗口之間實現(xiàn)集成的方法來模擬Z次序的工作流。如圖3所示,對應于上述步驟S201,執(zhí)行用戶接口事件循環(huán),同時屏幕顯示激活的父應用窗口301以及插件窗口302,其中插件窗口302在父窗口301前面(Z次序)。對應于上述步驟S202-S206,如果主應用300所接收的用戶接口事件應由插件應用303處理,父應用300將通過用戶接口循環(huán)所得到至少一個用戶接口事件傳播至插件應用303,同時父窗口301和插件窗口302的顯示保持Z次序。對應于上述步驟S207-S209,根據(jù)所接收的至少一個事件,插件應用303生成內容數(shù)據(jù),并且將該內容數(shù)據(jù)寫入傳輸介質304中,然后發(fā)出一通知給所述父應用300,以及父應用300讀出寫入傳輸介質304中的該內容數(shù)據(jù);這里,在返回步驟S201之前,在上述步驟S209中,父應用300還根據(jù)所讀出的內容數(shù)據(jù)對插件窗口302進行刷新,同時在步驟S207-S209執(zhí)行的同時仍然保持窗口顯示的Z次序。這樣,無論插件應用303是否被激活,插件窗口302總在父窗口301之前,實現(xiàn)了跨進程之間的窗口的無縫父/子關系的Z次序模擬。
在上述父應用根據(jù)所讀出的內容數(shù)據(jù)進行窗口刷新時,父應用300可以有選擇地使用從存儲模塊中讀出的內容數(shù)據(jù)。
在該方法中,由于僅在插件應用沒有被激活時將用戶事件從主應用傳播至插件應用,由此帶來如下兩點改進(1)防止了將所有的用戶事件從主應用傳播至插件應用,從而降低了進程間通信和讀取/寫入存儲模塊的次數(shù),提高了效率;(2)對插件應用的改動較小,比如無須寫附加用戶事件處理函數(shù)。
盡管參照本發(fā)明的特定實施方式對本發(fā)明進行了上述圖示和描述,但本領域技術人員應當理解,在不脫離由所附權利要求書所限定的本發(fā)明的精神和范圍的情況下,可以對本發(fā)明進行形式和細節(jié)上的各種修改。
權利要求
1.一種用于集成父應用和子應用的方法,包括步驟所述父應用通過一用戶接口得到至少一個事件,如果該事件應由子應用處理,則將該至少一個事件傳播至所述子應用;根據(jù)所接收的至少一個事件,所述子應用生成內容數(shù)據(jù),并且將該內容數(shù)據(jù)寫入一存儲模塊中,然后發(fā)出一通知給所述父應用;以及所述父應用讀出寫入該存儲模塊中的該內容數(shù)據(jù)。
2.如權利要求1所述的用于集成父應用和子應用的方法,其中所述存儲模塊是共享存儲區(qū)、共享文件或共享顯示緩存區(qū)。
3.如權利要求1或2所述的用于集成父應用和子應用的方法,所述父應用和所述子應用分別屬于不同的進程。
4.如權利要求1所述的用于集成父應用和子應用的方法,其中所述父應用和所述子應用運行在不支持跨進程應用集成的操作系統(tǒng)上。
5.如權利要求4所述的用于集成父應用和子應用的方法,其中所述不支持跨進程應用集成的操作系統(tǒng)為Mac OS X。
6.如權利要求1或2所述的用于集成父應用和子應用的方法,其中所述父應用對應于父窗口,并且所述子應用是一插件并且對應于子窗口。
7.如權利要求6所述的用于集成父應用和子應用的方法,還包括步驟所述父應用根據(jù)所讀出的內容數(shù)據(jù)對子窗口進行刷新。
8.如權利要求7所述的用于集成父應用和子應用的方法,其中所述父應用根據(jù)所讀出的內容數(shù)據(jù)對子窗口進行刷新以如下方式進行(1)子窗口總在父窗口之前;(2)子窗口和父窗口一同移動;(3)子窗口和父窗口一同調整大小;(4)子窗口和父窗口一同最大或最小化;(5)子窗口的事件可以被傳播至主窗口。
9.如權利要求5所述的用于集成父應用和子應用的方法,其中父應用可以有選擇地使用從存儲模塊中讀出的內容數(shù)據(jù)。
10.一種集成父應用和子應用的系統(tǒng),包括用戶事件接口處理模塊(11),所述父應用通過該用戶事件接口處理模塊得到至少一個事件;子應用事件處理模塊(21);第一通信模塊(13),如果該事件應由子應用處理,則將該至少一個事件從用戶事件接口處理模塊傳播至所述子應用事件處理模塊,并且所述子應用事件處理模塊根據(jù)所接收的至少一個事件生成內容數(shù)據(jù);存儲模塊(30),用于存儲所述子應用事件處理模塊生成的內容數(shù)據(jù);內容更新模塊(22),用于從所述子應用事件處理模塊將該內容數(shù)據(jù)寫入所述存儲模塊;內容讀取模塊(12);和第二通信模塊(23),用于當所述存儲模塊存儲該內容數(shù)據(jù)之后,將一通知從所述子應用發(fā)送給所述內容讀取模塊;其中,當接收該通知之后,所述內容讀取模塊讀出寫入該存儲模塊中的該內容數(shù)據(jù)。
11.如權利要求10所述的集成父應用和子應用的系統(tǒng),其中所述存儲模塊是共享存儲區(qū)、共享文件或共享顯示緩存區(qū)。
12.如權利要求10或11所述的集成父應用和子應用的系統(tǒng),所述父應用和所述子應用分別屬于不同的進程。
13.如權利要求10所述的集成父應用和子應用的系統(tǒng),其中所述父應用和所述子應用運行在不支持跨進程應用集成的操作系統(tǒng)上。
14.如權利要求13所述的集成父應用和子應用的系統(tǒng),其中所述不支持跨進程應用集成的操作系統(tǒng)為Mac OS X。
15.如權利要求10或11所述的用于集成父應用和子應用的系統(tǒng),其中所述父應用對應于父窗口,并且所述子應用是插件并且對應于子窗口。
16.如權利要求15所述的集成父應用和子應用的系統(tǒng),還包括顯示模塊,根據(jù)所述內容讀取模塊所讀出的內容數(shù)據(jù)對子窗口進行刷新。
17.如權利要求16所述的用于集成父應用和子應用的系統(tǒng),其中所述父應用根據(jù)所讀出的內容數(shù)據(jù)對子窗口進行刷新以如下方式進行(1)子窗口總在父窗口之前;(2)子窗口和父窗口一同移動;(3)子窗口和父窗口一同調整大?。?4)子窗口和父窗口一同最大或最小化;(5)子窗口的事件可以被傳播至主窗口。
18.如權利要求所述的集成父應用和子應用的系統(tǒng),其中內容讀取模塊可以有選擇地使用從存儲模塊中讀出的內容數(shù)據(jù)。
全文摘要
集成父應用和子應用的方法和系統(tǒng)。所述方法包括步驟所述父應用通過一用戶接口得到至少一個事件,如果該事件應由子應用處理,則將該至少一個事件傳播至所述子應用;根據(jù)所接收的至少一個事件,所述子應用生成內容數(shù)據(jù),并且將該內容數(shù)據(jù)寫入一存儲模塊中,然后發(fā)出一通知給所述父應用;以及所述父應用讀出寫入該存儲模塊中的該內容數(shù)據(jù)。
文檔編號G06F9/46GK1920778SQ20051009233
公開日2007年2月28日 申請日期2005年8月26日 優(yōu)先權日2005年8月26日
發(fā)明者張垚, 高延斌, 馬永林 申請人:國際商業(yè)機器公司