專利名稱:一種整合Wine與Android鼠標(biāo)輸入的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及智能移動(dòng)終端領(lǐng)域,更具體的說,涉及一種整合Wine與Android鼠標(biāo)輸入的方法。
背景技術(shù):
以手機(jī)為代表的智能化移動(dòng)終端是計(jì)算機(jī)技術(shù)一個(gè)重要發(fā)展方向,因此市場競爭非常激烈。谷歌公司和開放手機(jī)聯(lián)盟推出Android操作系統(tǒng)和基于此系統(tǒng)的手機(jī)以來,基于Android系統(tǒng)的手機(jī)市場份額不斷增多,因此越來越多的用戶體驗(yàn)問題被關(guān)注。所謂Android操作系統(tǒng),實(shí)際上是對(duì)Linux操作系統(tǒng)的一種改編和擴(kuò)充,它的內(nèi)核是經(jīng)過修改的Linux的內(nèi)核,但是在用戶空間卻專門針對(duì)例如手機(jī)的移動(dòng)終端設(shè)備的應(yīng)用特點(diǎn)作了大幅的改進(jìn)和增強(qiáng),這些改動(dòng)大都與編程模式和圖形界面,即圖形化用戶界面 (⑶I)有關(guān)。在帶圖形界面的Linux操作系統(tǒng)中,有關(guān)圖形界面的功能由X視窗系統(tǒng)提供,而鼠標(biāo)輸入也是圖形界面功能的一部分。運(yùn)行著應(yīng)用軟件的進(jìn)程都不直接讀取鼠標(biāo)輸入,而是通過進(jìn)程間通信從X服務(wù)進(jìn)程OCserver)獲取輸入。人機(jī)交互的輸入先由本系統(tǒng)中唯一的 Xserver讀取,由Xserver統(tǒng)一加以前期處理,然后根據(jù)屏幕上光標(biāo)的當(dāng)前位置以及當(dāng)前處于“聚焦”狀態(tài)的視窗配送給合適的進(jìn)程/線程。此處所說的前期處理可簡可繁,簡單的處理由X視窗本身加以實(shí)施,復(fù)雜的處理則要由外掛的程序模塊加以處理,而鼠標(biāo)輸入處理就屬于這樣的外掛程序模塊。所以,用于Linux應(yīng)用的鼠標(biāo)輸入處理實(shí)際上是為X視窗的鼠標(biāo)輸入處理。X視窗屬于另一個(gè)開源軟件項(xiàng)目,早在Unix時(shí)代即已存在。由于Linux系統(tǒng)大多離不開圖形界面,X視窗實(shí)際上已經(jīng)成了 Linux操作系統(tǒng)的一部分。為適應(yīng)移動(dòng)終端和其它嵌入式系統(tǒng)的需要,技術(shù)人員將X視窗加以裁剪、縮編、簡化,成為一個(gè)小型化的版本,稱為TinyX。因此TinyX是專門與嵌入式Linux配對(duì)使用的X視窗系統(tǒng),所以也將手機(jī)上的 Linux應(yīng)用而開發(fā)的鼠標(biāo)輸入處理程序稱為TinyX鼠標(biāo)出入處理程序??墒?,在Android系統(tǒng)中,卻甩開TinyX,包括鼠標(biāo)輸入處理在內(nèi)的所有圖形界面功能全都由Android自己提供。同樣,Android也有自己類似于TinyX那樣的集中處理和配送輸入信息的機(jī)制。使得如果需要在Android手機(jī)上運(yùn)行普通的Linux應(yīng)用,鼠標(biāo)輸入的處理就成為一個(gè)問題。這是因?yàn)椋琇inux應(yīng)用必須與TinyX配套運(yùn)行,而用了 TinyX,就只能使用與其配套的TinyX鼠標(biāo)輸入處理程序,可是所有的Android應(yīng)用卻只能繼續(xù)使用由 Android提供的鼠標(biāo)輸入處理程序。這樣,就會(huì)形成TinyX和Android同時(shí)共存的局面,此時(shí)來自觸摸式屏幕和其它輸入設(shè)備的物理狀態(tài)信息不再由唯一的實(shí)體加以統(tǒng)一處理和配送,會(huì)造成以下兩方面的問題。首先,可能會(huì)有爭搶輸入信息的情況發(fā)生;其次,即使不發(fā)生爭搶輸入信息的情況,使用者也可能只好在與Android應(yīng)用交互時(shí)采用一種鼠標(biāo)輸入處理程序,而在與Linux應(yīng)用交互時(shí)采用另一種鼠標(biāo)輸入處理程序,由于兩者在功能和性能上的差異,會(huì)給用戶體驗(yàn)帶來不便。
把Wine移植到Linux平臺(tái)后,基于Windows操作系統(tǒng)的WinCE/WM應(yīng)用軟件可在 Linux平臺(tái)運(yùn)行,因此同樣存在TinyX與Android爭搶W(xué)ine應(yīng)用程序鼠標(biāo)輸入的問題。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明的目的在于提供一種整合Wine與Android鼠標(biāo)輸入的方法,使得Android成為統(tǒng)一接收、處理、配送鼠標(biāo)輸入信息的唯一實(shí)體,向在Android手機(jī)上運(yùn)行的Linux應(yīng)用提供鼠標(biāo)輸入信息,讓使用者不需要在同一臺(tái)手機(jī)上因?yàn)橐c不同的應(yīng)用交互而使用不同的鼠標(biāo)輸入處理程序。依據(jù)本發(fā)明一實(shí)施例的一種整合Wine與Android鼠標(biāo)輸入的方法,主要針對(duì)在 Android系統(tǒng)中執(zhí)行普通的Linux應(yīng)用程序時(shí)發(fā)生的鼠標(biāo)輸入事件進(jìn)行處理,其處理過程包括以下步驟步驟1,創(chuàng)建一個(gè)代理進(jìn)程WineftOXy接收所述鼠標(biāo)輸入事件;步驟2,在TinyX中切斷從內(nèi)核獲取鼠標(biāo)輸入的途徑;步驟3,在TinyX和WineProxy之間建立通信連接;步驟4,發(fā)生鼠標(biāo)輸入事件,WineProxy通過所述通信連接向TinyX發(fā)出事件通知;步驟5,TinyX將接收所述事件通知后,將其封裝成TinyX格式的消息后發(fā)送至應(yīng)用程序進(jìn)程進(jìn)行處理。依照以上技術(shù)方案實(shí)現(xiàn)的整合Wine與Android鼠標(biāo)輸入的方法,鼠標(biāo)輸入就會(huì)統(tǒng)一流經(jīng)由Android提供的鼠標(biāo)處理程序和配送機(jī)制,先由代理進(jìn)程加以接收,再轉(zhuǎn)發(fā)給 TinyX,最后到達(dá)運(yùn)行著的Linux應(yīng)用進(jìn)程,整個(gè)過程中只有一套鼠標(biāo)輸入信息的處理和配送機(jī)制,從而實(shí)現(xiàn)Wine與Android鼠標(biāo)輸入整合。
圖1所示為整合Wine與Android鼠標(biāo)輸入系統(tǒng)基本結(jié)構(gòu)示意圖;圖2所示為整合Wine與Android鼠標(biāo)輸入的軟件結(jié)構(gòu)示意圖;圖3所示為整合Wine與Android鼠標(biāo)輸入處理流程圖。
具體實(shí)施例方式以下結(jié)合附圖對(duì)本發(fā)明的優(yōu)選實(shí)施例進(jìn)行詳細(xì)描述,但本發(fā)明并不僅僅限于這些實(shí)施例。本發(fā)明涵蓋任何在本發(fā)明的精髓和范圍上做的替代、修改、等效方法以及方案。為了使公眾對(duì)本發(fā)明有徹底的了解,在以下本發(fā)明優(yōu)選實(shí)施例中詳細(xì)說明了具體的細(xì)節(jié),而對(duì)本領(lǐng)域技術(shù)人員來說沒有這些細(xì)節(jié)的描述也可以完全理解本發(fā)明。參考圖1,所示為整合Wine與Android鼠標(biāo)輸入系統(tǒng)基本結(jié)構(gòu)示意圖,圖中水平虛線表示用戶空間與系統(tǒng)空間的分界,虛線以上為用戶空間,虛線以下為系統(tǒng)空間,即Linux 內(nèi)核140。WinCE/WM應(yīng)用進(jìn)程120包括WinCE/WM的EXE映像121和Wine動(dòng)態(tài)鏈接庫122。 除運(yùn)行WinCE/WM應(yīng)用進(jìn)程120之外,系統(tǒng)中至少還有兩個(gè)進(jìn)程,一個(gè)是WineserverllO,即 Wine服務(wù)器進(jìn)程;另一個(gè)是XserVerl30,即TinyX服務(wù)器進(jìn)程。WinCE/WM應(yīng)用進(jìn)程120之所以能在Linux內(nèi)核上運(yùn)行,是因?yàn)橛蠾ineserverllO和Wine動(dòng)態(tài)鏈接庫122的支持。而WinCE/WM應(yīng)用進(jìn)程120之所以能獲取鼠標(biāo)器輸入,之所以能在屏幕上顯示圖形,是因?yàn)橛?Xserver 130的存在。在常規(guī)的Linux系統(tǒng)中,來自鼠標(biāo)器的輸入全部為Xserver所截獲,再由Xserver分發(fā)給當(dāng)前受到聚焦的進(jìn)程。參考圖2,所示為整合Wine與Android鼠標(biāo)輸入的軟件結(jié)構(gòu)示意圖。整合Wine與 Android鼠標(biāo)輸入對(duì)原有Android系統(tǒng)的修改主要涉及以下三部分。其中在用于管理應(yīng)用程序的子系統(tǒng)中修改comctl32. dll和winexll. drv. dll的相應(yīng)源代碼,增加下述功能,在 comctl32. dll中添加可以判斷是否需要彈出輔助輸入框的功能,使其可以根據(jù)鼠標(biāo)點(diǎn)擊的位置判斷該點(diǎn)擊是否需要在屏幕上彈出輔助輸入框作為響應(yīng),在winexll. drv. dll中添加一個(gè)api函數(shù),使Wine可以向Xserver發(fā)出彈出輔助輸入框的請(qǐng)求。本實(shí)例系統(tǒng)采用TinyX作為系統(tǒng)中的Xserver。對(duì)TinyX的修改主要集中在切斷從內(nèi)核獲取鼠標(biāo)輸入的途徑。具體的說,將原先TinyX中從系統(tǒng)內(nèi)核獲取鼠標(biāo)點(diǎn)擊輸入的代碼修改為通過socket從WineftOxy處獲取相應(yīng)的鼠標(biāo)輸入行為。WineProxy為本發(fā)明在Android系統(tǒng)中新建立的一個(gè)任務(wù)。WineProxy需要實(shí)現(xiàn)的功能包括監(jiān)控屏幕上的鼠標(biāo)點(diǎn)擊操作,記錄鼠標(biāo)點(diǎn)擊操作的類型和具體的位置信息,并將其封裝成Xll系統(tǒng)標(biāo)準(zhǔn)的信息格式。此外系統(tǒng)中還需要實(shí)現(xiàn)用于應(yīng)用程序與TinyX和 WineProxy之間通訊的Socket,及其相應(yīng)的通訊協(xié)議。WineProxy模塊從屏幕讀取鼠標(biāo)的操作,并將其信息存儲(chǔ)在緩沖區(qū)中,再將緩沖區(qū)中的鼠標(biāo)操作信息通過Socket發(fā)送給TinyX進(jìn)行處理;TinyX負(fù)責(zé)鼠標(biāo)輸入的具體處理, 將從WineftOxy獲取的鼠標(biāo)操作的信息封裝成符合X標(biāo)準(zhǔn)規(guī)范的信息格式,并將此信息通過Socket發(fā)送到ffinexll. drv. dll進(jìn)行處理,Winexll. drv. dll模塊負(fù)責(zé)將TinyX發(fā)出的鼠標(biāo)輸入請(qǐng)求轉(zhuǎn)換為可以被Comctl32. dll識(shí)別的格式,并將c0mctl32. dll的請(qǐng)求轉(zhuǎn)換為標(biāo)準(zhǔn)的TinyX命令格式。參考圖3,所示為整合Wine與Android鼠標(biāo)輸入處理流程圖。以下以Android系統(tǒng)中的軟鍵盤輸入過程作為實(shí)例,具體說明本發(fā)明的方法如何實(shí)際應(yīng)用于Android系統(tǒng)中的鼠標(biāo)輸入過程中,實(shí)現(xiàn)對(duì)鼠標(biāo)輸入的整合功能。步驟301,等待屏幕上的點(diǎn)擊,進(jìn)入步驟302 ;由于軟鍵盤輸入在Android系統(tǒng)中的多個(gè)任務(wù)中都會(huì)采用,而且運(yùn)行的時(shí)間并不固定,因此系統(tǒng)需要隨時(shí)監(jiān)控用戶在屏幕上的點(diǎn)擊行為;步驟302,WineProxy將此事件通過Socket發(fā)送給TinyX,進(jìn)入步驟303 ;當(dāng)用戶點(diǎn)擊屏幕后,WineProxy中的onTouchEventO方法得到調(diào)用。該方法將用戶的點(diǎn)擊封裝為系統(tǒng)內(nèi)的一個(gè)事件,并記錄下點(diǎn)擊的具體類型和位置的信息,用于以后的操作;步驟303,TinyX將此事件轉(zhuǎn)換為Xll協(xié)議格式,將其轉(zhuǎn)發(fā)給應(yīng)用進(jìn)程,進(jìn)入步驟 304 ;WineProxy將封裝好的事件通過socket發(fā)送給)(server,在本實(shí)例系統(tǒng)中,即 TinyX,此時(shí)發(fā)送的信息并不符合Xl 1協(xié)議所定義的格式TinyX將此事件通知轉(zhuǎn)換成Xl 1協(xié)議所規(guī)定的格式,并將其轉(zhuǎn)發(fā)給應(yīng)用進(jìn)程,這個(gè)事件與TinyX獲知鼠標(biāo)狀態(tài)發(fā)生變化時(shí)的事件等價(jià),包括點(diǎn)擊類型,點(diǎn)擊的具體位置等信息;TinyX將轉(zhuǎn)化后的點(diǎn)擊事件通過socket 發(fā)送給應(yīng)用進(jìn)程的winexll. drv. dll ;
步驟304,ffinexll. drv. dll接收到來自TinyX的事件后,將其轉(zhuǎn)發(fā)給comctl32. dll,進(jìn)入步驟305 ;應(yīng)用進(jìn)程中的Winexll. drv. dll接收到來自TinyX的事件后,判斷出其為鼠標(biāo)點(diǎn)擊事件,隨后將其上交給上層的comet 132. dll處理;步驟305,判斷點(diǎn)擊是夠落在可編程控件中,如果是,進(jìn)入步驟306,如果否,返回步驟301,上層的comctl32. dll通過封裝轉(zhuǎn)換后的Xll事件判斷此時(shí)的光標(biāo)是否落在某個(gè)可編輯的控件中,如果是點(diǎn)擊的位置屬于不可編輯的區(qū)域,就忽略這次的鼠標(biāo)點(diǎn)擊操作,系統(tǒng)狀態(tài)跳回到步驟301,繼續(xù)等待用戶在屏幕上的鼠標(biāo)點(diǎn)擊操作;步驟306,調(diào)用Winexll. drv. dll的API函數(shù),要求彈出輸入框,進(jìn)入步驟307 ;如果comctl32. dl 1判斷鼠標(biāo)點(diǎn)擊的位置屬于某個(gè)可編輯的控件中,就調(diào)用 ffinexll. drv. dll提供的相應(yīng)API函數(shù),發(fā)出彈出軟鍵盤的請(qǐng)求;步驟307,等待輸入框上的點(diǎn)擊輸入,進(jìn)入步驟308 ;步驟308,判斷是否點(diǎn)擊不可編輯區(qū)域,如果是,進(jìn)入步驟309,如果否,進(jìn)入步驟 310 ;步驟309,關(guān)閉輸入框,并返回步驟301 ;步驟310,WineProxy從PosView的緩沖區(qū)中獲取點(diǎn)擊的位置,將其發(fā)送給 XServer,進(jìn)入步驟311 ;步驟311,Xkrver收到點(diǎn)擊的位置,將其轉(zhuǎn)發(fā)給應(yīng)用進(jìn)程的Winexll. drv. dll,進(jìn)入步驟312 ;步驟312,ffinexll. drv. dll向應(yīng)用進(jìn)程發(fā)送WM_P0S消息,進(jìn)入步驟313 ;步驟313,應(yīng)用程序接收WM_P0S消息,返回至步驟307。值得注意的是,上述過程還可以優(yōu)化,將來可以將TinyX從這個(gè)過程中排除出去, 讓應(yīng)用進(jìn)程通過Winexll. drv. dll直接與WineProxy通信,降低系統(tǒng)相應(yīng)鼠標(biāo)操作的通訊延時(shí),改善系統(tǒng)的用戶體驗(yàn)。本說明書選取并具體描述這些實(shí)施例,是為了最好地解釋本發(fā)明的原理和實(shí)際應(yīng)用,從而使所屬技術(shù)領(lǐng)域技術(shù)人員能最好地利用這個(gè)發(fā)明。修改的實(shí)施例同樣也適用于預(yù)期的特定應(yīng)用。本發(fā)明的范圍為權(quán)利要求書全部范圍以及其等效物。
權(quán)利要求
1. 一種整合Wine與Android鼠標(biāo)輸入的方法,主要針對(duì)在Android系統(tǒng)中執(zhí)行普通的 Linux應(yīng)用程序時(shí)發(fā)生的鼠標(biāo)輸入事件進(jìn)行處理,其特征在于,其處理過程包括以下步驟 步驟1,創(chuàng)建一個(gè)代理進(jìn)程Wineft^xy接收所述鼠標(biāo)輸入事件; 步驟2,在TinyX中切斷從內(nèi)核獲取鼠標(biāo)輸入的途徑; 步驟3,在TinyX和WineProxy之間建立通信連接;步驟4,發(fā)生鼠標(biāo)輸入事件,WineProxy通過所述通信連接向TinyX發(fā)出事件通知; 步驟5,TinyX將接收所述事件通知后,將其封裝成TinyX格式的消息后發(fā)送至應(yīng)用程序進(jìn)程進(jìn)行處理。
全文摘要
本發(fā)明公開了一種整合Wine與Android鼠標(biāo)輸入的方法,主要針對(duì)在Android系統(tǒng)中執(zhí)行普通的Linux應(yīng)用程序時(shí)發(fā)生的鼠標(biāo)輸入事件進(jìn)行處理,其處理過程包括以下步驟創(chuàng)建一個(gè)代理進(jìn)程WineProxy接收所述鼠標(biāo)輸入事件;在TinyX中切斷從內(nèi)核獲取鼠標(biāo)輸入的途徑;在TinyX和WineProxy之間建立通信連接;發(fā)生鼠標(biāo)輸入事件,WineProxy通過所述通信連接向TinyX發(fā)出事件通知;TinyX將接收所述事件通知后,將其封裝成TinyX格式的消息后發(fā)送至應(yīng)用程序進(jìn)程進(jìn)行處理。
文檔編號(hào)G06F9/44GK102364434SQ201110173748
公開日2012年2月29日 申請(qǐng)日期2011年6月24日 優(yōu)先權(quán)日2011年6月24日
發(fā)明者徐鼎鼎, 毛德操, 王承志, 邵景程, 陳天洲 申請(qǐng)人:浙大網(wǎng)新科技股份有限公司