欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

Wine與安卓手機(jī)軟鍵盤輸入的整合方法

文檔序號(hào):6427019閱讀:2256來源:國知局
專利名稱:Wine與安卓手機(jī)軟鍵盤輸入的整合方法
技術(shù)領(lǐng)域
本發(fā)明涉及移動(dòng)通信領(lǐng)域,尤其涉及Wine與安卓手機(jī)軟鍵盤輸入的整合方法。
背景技術(shù)
以手機(jī)為代表的智能化移動(dòng)終端設(shè)備既是計(jì)算機(jī)技術(shù)的一個(gè)重要發(fā)展方向,又是一個(gè)競爭十分激烈的市場。自從谷歌公司和開放手機(jī)聯(lián)盟推出Android操作系統(tǒng)和基于 Androuid的手機(jī)以來,很快就在世界手機(jī)市場上占有了不小的份額,各種Android手機(jī)層出不窮,由中國移動(dòng)開發(fā)并推出的OPhone也是一種Android手機(jī)。所謂Android操作系統(tǒng),實(shí)際上是對Linux操作系統(tǒng)的一種改編和擴(kuò)充,它的內(nèi)核基本上就是Linux的內(nèi)核,但是在用戶空間卻專門針對手機(jī)和移動(dòng)終端設(shè)備的特點(diǎn)作了大幅的改進(jìn)和增強(qiáng),這些改動(dòng)大都與編程模式和圖形界面,即圖形化用戶界面(GUI)有關(guān)。另一種常用于手機(jī)的操作系統(tǒng)是微軟的WinCE和WM (Windows Mobile),這是在微軟的Windows操作系統(tǒng)上發(fā)展起來的?;赪inCE/WM的手機(jī)也在市場上占不小的份額,并且開發(fā)出了數(shù)量不小的WinCE/WM應(yīng)用軟件。如果能把這些應(yīng)用軟件拿到Android手機(jī)上運(yùn)行,對于提高Android手機(jī)的市場占有率顯然是有利的。Wine是一款優(yōu)秀的Linux系統(tǒng)平臺(tái)下的模擬器軟件,用來將Windows系統(tǒng)下的軟件在Linux系統(tǒng)下穩(wěn)定運(yùn)行,該軟件更新頻繁,日臻完善,可以運(yùn)行許多大型Windows系統(tǒng)下的軟件。當(dāng)把Wine移植到ARM架構(gòu)的Linux平臺(tái)上以后,WinCE/WM應(yīng)用軟件已經(jīng)可以在 Wine的支持下在采用ARM處理器的Linux平臺(tái)上運(yùn)行,同樣也可以在Android平臺(tái)運(yùn)行。在帶圖形界面的Linux操作系統(tǒng)中,有關(guān)圖形界面的功能都是由X視窗系統(tǒng)提供的,輸入法也是圖形界面功能的一部分。運(yùn)行著應(yīng)用軟件的進(jìn)程都不直接讀取鍵盤輸入,而只是通過進(jìn)程間通信從X服務(wù)進(jìn)程獲取輸入。人機(jī)交互的輸入先由本系統(tǒng)中唯一的X服務(wù)進(jìn)程讀取,由X服務(wù)進(jìn)程統(tǒng)一加以前期的處理,然后根據(jù)屏幕上光標(biāo)的當(dāng)前位置以及當(dāng)前處于“聚焦”狀態(tài)的視窗配送給合適的進(jìn)程/線程。X視窗屬于另一個(gè)開源軟件項(xiàng)目,早在Unix時(shí)代即已存在。由于Linux系統(tǒng)大多離不開圖形界面,X視窗實(shí)際上已經(jīng)成了 Linux操作系統(tǒng)的一部分。為適應(yīng)手機(jī)和其它嵌入式系統(tǒng)的需要,人們還將X視窗加以裁剪、縮編、簡化,成為一個(gè)小型化的版本稱為TinyX, 所以TinyX是專門與嵌入式Linux配對使用的X視窗系統(tǒng)。然而,與常規(guī)的Linux平臺(tái)不同,Android/OMS平臺(tái)不使用TinyX,也不支持依靠X 視窗服務(wù)進(jìn)程(Xserver)提供⑶I的Linux應(yīng)用。在Android/OMS平臺(tái)上,所有來自鍵盤和鼠標(biāo)器的輸入全部為一個(gè)“窗口管理器”線程所截獲,再由這個(gè)線程分發(fā)給當(dāng)前正在運(yùn)行的“應(yīng)用(Activity)”。這樣就引出了如何整合Wine和Android/OMS的鍵盤輸入問題。因?yàn)門inyX和Android將會(huì)爭搶來自鍵盤和鼠標(biāo)器的輸入,也會(huì)各自為政地往屏幕上畫圖。為解決Wine與Android/OMS軟鍵盤輸入整合的問題,原有的中國移動(dòng)的程序模型是在運(yùn)行WinCE/WM應(yīng)用時(shí),在Android也啟動(dòng)一個(gè)Java進(jìn)程作為Wine的代理, 稱為win印roxy,并使得來自鍵盤/鼠標(biāo)器的輸入統(tǒng)一由Android加以截獲,將其交給win印roxy,而后者將來自鍵盤/鼠標(biāo)器的輸入轉(zhuǎn)發(fā)給Xserver。通過這樣一種消息傳遞方式,保證消息的單向流通,避免發(fā)生消息多重傳遞而引發(fā)的混亂與沖突。然而這個(gè)方案以及后來提出的驗(yàn)證原型,在實(shí)際上還有很多問題需要解決,其中最重要的是在什么時(shí)候要(在屏幕上)彈出軟鍵盤、什么時(shí)候又不應(yīng)該彈出軟鍵盤的問題。

發(fā)明內(nèi)容
針對現(xiàn)有技術(shù)中存在的上述問題,本發(fā)明提供了 Wine與安卓手機(jī)軟鍵盤輸入的整合方法。本發(fā)明提供了 Wine與安卓手機(jī)軟鍵盤輸入的整合方法,包括步驟1,當(dāng)發(fā)生軟鍵盤事件時(shí),Wine代理向X視窗服務(wù)進(jìn)程發(fā)出事件通知;步驟2,X視窗服務(wù)進(jìn)程按照預(yù)定的格式對事件通知進(jìn)行轉(zhuǎn)換后,將轉(zhuǎn)換后的事件通知發(fā)送至Winexll. drv中的鍵盤/鼠標(biāo)器輸入處理程序;步驟3,Winexll. drv將軟鍵盤事件上交到公共控件管理模塊,公共控件管理模塊決定彈出軟鍵盤;步驟4,X視窗服務(wù)進(jìn)程將來自Wine的彈出軟鍵盤請求轉(zhuǎn)發(fā)給Wine代理,Wine代理執(zhí)行彈出軟件盤操作。在一個(gè)示例中,安卓手機(jī)為Ophone手機(jī)。在一個(gè)示例中,步驟1中,當(dāng)發(fā)生軟鍵盤事件時(shí),調(diào)用函數(shù)Wine代理的函數(shù) onTouchEvent()。在一個(gè)示例中,步驟1中,Wine代理通過套接字將軟件盤事件發(fā)送至X視窗服務(wù)進(jìn)程。在一個(gè)示例中,步驟2中,X視窗服務(wù)進(jìn)程將轉(zhuǎn)換后的事件通知發(fā)送至應(yīng)用進(jìn)程。在一個(gè)示例中,步驟3中,應(yīng)用進(jìn)程中的Winexll. drv. dll將事件通知上交至公共控件管理模塊的comet 132. dll。在一個(gè)示例中,步驟3中,c0mctl32. dll判斷光標(biāo)落在可編輯的控件中,決定彈出軟鍵盤。在一個(gè)示例中,步驟3中,Winexll. drv. dll將彈出軟鍵盤的請求發(fā)送至X視窗服
務(wù)進(jìn)程。在一個(gè)示例中,步驟4中,X視窗服務(wù)進(jìn)程進(jìn)行格式轉(zhuǎn)換之后將彈出軟鍵盤的請求轉(zhuǎn)發(fā)給Wine代理。在一個(gè)示例中,還包括步驟5,用戶按下軟鍵盤的某個(gè)鍵后,調(diào)用WineProxy的函數(shù)onTextChange ();步驟6,從TextView的緩沖區(qū)中獲取鍵入的字符,并將其發(fā)送給X視窗服務(wù)進(jìn)程;步驟7,X視窗服務(wù)進(jìn)程將字符轉(zhuǎn)發(fā)給應(yīng)用進(jìn)程中的Winexll. drv. dll ;步驟8,Winexll. drv. dll向應(yīng)用進(jìn)程發(fā)送一個(gè)WM_CHAR消息;步驟9,應(yīng)用進(jìn)程接收到WM_CHAR消息;用戶點(diǎn)擊回車鍵或點(diǎn)擊不可編輯的區(qū)間, 關(guān)閉軟鍵盤。本發(fā)明使得人機(jī)交互輸入統(tǒng)一流經(jīng)Wine服務(wù)進(jìn)程(Wineserver)以及feerver,再由代理進(jìn)程加以接收后執(zhí)行彈出軟鍵盤工作,整個(gè)過程中只有一套輸入信息的處理和配送機(jī)制,解決了 Wine和Android/OMS關(guān)于軟鍵盤輸入的整合問題,同時(shí)解決了彈出、關(guān)閉軟鍵盤的時(shí)機(jī)與途徑問題。


下面結(jié)合附圖來對本發(fā)明作進(jìn)一步詳細(xì)說明,其中圖1是將Wine移植到ARM架構(gòu)的Linux平臺(tái)并運(yùn)行WinCE/WM應(yīng)用程序時(shí)的系統(tǒng)的基本架構(gòu)示意圖;圖2是應(yīng)用軟鍵盤整合方案后的鍵盤輸入操作的流程示意圖。
具體實(shí)施例方式本發(fā)明在原有的中國移動(dòng)提出的簡單程序原型的基礎(chǔ)上,加以完善和改進(jìn),實(shí)現(xiàn)了一種完整的整合方案。該方案首先切斷feerver獲取軟鍵盤的輸入的途徑,而在運(yùn)行WinCE/WM應(yīng)用時(shí), Android啟動(dòng)一個(gè)進(jìn)程作為Wine的代理win印roxy,這與中國移動(dòng)的方案類似,然而這個(gè)代理必須要與feerver通信,為此,首先建立其與feerver之間建立起Socket連接,并定義一組簡單地通信協(xié)議。同時(shí)完善Wine與Xserver之間的協(xié)議,并且提供一個(gè)API使得Wine 可以向Xserver請求彈出軟鍵盤。此時(shí),只要一發(fā)生鍵盤輸入,Wine就向Xserver發(fā)出事件通知,使后者將其當(dāng)做內(nèi)核的鍵盤/鼠標(biāo)輸入,并上交到公共空間管理層決定是否彈出軟鍵盤。之后Xserver將Wine的彈出軟鍵盤請求遞交給其代理win印roxy,后者即可執(zhí)行彈出軟鍵盤操作。而當(dāng)軟鍵盤彈出后,對軟鍵盤的按鍵操作也將通過相反的消息傳遞通路返回,最終到達(dá)WinCE/WM應(yīng)用,被其所捕獲。這個(gè)方法的要點(diǎn)為1)、在feerver的代碼中切斷從內(nèi)核獲取鍵盤/鼠標(biāo)器輸入的途徑。2)、在Xserver和Win印roxy之間建立起一對Socket,并定義一套簡單的通信協(xié)議。3)、對)(server與Wine之間的通信協(xié)議加以擴(kuò)充,并在Winexll. drv. dll中增添一個(gè)API函數(shù),使Wine可以向Xserver請求彈出軟件盤。4)、一發(fā)生鍵盤/鼠標(biāo)器事件,Wineserver就向Xserver發(fā)出事件通知。5)、得到來自Wineserver的事件通知后,Xserver將其當(dāng)作來自內(nèi)核的鍵盤/鼠標(biāo)器輸入,轉(zhuǎn)化成feerver格式的消息后發(fā)送給Winexll. drv中的鍵盤/鼠標(biāo)器輸入處理程序。鍵盤/鼠標(biāo)器輸入處理程序是在Winex 11. drv中的一段根據(jù)不同輸入消息類型進(jìn)行分支的代碼。即如果發(fā)現(xiàn)送來的消息是Xserver格式的消息,則處理程序直接將其交給上層。這個(gè)輸入處理程序就是這樣If是Xserver格式的消息,消息內(nèi)容是touchEvent Then直接將消息交于comctl32. dll即公共空間管理Else 其他事件,按照原有的處理代碼來處理。6) ,Winexll. drv將輸入上交到公共控件管理這一層,由公共控件管理機(jī)制決定是否需要彈出軟鍵盤。7)、XserVer將來自Wine的彈出軟鍵盤請求轉(zhuǎn)發(fā)給Win印roxy,由后者執(zhí)行彈出軟件盤的操作。圖1是按本發(fā)明中的背景的軟件系統(tǒng)架構(gòu)。圖中的水平虛線表示用戶空間與系統(tǒng)空間的分界,虛線以上為用戶空間,以下為系統(tǒng)空間。圖中的每個(gè)圓圈都代表著一個(gè)進(jìn)程, 其中最大的那個(gè)圓圈代表運(yùn)行著WinCE/WM應(yīng)用的那個(gè)進(jìn)程;這個(gè)圓圈分成上下兩部分,表示這個(gè)進(jìn)程是由WinCE/WM應(yīng)用的EXE映像和所有被(直接或間接地)動(dòng)態(tài)連接到這個(gè)映像的DLL兩個(gè)部分共同構(gòu)成的。除運(yùn)行著WinCE/WM應(yīng)用的進(jìn)程之外,系統(tǒng)中至少還有兩個(gè)進(jìn)程,一個(gè)是Wineserver,就是Wine服務(wù)器進(jìn)程,另一個(gè)是Xserver,就是TinyX的服務(wù)器進(jìn)程。WinCE/WM應(yīng)用進(jìn)程之所以能在Linux內(nèi)核上運(yùn)行,是因?yàn)橛蠾ineserver和DLL的支持。而WinCE/WM應(yīng)用進(jìn)程之所以能獲取鍵盤輸入和鼠標(biāo)器輸入,之所以能在屏幕上顯示圖形,是因?yàn)橛蠿server的存在。在常規(guī)的Linux系統(tǒng)中,來自鍵盤和鼠標(biāo)器的輸入全部為 Xserver所截獲,再由Xserver分發(fā)給當(dāng)前受到聚焦的進(jìn)程。圖2是按本發(fā)明所述方法的完整結(jié)構(gòu)示意圖,從圖中可以看到各個(gè)模塊之間僅僅通過一條鏈?zhǔn)酵废噙B,避免消息傳遞的混亂與沖突。期中Wine與Xserver (TinyX)之間、 Tinx與Wineproxy之間通過定義的socket通信協(xié)議來相互通信。根據(jù)整合方案,需要對代碼進(jìn)行以下修改1)、定義WineProxy的代理接口包含通信功能以及控制軟鍵盤彈出關(guān)閉等功能的抽象函數(shù)。2)、具體實(shí)現(xiàn)這些函數(shù),其中通信的函數(shù)中需要建立socket connection來和 Xserver 通信。3)、同樣在)(server中也定義socket connection,此時(shí)可通過自定義的通信協(xié)議,創(chuàng)建一些事件,比如鍵盤、鼠標(biāo)器等按鍵事件的監(jiān)聽器(Listener)。4)、在事件響應(yīng)函數(shù)中將收到的事件轉(zhuǎn)換格式,使得相應(yīng)的應(yīng)用程序能夠識(shí)別,如果是請求/關(guān)閉軟鍵盤的事件,則通知WineProxy的彈出/關(guān)閉軟鍵盤操作。5)、Xserver中加入與上層dll通信的函數(shù),完成請求判斷鼠標(biāo)區(qū)域、輸入字符轉(zhuǎn)發(fā)等通信任務(wù)。通過實(shí)現(xiàn)上述功能后,一個(gè)完整的軟鍵盤輸入操作的流程如下1.使用者點(diǎn)擊屏幕上的某個(gè)區(qū)間。2. WineProxy 的 onTouchEvent ()得到調(diào)用。3. WineProxy 將此事件通過 socket 發(fā)送給 Xserver,即 TinyX。4. Xserver將此事件通知轉(zhuǎn)換成Xll協(xié)議所規(guī)定的格式,并將其轉(zhuǎn)發(fā)給應(yīng)用進(jìn)程, 這個(gè)事件與feerver獲知鍵盤/鼠標(biāo)器狀態(tài)發(fā)生變化時(shí)的事件等價(jià)。5.應(yīng)用進(jìn)程中的Winexll. drv. dll接收到來自Xserver的事件后,將其上交給上層的 comctl32. dll。6.上層DLL檢查此時(shí)的光標(biāo)是否落在某個(gè)可編輯的控件中,如果是就調(diào)用 ffinexll. drv. dll提供的一個(gè)API函數(shù),要求彈出軟鍵盤。7. ffinexll. drv. dll將彈出軟鍵盤的要求發(fā)送給)(server。8. Xserver進(jìn)行格式轉(zhuǎn)換之后將請求轉(zhuǎn)發(fā)給WineftOxy。9. WineProxy 彈出軟鍵盤。10.使用者在軟鍵盤上按下某個(gè)鍵。
11. WineProxy的onTextChange ()得到調(diào)用,從其iTextView的緩沖區(qū)中獲取鍵入的字符,并將其發(fā)送給feerver。12. feerver收到來自WineProxy的輸入字符,將其轉(zhuǎn)發(fā)給應(yīng)用進(jìn)程中的Winexll. drv. dll ο13. Winexll. drv. dll 向應(yīng)用進(jìn)程發(fā)送一個(gè) WM_CHAR 消息。14.應(yīng)用進(jìn)程接收到WM_CHAR消息。

15.使用者點(diǎn)擊回車鍵或點(diǎn)擊不可編輯的區(qū)間,關(guān)閉軟鍵盤。本發(fā)明通過采用一個(gè)統(tǒng)一的機(jī)制,來管理鍵盤/鼠標(biāo)器的輸入和屏幕輸出,使得 TinyX和Android在軟鍵盤按下時(shí)的不相互沖突,同時(shí)解決了在什么時(shí)候要(在屏幕上)彈出軟鍵盤、而什么時(shí)候又不應(yīng)該彈出軟鍵盤的問題。以上所述僅為本發(fā)明的優(yōu)選實(shí)施方式,但本發(fā)明保護(hù)范圍并不局限于此。任何本領(lǐng)域的技術(shù)人員在本發(fā)明公開的技術(shù)范圍內(nèi),均可對其進(jìn)行適當(dāng)?shù)母淖兓蜃兓?,而這種改變或變化都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
1.Wine與安卓手機(jī)軟鍵盤輸入的整合方法,其特征在于,包括步驟1,當(dāng)發(fā)生軟鍵盤事件時(shí),Wine代理向X視窗服務(wù)進(jìn)程發(fā)出事件通知;步驟2,X視窗服務(wù)進(jìn)程按照預(yù)定的格式對事件通知進(jìn)行轉(zhuǎn)換后,將轉(zhuǎn)換后的事件通知發(fā)送至Winexll. drv中的鍵盤/鼠標(biāo)器輸入處理程序;步驟3,Winexll. drv將軟鍵盤事件上交到公共控件管理模塊,公共控件管理模塊決定彈出軟鍵盤;步驟4,X視窗服務(wù)進(jìn)程將來自Wine的彈出軟鍵盤請求轉(zhuǎn)發(fā)給Wine代理,Wine代理執(zhí)行彈出軟件盤操作。
2.如權(quán)利要求1所述的整合方法,其特征在于,安卓手機(jī)為Ophone手機(jī)。
3.如權(quán)利要求1或2所述的整合方法,其特征在于,步驟1中,當(dāng)發(fā)生軟鍵盤事件時(shí),調(diào)用函數(shù)Wine代理的函數(shù)OnI1OuchEvent ()。
4.如權(quán)利要求3所述的整合方法,其特征在于,步驟1中,Wine代理通過套接字將軟件盤事件發(fā)送至X視窗服務(wù)進(jìn)程。
5.如權(quán)利要求4所述的整合方法,其特征在于,步驟2中,X視窗服務(wù)進(jìn)程將轉(zhuǎn)換后的事件通知發(fā)送至應(yīng)用進(jìn)程。
6.如權(quán)利要求5所述的整合方法,其特征在于,步驟3中,應(yīng)用進(jìn)程中的Winexll.drv. dll將事件通知上交至公共控件管理模塊的comctl32. dll。
7.如權(quán)利要求6所述的整合方法,其特征在于,步驟3中,comctl32.dll判斷光標(biāo)落在可編輯的控件中,決定彈出軟鍵盤。
8.如權(quán)利要求7所述的整合方法,其特征在于,步驟3中,Winexll.drv. dll將彈出軟鍵盤的請求發(fā)送至X視窗服務(wù)進(jìn)程。
9.如權(quán)利要求8所述的整合方法,其特征在于,步驟4中,X視窗服務(wù)進(jìn)程進(jìn)行格式轉(zhuǎn)換之后將彈出軟鍵盤的請求轉(zhuǎn)發(fā)給Wine代理。
10.如權(quán)利要求9所述的整合方法,其特征在于,還包括步驟5,用戶按下軟鍵盤的某個(gè)鍵后,調(diào)用WineProxy的函數(shù)onTextChange ();步驟6,從TextView的緩沖區(qū)中獲取鍵入的字符,并將其發(fā)送給X視窗服務(wù)進(jìn)程;步驟7,X視窗服務(wù)進(jìn)程將字符轉(zhuǎn)發(fā)給應(yīng)用進(jìn)程中的Winexll. drv. dll ;步驟8,Winexll. drv. dll向應(yīng)用進(jìn)程發(fā)送一個(gè)WM_CHAR消息;步驟9,應(yīng)用進(jìn)程接收到WM_CHAR消息;用戶點(diǎn)擊回車鍵或點(diǎn)擊不可編輯的區(qū)間,關(guān)閉軟鍵盤。
全文摘要
本發(fā)明公開了Wine與安卓手機(jī)軟鍵盤輸入的整合方法,包括步驟1,當(dāng)發(fā)生軟鍵盤事件時(shí),Wine代理向X視窗服務(wù)進(jìn)程發(fā)出事件通知;步驟2,X視窗服務(wù)進(jìn)程按照預(yù)定的格式對事件通知進(jìn)行轉(zhuǎn)換后,將轉(zhuǎn)換后的事件通知發(fā)送至Winex11.drv中的鍵盤/鼠標(biāo)器輸入處理程序;步驟3,Winex11.drv將軟鍵盤事件上交到公共控件管理模塊,公共控件管理模塊決定彈出軟鍵盤;步驟4,X視窗服務(wù)進(jìn)程將來自Wine的彈出軟鍵盤請求轉(zhuǎn)發(fā)給Wine代理,Wine代理執(zhí)行彈出軟件盤操作。本發(fā)明使解決了Wine和Android/OMS關(guān)于軟鍵盤輸入的整合問題,同時(shí)解決了彈出、關(guān)閉軟鍵盤的時(shí)機(jī)與途徑問題。
文檔編號(hào)G06F9/44GK102331927SQ20111017284
公開日2012年1月25日 申請日期2011年6月24日 優(yōu)先權(quán)日2011年6月24日
發(fā)明者傅唯威, 徐鼎鼎, 毛德操, 王承志, 陳天洲 申請人:浙大網(wǎng)新科技股份有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會(huì)獲得點(diǎn)贊!
1
滨州市| 阳泉市| 连云港市| 兰坪| 海淀区| 大英县| 勐海县| 昌吉市| 榆中县| 开江县| 乌拉特前旗| 平阳县| 偏关县| 永丰县| 灵台县| 历史| 耒阳市| 七台河市| 自贡市| 新津县| 桂林市| 开平市| 外汇| 北碚区| 聊城市| 白沙| 阿瓦提县| 巴马| 正镶白旗| 特克斯县| 临武县| 全南县| 望谟县| 富裕县| 和静县| 华蓥市| 三门县| 松滋市| 大埔区| 灵丘县| 长武县|