国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      一種單顯示多筆交互方法

      文檔序號:6602933閱讀:162來源:國知局
      專利名稱:一種單顯示多筆交互方法
      技術(shù)領(lǐng)域
      本發(fā)明屬于人機交互領(lǐng)域,具體涉及到一種單顯示多筆交互方法。
      背景技術(shù)
      隨著計算機的普及,其應(yīng)用已經(jīng)滲透到我們?nèi)粘I畹母鱾€方面,但在一些比較 貧困的學(xué)校中,還會出現(xiàn)十幾個兒童圍在一臺計算機面前的場景。在較發(fā)達(dá)的地區(qū),多人 共享一臺計算機的情況還是很常見的。在美國公立學(xué)校,共享比率達(dá)到了 3.8比1。即使 沒有資源上的限制,面對面的合作所帶來的社交方面的益處也是人們共享計算機的主要 原因之一。在多人共享計算機的情況下,計算機只能由一個人操作時,旁觀者由于沒有計 算機的控制權(quán),很容易失去興趣和注意力。為此目前已經(jīng)有研究單顯示的多人交互技術(shù): SDG Toolkit是給開發(fā)人員提供的編寫單屏幕多人交互應(yīng)用的開發(fā)包。它從界面層到消息 響應(yīng)層,提供相應(yīng)的控件和API,方便開發(fā)人員使用;CoSearch是基于Microsoft Windows Multipoint SDK開發(fā)的網(wǎng)絡(luò)查詢應(yīng)用,支持多個用戶使用多個鼠標(biāo)在同一設(shè)備上聯(lián)合查 詢,每個用戶都可以控制自己的查詢和參與他人的查詢,查詢結(jié)果在同一顯示設(shè)備上;Udai Singh Pawar等人將單顯示多人交互應(yīng)用到教學(xué)中,開發(fā)了多人學(xué)習(xí)英文單詞的應(yīng)用,大大 提高了學(xué)生們的學(xué)習(xí)興趣與學(xué)習(xí)單詞的效率。但是上述研究主要使用是基于鼠標(biāo)的多人交 互,不適合對電腦使用不熟悉的用戶群體,特別是兒童用戶使用電腦進行交互。現(xiàn)有的一種 解決方案是采用多觸控技術(shù),即使用支持多點觸摸控制的特殊顯示設(shè)備(如多觸控桌面) 來支持多個用戶同時在一臺設(shè)備上進行操作。然而,該技術(shù)需要特殊的硬件設(shè)備支持,成本 比較高,對于普通用戶來講還難以接受。綜上所述,由于筆式交互技術(shù)簡單便于操作的特 性,更適合非專業(yè)用戶以及兒童使用,以及筆式交互設(shè)備在裝備改造上相對便宜和易于實 現(xiàn)的優(yōu)勢,因此,本專利提出了一種多筆交互方法,基于該方法和技術(shù),可以使多個用戶分 別使用筆與軟件進行交互。

      發(fā)明內(nèi)容
      本項發(fā)明解決了在單顯示計算機設(shè)備上實現(xiàn)多人使用筆設(shè)備同時操作的難題,使 得在強調(diào)協(xié)同合作,如兒童教學(xué)等相關(guān)環(huán)境下的多人合作成為可能,極大地提高這些環(huán)境
      下的用戶體驗。
      為實現(xiàn)上述目的,單顯示多筆交互方法實現(xiàn)了如下特性
      1.支持多用戶同時進行操作
      2.有區(qū)別的顯示各個筆設(shè)備到顯示設(shè)備上
      3.支持差異化操作
      4.支持沖突檢測與解決
      5.支持在已有的應(yīng)用程序基礎(chǔ)上實現(xiàn)單顯示多筆交互
      6.支持SDK開發(fā)
      7.采用驅(qū)動式支持方式實現(xiàn)單顯示多筆交互的支持
      本發(fā)明的技術(shù)方案為一種單顯示多筆交互方法,其步驟為1)計算機系統(tǒng)從識別出的各輸入設(shè)備中過濾出若干目標(biāo)交互設(shè)備;2)計算機系統(tǒng)對每個目標(biāo)交互設(shè)備的I/O端口進行監(jiān)聽,獲得每個目標(biāo)交互設(shè)備 的信息對Device ID和I/O data ;其中,Device ID為目標(biāo)交互設(shè)備的ID,I/O data為目 標(biāo)交互設(shè)備輸入信息;3)計算機系統(tǒng)隱藏系統(tǒng)光標(biāo),并根據(jù)目標(biāo)交互設(shè)備的信息繪制每個目標(biāo)交互設(shè)備 的光標(biāo);4)將每個目標(biāo)交互設(shè)備的I/O data信息封裝為Windows操作系統(tǒng)所能識別的消 息,并將Device ID作為附加數(shù)據(jù)發(fā)送到應(yīng)用程序的目標(biāo)消息隊列中;5)根據(jù)Device ID對步驟4)封裝后的消息進行分發(fā),并提取光標(biāo)位置信息更新目 標(biāo)交互設(shè)備的光標(biāo)顯示;6)根據(jù)預(yù)定義的沖突檢測規(guī)則對消息進行沖突檢測,如果存在沖突則利用預(yù)定義 的沖突消解規(guī)則對沖突消息進行消解;7)根據(jù)步驟6)處理后的消息生成目標(biāo)交互設(shè)備的原語;8)根據(jù)原語生成目標(biāo)交互設(shè)備的手勢消息類型,發(fā)送到應(yīng)用程序的目標(biāo)消息隊 列;9)應(yīng)用程序根據(jù)接收的Device ID數(shù)據(jù)和手勢消息類型,驅(qū)動相應(yīng)的目標(biāo)交互設(shè)備。進一步的,所述預(yù)定義的沖突檢測規(guī)則包括a)資源競爭檢測,即測試所有目標(biāo) 交互設(shè)備對系統(tǒng)資源的請求,如果在同一時刻有兩個以上的目標(biāo)交互設(shè)備同時請求一個系 統(tǒng)資源,則判定為存在資源競爭沖突;b)操作沖突檢測,即測試所有目標(biāo)交互設(shè)備的當(dāng)前 操作,如果檢測到在同一時刻有兩個以上的目標(biāo)交互設(shè)備進行相互對立的操作,則判定為 存在操作沖突。進一步的,所述預(yù)定義的沖突消解規(guī)則包括a)資源競爭沖突消解,即根據(jù)設(shè)備 的DevicelD順序執(zhí)行目標(biāo)交互設(shè)備的資源請求;b)操作沖突消解,即將相互對立的并行操 作分解,按Device ID順序串行依次執(zhí)行各個目標(biāo)交互設(shè)備的當(dāng)前操作請求。進一步的,繪制目標(biāo)交互設(shè)備的光標(biāo)的方法為1)載入初始注冊信息;其中初始注冊信息包括光標(biāo)資源的位置、各個狀態(tài)的光 標(biāo)資源的定義;2)對每一個目標(biāo)交互設(shè)備,分配與其狀態(tài)相對應(yīng)的光標(biāo)資源,并在顯示設(shè)備上繪 制出該設(shè)備的光標(biāo)。進一步的,采用不規(guī)則Windows窗口繪制方法繪制光標(biāo)。進一步的,所述步驟5)中,進行消息分發(fā)的方法為首先將每個目標(biāo)交互設(shè)備從 輸入開始到輸入結(jié)束時間內(nèi)的消息存儲到一光標(biāo)記錄表中,然后根據(jù)Device ID對消息進 行分類,最后從光標(biāo)記錄表中提取分類后的消息進行分發(fā)。進一步的,所述步驟6)中,將每個目標(biāo)交互設(shè)備的I/O data信息封裝為計算機系 統(tǒng)所能識別的消息的方法為首先從I/O data中分解出目標(biāo)交互設(shè)備的設(shè)備類型信息、坐 標(biāo)類型信息、坐標(biāo)位置信息,然后將其封裝成PEN_DEVICE_INFO結(jié)構(gòu);最后將封裝后的PEN_DEVICE_INF0結(jié)構(gòu)按照計算機系統(tǒng)的消息格式封裝為Windows操作系統(tǒng)所能識別的消息; 其中PEN_DEVICE_INFO結(jié)構(gòu)包括目標(biāo)交互設(shè)備輸入類型、目標(biāo)交互設(shè)備的光標(biāo)位置絕對 值、目標(biāo)交互設(shè)備的光標(biāo)位置變化值。進一步的,所述原語包括點擊原語和筆劃原語;對于點擊原語,將其直接發(fā)送到應(yīng) 用程序的目標(biāo)消息隊列中;對于筆劃原語,利用分類器和設(shè)定的手勢集合,識別出手勢消息 類型后發(fā)送到應(yīng)用程序的目標(biāo)消息隊列中。進一步的,通過連續(xù)兩次調(diào)用GetRawInputDevicelnfo函數(shù)以讀取輸入設(shè)備的 RIDI_DEVICENAME,通過輸入設(shè)備的RIDI_DEVICENAME值過濾出所述目標(biāo)交互設(shè)備。進一步的,所述目標(biāo)交互設(shè)備包括手寫板、手寫屏、鼠標(biāo)。實現(xiàn)本方法的具體模塊結(jié)構(gòu)如圖1所示,包含設(shè)備驅(qū)動層,消息處理層,應(yīng)用層。 這三層之間的關(guān)系是設(shè)備驅(qū)動層在硬件層面上識別各個筆式輸入設(shè)備的消息,過濾成對 應(yīng)于各個設(shè)備自身的消息,該驅(qū)動工作在操作系統(tǒng)對應(yīng)驅(qū)動基礎(chǔ)之上,對筆設(shè)備消息起到 過濾作用,并將過濾之后的消息傳遞到下一層;消息處理層負(fù)責(zé)做兩件事情,首先它會屏蔽 操作系統(tǒng)自身的光標(biāo)繪制,從而根據(jù)設(shè)備驅(qū)動層傳來的消息繪制各個筆設(shè)備的光標(biāo),此外 的功能是對設(shè)備驅(qū)動層過濾后的消息做合成,已使得下一層即應(yīng)用層能夠識別消息。在這 一層合成后的消息與普通的windows操作系統(tǒng)筆設(shè)備消息的區(qū)別是,它帶有附加信息,用 于在應(yīng)用層識別不同的筆設(shè)備標(biāo)識;應(yīng)用層有兩個功能,其一是將上層的消息分發(fā)到目標(biāo) 消息隊列之前,進行沖突檢測和沖突消解,之后將正確的消息發(fā)送到目標(biāo)消息隊列,以驅(qū)動 實際的應(yīng)用程序運行,其二是在上層合成后的消息的基礎(chǔ)上識別出手勢,將識別結(jié)果也以 更高級的消息(自定義級別)發(fā)送到具體的應(yīng)用程序,驅(qū)動這些應(yīng)用完成更高級的功能。本交互方法在單顯示單筆設(shè)備或者單鼠標(biāo)設(shè)備的計算系統(tǒng)上實現(xiàn)了對多筆設(shè)備 的支持,從而可以支持多人同時使用多個筆設(shè)備在單顯示設(shè)備上進行交互。這是多傳統(tǒng)的 計算交互模式的一大擴展,極大的方便了在需要多人同時交互的環(huán)境下的人機交互。由于 本交互方法的易于實現(xiàn)和成本上的相對低廉,所以本交互方法具有很好的普及潛力。在兒 童教學(xué)、會議交流等環(huán)境下,本交互方法的應(yīng)用,將極大增強參與者的協(xié)同合作能力,方便 了他們在單個計算機設(shè)備上共同完成任務(wù)。與現(xiàn)有技術(shù)相比,本發(fā)明具有如下的優(yōu)點和技術(shù)效果1.在單顯示設(shè)備上實現(xiàn)了多筆交互方法。本交互方法在傳統(tǒng)的計算機設(shè)備上實現(xiàn)了多筆交互的支持,是對傳統(tǒng)單顯示單筆 /鼠標(biāo)交互的一大擴展。2.單顯示計算設(shè)備上的多人協(xié)同操作。引入多筆多人同時操作,必然會存在沖突。該多筆交互方法在提供多人多筆交互 的同時,也定義了潛在的沖突檢測方法和相應(yīng)沖突的解決規(guī)則。3.驅(qū)動式軟件支持。本交互方法從硬件層面上做設(shè)備消息過濾進而實現(xiàn)最終的多筆支持。4.簡單易行,無需昂貴硬件設(shè)備支持。本交互方法的實現(xiàn)不需要特別的交互設(shè)備,省去了昂貴的硬件設(shè)備費用。而且簡 單,容易在常用的計算機環(huán)境下實現(xiàn)。


      圖1本交互方法的實現(xiàn)架構(gòu)圖;圖2本交互方法的設(shè)備分析過程圖;圖3本交互方法的實現(xiàn)流程圖;圖4本交互方法的手勢生成與識別流程圖;圖5本交互方法的效果圖。
      具體實施例方式為了使本技術(shù)領(lǐng)域的技術(shù)人員更好的理解,下面結(jié)合附圖和實施方式對本交互方 法作進一步的詳細(xì)說明本發(fā)明的實現(xiàn)流程如圖3所示。首先構(gòu)建設(shè)備驅(qū)動層。如圖1所示,該層接受系統(tǒng) 筆式設(shè)備,鼠標(biāo)等設(shè)備驅(qū)動程序輸出的設(shè)備I/O信息,通過該層的設(shè)備消息過濾驅(qū)動模塊, 對設(shè)備I/O進行初步過濾,分離出各個筆式設(shè)備,鼠標(biāo)設(shè)備的I/O信息,然后以〈Device ID, l/0data>配對方式作為設(shè)備驅(qū)動層輸出結(jié)果。以下詳細(xì)說明設(shè)備驅(qū)動層各模塊的功能(1)筆式設(shè)備輸入模塊筆式設(shè)備是本交互方法的基礎(chǔ),為了實現(xiàn)多個筆式設(shè)備同時操作,需要將接入計 算機系統(tǒng)中的各個筆式設(shè)備,鼠標(biāo)設(shè)備以及其他設(shè)備區(qū)分開來,過濾系統(tǒng)設(shè)備,獲得目標(biāo)交 互設(shè)備信息筆式設(shè)備和鼠標(biāo)設(shè)備(在沒有連接筆式設(shè)備時,鼠標(biāo)設(shè)備也被支持)。1.該模塊枚舉出系統(tǒng)中的所有HID設(shè)備。通過操作系統(tǒng)底層API,取得所有的HID 設(shè)備信息。如圖2所示,這些信息包括系統(tǒng)中的鼠標(biāo),筆式設(shè)備如手寫板,手寫屏,鍵盤設(shè) 備,游戲操作桿等。2.設(shè)備過濾。通過連續(xù)兩次調(diào)用GetRawInputDevicelnfo以讀取設(shè)備的RIDI_ DEVICENAME,通過該值可以判斷當(dāng)前設(shè)備是否為本交互方法所支持的交互設(shè)備,進而過濾 掉不支持的設(shè)備。(2)設(shè)備輸入與監(jiān)聽模塊過濾出筆式交互設(shè)備之后,系統(tǒng)將對這些交互設(shè)備的I/O進行監(jiān)聽。由于這些設(shè) 備都是輸入設(shè)備,實際上就是監(jiān)聽這些設(shè)備的INPUT信息。INPUT信息來源就是來自操作系 統(tǒng)的筆式交互設(shè)備底層驅(qū)動的處理結(jié)果。該模塊只監(jiān)聽(1)中模塊所得到的目標(biāo)交互設(shè)備 的INPUT,然后將這些INPUT傳遞到下一個模塊。1.取得底層交互設(shè)備的輸入。通過調(diào)用GetRawInputData,取得輸入設(shè)備的輸入 信息,并分析設(shè)備類型和ID,與(1)中獲得的設(shè)備進行匹配。2.將INPUT信息傳遞到下一個模塊。(3)筆式消息過濾模塊該模塊獲取來自上層的設(shè)備輸入信息以及設(shè)備信息,對這些信息進行封裝配對, 以〈DevicelD,I/O data)的配對形式作為整個設(shè)備驅(qū)動層的輸出結(jié)果輸出到下一層。在設(shè)備驅(qū)動層構(gòu)建完畢的基礎(chǔ)之上,獲得了帶有設(shè)備ID的設(shè)備輸入信息,即實現(xiàn) 了設(shè)備信息的過濾,做到了在底層區(qū)分各個筆式輸入設(shè)備的輸入信息。下一步就是在此基 礎(chǔ)之上,將上一層所獲得的信息包裝成消息,以驅(qū)動應(yīng)用程序的實際運行;此外另一項工作 是根據(jù)上層設(shè)備輸入信息,繪制各個筆式輸入設(shè)備的光標(biāo)顯示即對于每個筆式輸入設(shè)備,都有一個對應(yīng)的設(shè)備光標(biāo)顯示在單顯示設(shè)備上。這就是消息處理層的主要功能。下面將詳 細(xì)介紹消息處理層各個功能模塊(1)筆式消息分析模塊消息處理層所接收到的從設(shè)備驅(qū)動層傳遞過來的底層設(shè)備輸入信息并不能被 windows應(yīng)用程序所使用,需要以消息的形式發(fā)送到具體的應(yīng)用程序消息循環(huán)隊列中去。在 筆式消息合成模塊,對接收到的上層筆式設(shè)備輸入信息進行解析,按照其中的筆式設(shè)備輸 入數(shù)據(jù)(I/O data)部分進行分類處理。如,上層輸入信息是以〈Device ID, I/O data〉的 形式傳遞過來的,首先需要分離出I/O data,然后對I/O data數(shù)據(jù)結(jié)構(gòu)進行處理,分解出其 中的筆式設(shè)備類型信息、坐標(biāo)類型信息和坐標(biāo)位置信息,封裝成PEN_DEVICE_INFO結(jié)構(gòu)。即 解析成能夠為下一級模塊識別的數(shù)據(jù)結(jié)構(gòu)。這里定義的數(shù)據(jù)結(jié)構(gòu)如下enum INPUTTYPE {MOVE = 0,LBD = 1,RBD = 2,LBU = 4,RBU = 8};Typedef struct PEN_DEVICE_INFO{DWORD uType ;DWORD x ;DWORD y ;DWORD cType ;};解析完畢的1/0 data被包裝成上述數(shù)據(jù)結(jié)構(gòu)的形式,MOVE表示筆或鼠標(biāo)設(shè)備當(dāng) 前狀態(tài)是在移動;LBD表示筆或者鼠標(biāo)設(shè)備當(dāng)前是左鍵按下狀態(tài);RDB表示筆或鼠標(biāo)設(shè)備的 當(dāng)前狀態(tài)是右鍵按下(如果特定的筆設(shè)備沒有右鍵功能,則不會產(chǎn)生此狀態(tài));LBU表示筆 或鼠標(biāo)設(shè)備的當(dāng)前狀態(tài)是左鍵抬起狀態(tài);RBU表示筆或鼠標(biāo)設(shè)備的當(dāng)前狀態(tài)是右鍵抬起狀 態(tài)(同樣,如果特定的筆設(shè)備沒有右鍵功能,也不會產(chǎn)生此狀態(tài))。其中uType是筆式設(shè)備 輸入類型,如筆的移動,按下,抬起等動作,其取值可以是INPUTTYPE類型的組合。由于需要 兼容鼠標(biāo)消息,所以區(qū)分了左右鍵。cType決定了 x,y分量的意義。cType指示x,y分量是 光標(biāo)位置的絕對值還是光標(biāo)位置變化值。(2)筆式消息合成模塊上層設(shè)備信息分析完畢,得到了更高層的接近于消息的設(shè)備動作數(shù)據(jù)結(jié)構(gòu)。進入 筆式消息合成模塊,就可以在此基礎(chǔ)之上完成消息合成任務(wù),組裝出最終能夠被放入到具 體應(yīng)用程序消息循環(huán)隊列中的消息,進而驅(qū)動具體的應(yīng)用程序的消息循環(huán)。在這里,需要同 Windows操作系統(tǒng)的消息機制進行兼容,必須將消息的中間形態(tài)轉(zhuǎn)化成最終的Windows系 統(tǒng)消息形態(tài)。按照Windows系統(tǒng)消息的格式封裝最終的筆式設(shè)備消息。由于Windows操 作系統(tǒng)并不能識別“筆式消息”,而只能識別“鼠標(biāo)消息”,所以無論是來自底層的筆式設(shè)備 的中間形態(tài)輸入信息還是來自實際鼠標(biāo)的中間形態(tài)輸入信息,在筆式消息合成模塊中,都 最終被轉(zhuǎn)化為Windows系統(tǒng)的標(biāo)準(zhǔn)鼠標(biāo)消息類型。該模塊所處的消息處理層以及應(yīng)用層實 際是一個Windows全局鉤子(Global Hook),可以在這里攔截到所有來自底層驅(qū)動模塊發(fā) 送來的數(shù)據(jù),以及這些數(shù)據(jù)所要到達(dá)的目標(biāo)句柄(hwnd)。在經(jīng)過上述處理模塊處理之后, 符合系統(tǒng)要求的消息已經(jīng)形成,同時獲得了設(shè)備ID信息。通過SetMessageExtralnfo,將 當(dāng)前的活動筆式輸入設(shè)備ID作為附加信息設(shè)置到目標(biāo)消息隊列的附加數(shù)據(jù)中(應(yīng)用程序 具有多個窗口,每個窗口有一個消息隊列,在不同窗口操作的目標(biāo)交互設(shè)備的ID信息需要發(fā)送到相應(yīng)窗口的消息隊列中,即目標(biāo)消息隊列)。之所以要將設(shè)備ID作為附加數(shù)據(jù)送到 目標(biāo)消息隊列,是因為標(biāo)準(zhǔn)的Windows消息只包含指點輸入設(shè)備(鼠標(biāo),筆式設(shè)備,觸摸屏 等)輸入進來的光標(biāo)位置信息而去掉了具體設(shè)備信息,而要實現(xiàn)多個筆式輸入設(shè)備同時操 作,必須再加入具體設(shè)備ID才能將各個設(shè)備的光標(biāo)位置信息和設(shè)備本身關(guān)聯(lián)起來。這樣, 在實際的應(yīng)用程序響應(yīng)該消息的時候,就可以通過GetMessageExtralnfo獲得相應(yīng)的設(shè)備 ID,從而實際區(qū)分出各個筆式輸入設(shè)備。(3)筆式消息傳遞模塊當(dāng)所有消息合成工作做完之后,消息處理層的消息需要傳遞到下一層中進行進一 步的處理。由于在下一層需要做兩個大方面的工作,所以需要這一模塊將筆式消息合成模 塊所產(chǎn)生的消息分別傳遞到下一層兩個不同功能模塊當(dāng)中進行處理。(4)多筆光標(biāo)顯示模塊在普通的Windows系統(tǒng)下,無論硬件設(shè)備上接入多少筆式設(shè)備,鼠標(biāo)等,其顯示設(shè) 備始終只會顯示一個光標(biāo)。這是由Windows操作系統(tǒng)本身的特性決定的。要支持多筆交互, 在接入了多個筆式輸入設(shè)備的前提下,還需要相應(yīng)的對每一個設(shè)備在顯示設(shè)備上顯示出與 之想匹配的光標(biāo),以引導(dǎo)用戶操作筆式設(shè)備進行自然的交互。要實現(xiàn)顯示多個光標(biāo),首先需 要做的是隱藏系統(tǒng)光標(biāo)。然后,該模塊根據(jù)來自設(shè)備驅(qū)動層的原始筆式設(shè)備輸入數(shù)據(jù),以及 消息處理層處理后的消息,取得每一個筆式輸入設(shè)備的狀態(tài)信息當(dāng)前絕對位置,偏移量, 設(shè)備按鍵狀態(tài)。最后,根據(jù)這些筆式交互設(shè)備狀態(tài)信息,繪制出各個筆式交互設(shè)備的最終光 標(biāo)顯示。繪制的方法是a,載入初始注冊信息。這個注冊信息是在本交互方法的實現(xiàn)配置 文件中記錄的。內(nèi)容是光標(biāo)資源的位置,各個狀態(tài)的光標(biāo)資源的定義。b,對每一個筆式輸 入設(shè)備,分配與其狀態(tài)相對應(yīng)的光標(biāo)資源,并在顯示設(shè)備上繪制出光標(biāo)。光標(biāo)的繪制采用不 規(guī)則Windows窗口繪制方法,以避免頻繁移動光標(biāo)所產(chǎn)生的閃爍現(xiàn)象。本交互方法的光標(biāo)顯示模塊的實現(xiàn)效果如圖5所示,在應(yīng)用程序的窗口中有兩個 按鈕按鈕1和按鈕2。系統(tǒng)接入了 3個筆式交互設(shè)備,那么就可以在顯示設(shè)備上看到3個 光標(biāo)(光標(biāo)廣3),分別對應(yīng)相應(yīng)的筆式交互設(shè)備。這3個筆式交互設(shè)備可以同時操作該應(yīng) 用程序界面,如圖中所示,光標(biāo)1在窗口中移動,光標(biāo)2和光標(biāo)3分別點擊按鈕1和按鈕2。 每個操作筆式交互設(shè)備的用戶都可以按照自己的意圖完成自己預(yù)想的操作而不會被別人 干擾。應(yīng)用層有兩大功能沖突檢測與消解和手勢識別。它們的輸出都是Windows消息 類型,即將處理結(jié)果以消息的形式放到應(yīng)用程序消息隊列中去,驅(qū)動應(yīng)用程序運行。沖突檢 測與消解建立在沖突檢測規(guī)則以及沖突消解算法的基礎(chǔ)之上。應(yīng)用層接收消息處理層傳遞 過來的消息,經(jīng)過上述兩大模塊的處理,最終輸出處理完畢的消息到應(yīng)用程序消息隊列中; 手勢識別建立在自定義手勢消息以及訓(xùn)練好的手勢庫和分類器的基礎(chǔ)之上。以下將詳細(xì)說 明各個子模塊的功能(1)沖突檢測與消解模塊本交互方法使用了多個筆式交互設(shè)備,允許這些筆式交互設(shè)備同時操作。在這些 筆式設(shè)備進行實際操作的時候,通常會產(chǎn)生沖突。比如,兩個筆設(shè)備同時操作一個窗口,由 于操作方式不同,這時需確定允許哪個設(shè)備操作,禁止哪個設(shè)備操作。沖突產(chǎn)生的根源在于 有兩個以上的筆式交互設(shè)備請求對同一個交互元素進行操作。所進行的操作可能是相同類型的操作,也可能是不同類型的操作。在這些情況下,沖突是可能產(chǎn)生而不是必然產(chǎn)生。因 此需要建立一組沖突檢測規(guī)則,對這些可能的沖突進行檢測;再依據(jù)相應(yīng)規(guī)則下的沖突消 解策略發(fā)生的沖突進行消解。這個檢測和消解的過程為上層的消息首先進入沖突檢測單 元,這個單元存儲有在最近一段很短的時間內(nèi)(300ms)所有筆式交互設(shè)備的消息,基于這 些消息數(shù)據(jù),以及預(yù)定義的沖突檢測規(guī)則,可以檢測出最新的筆設(shè)備消息是否與已有的筆 設(shè)備消息沖突。沖突檢測規(guī)則有a.資源競爭檢測,即檢測是否有多個筆式設(shè)備操作同一 系統(tǒng)資源(如窗口,按鈕等),其判斷方法是測試所有筆式設(shè)備對系統(tǒng)資源的請求,如果在 同一時刻有兩個以上的筆式設(shè)備同時請求一個系統(tǒng)資源則判定為資源競爭沖突。b.操作 沖突檢測,即檢測不同筆式設(shè)備操作之間是否存在操作意圖沖突,其判斷方法是測試所有 筆式設(shè)備的當(dāng)前操作,如果檢測到在同一時刻有兩個以上的目標(biāo)交互設(shè)備進行相互對立的 操作,則判定為操作沖突。由于消息沖突意味著筆設(shè)備交互時的沖突,從而也就檢測出了 筆設(shè)備交互的沖突;沖突檢測單元的檢測結(jié)果進入到?jīng)_突消解單元,如果上一單元沒有檢 測到?jīng)_突,則筆消息直接通過沖突消解單元,如果檢測到?jīng)_突,則根據(jù)規(guī)則庫中的沖突消解 規(guī)則,決定是否允許通過當(dāng)前的筆消息。與沖突檢測規(guī)則對于的沖突消解規(guī)則有a.資源 競爭沖突消解,其消解原則是根據(jù)設(shè)備ID的順序,優(yōu)先滿足ID號靠前的筆式設(shè)備的資源請 求。b.操作沖突消解,其消解原則是將相互對立的并行操作分解,按ID順序串行依次執(zhí)行 各個設(shè)備的當(dāng)前請求操作。(2)手勢分析處理模塊如圖4所示,手勢處理模塊接收上層的輸入消息,經(jīng)過模塊內(nèi)部,根據(jù)設(shè)備ID進行 數(shù)據(jù)分發(fā),提取設(shè)備光標(biāo)位置信息更新光標(biāo)記錄,根據(jù)光標(biāo)記錄中的光標(biāo)位置數(shù)據(jù)產(chǎn)生原 語;使用分類器以及預(yù)定義手勢集合,經(jīng)過手勢識別子過程識別出各個筆設(shè)備的手勢類型; 通過上述處理之后,輸出自定義的手勢消息類型,加入到應(yīng)用程序的目標(biāo)消息隊列。首先上層消息處理層傳遞過來的消息經(jīng)過預(yù)提取,進入數(shù)據(jù)分發(fā)單元。因為手勢 識別的過程是對最近一段時間內(nèi),從筆設(shè)備按下到抬起這個過程中的消息數(shù)據(jù)的識別,分 類,處理過程,所以在識別開始的時候就需要經(jīng)過數(shù)據(jù)分發(fā)單元將當(dāng)前數(shù)據(jù)存儲到光標(biāo)記 錄中。這樣在光標(biāo)記錄中存儲有當(dāng)前識別過程中的所有光標(biāo)數(shù)據(jù)。數(shù)據(jù)分發(fā)單元還要提取 光標(biāo)記錄中的所有數(shù)據(jù),將這些數(shù)據(jù)傳遞到下一處理單元。此外,在這一過程中,對于筆設(shè) 備的移動,需要實時更新光標(biāo)顯示,所以需要將相應(yīng)的手勢消息傳遞到光標(biāo)顯示模塊中。原語生成單元接收上一單元傳遞過來的當(dāng)前手勢數(shù)據(jù)集合。根據(jù)這一集合,原語 產(chǎn)生單元產(chǎn)生兩種基本的筆原語Tap (點擊)和Stroke (筆劃)。對于Tap原語,直接輸出相 應(yīng)的筆消息類型,加入到應(yīng)用程序消息隊列中去,由應(yīng)用程序做進一步處理;對于Stroke 原語,則需要經(jīng)過手勢識別單元做進一步識別,以產(chǎn)生最終的手勢消息。末端的手勢識別單元接收Stroke原語,使用預(yù)定義的分類器對當(dāng)前的Stroke進 行分類,從手勢集合中找出與當(dāng)前Stroke的最佳匹配。根據(jù)不同的匹配結(jié)果,輸出不同的 手勢消息類型。這些手勢消息類型最終也被加入到應(yīng)用程序的目標(biāo)消息隊列,由應(yīng)用程序 做相應(yīng)的處理。分類器的功能是根據(jù)輸入的筆跡信息產(chǎn)生相應(yīng)的手勢識別結(jié)果,分類器通 過前期的樣本訓(xùn)練,在訓(xùn)練的基礎(chǔ)上得到一個能夠真正使用的分類器。上述所有模塊實現(xiàn)完畢之后,生成一個驅(qū)動文件,一份動態(tài)鏈接庫以及相應(yīng)的API 頭文件。如果用戶需要在本交互方法的實現(xiàn)上做進一步開發(fā),就可以基于API進行相應(yīng)的SDK開發(fā),實現(xiàn)應(yīng)用相關(guān)的基于多筆交互的應(yīng)用程序。
      權(quán)利要求
      一種單顯示多筆交互方法,其步驟為1)計算機系統(tǒng)從識別出的各輸入設(shè)備中過濾出若干目標(biāo)交互設(shè)備;2)計算機系統(tǒng)對每個目標(biāo)交互設(shè)備的I/O端口進行監(jiān)聽,獲得每個目標(biāo)交互設(shè)備的信息對Device ID和I/O data;其中,Device ID為目標(biāo)交互設(shè)備的ID,I/O data為目標(biāo)交互設(shè)備輸入信息;3)計算機系統(tǒng)隱藏系統(tǒng)光標(biāo),并根據(jù)目標(biāo)交互設(shè)備的信息繪制每個目標(biāo)交互設(shè)備的光標(biāo);4)將每個目標(biāo)交互設(shè)備的I/O data信息封裝為Windows操作系統(tǒng)所能識別的消息,并將Device ID作為附加數(shù)據(jù)發(fā)送到應(yīng)用程序的目標(biāo)消息隊列中;5)根據(jù)Device ID對步驟4)封裝后的消息進行分發(fā),并提取光標(biāo)位置信息更新目標(biāo)交互設(shè)備的光標(biāo)顯示;6)根據(jù)預(yù)定義的沖突檢測規(guī)則對消息進行沖突檢測,如果存在沖突則利用預(yù)定義的沖突消解規(guī)則對沖突消息進行消解;7)根據(jù)步驟6)處理后的消息生成目標(biāo)交互設(shè)備的原語;8)根據(jù)原語生成目標(biāo)交互設(shè)備的手勢消息類型,發(fā)送到應(yīng)用程序的目標(biāo)消息隊列;9)應(yīng)用程序根據(jù)接收的Device ID數(shù)據(jù)和手勢消息類型,驅(qū)動相應(yīng)的目標(biāo)交互設(shè)備。
      2.如權(quán)利要求1所述的方法,其特征在于所述預(yù)定義的沖突檢測規(guī)則包括a)資源競 爭檢測,即測試所有目標(biāo)交互設(shè)備對系統(tǒng)資源的請求,如果在同一時刻有兩個以上的目標(biāo) 交互設(shè)備同時請求一個系統(tǒng)資源,則判定為存在資源競爭沖突;b)操作沖突檢測,即測試 所有目標(biāo)交互設(shè)備的當(dāng)前操作,如果檢測到在同一時刻有兩個以上的目標(biāo)交互設(shè)備進行相 互對立的操作,則判定為存在操作沖突。
      3.如權(quán)利要求2所述的方法,其特征在于所述預(yù)定義的沖突消解規(guī)則包括a)資源競 爭沖突消解,即根據(jù)設(shè)備的Device ID順序執(zhí)行目標(biāo)交互設(shè)備的資源請求;b)操作沖突消 解,即將相互對立的并行操作分解,按Device ID順序串行依次執(zhí)行各個目標(biāo)交互設(shè)備的當(dāng) 前操作請求。
      4.如權(quán)利要求1所述的方法,其特征在于繪制目標(biāo)交互設(shè)備的光標(biāo)的方法為1)載入初始注冊信息;其中初始注冊信息包括光標(biāo)資源的位置、各個狀態(tài)的光標(biāo)資 源的定義;2)對每一個目標(biāo)交互設(shè)備,分配與其狀態(tài)相對應(yīng)的光標(biāo)資源,并在顯示設(shè)備上繪制出 該設(shè)備的光標(biāo)。
      5.如權(quán)利要求1或4所述的方法,其特征在于采用不規(guī)則Windows窗口繪制方法繪制 光標(biāo)。
      6.如權(quán)利要求1所述的方法,其特征在于所述步驟5)中,進行消息分發(fā)的方法為首 先將每個目標(biāo)交互設(shè)備從輸入開始到輸入結(jié)束時間內(nèi)的消息存儲到一光標(biāo)記錄表中,然后 根據(jù)Device ID對消息進行分類,最后從光標(biāo)記錄表中提取分類后的消息進行分發(fā)。
      7.如權(quán)利要求1所述的方法,其特征在于所述步驟6)中,將每個目標(biāo)交互設(shè)備的I/O data信息封裝為計算機系統(tǒng)所能識別的消息的方法為首先從I/O data中分解出目標(biāo)交 互設(shè)備的設(shè)備類型信息、坐標(biāo)類型信息、坐標(biāo)位置信息,然后將其封裝成PEN_DEVICE_INFO 結(jié)構(gòu);最后將封裝后的PEN_DEVICE_INFO結(jié)構(gòu)按照Windows操作系統(tǒng)的消息格式封裝為計算機系統(tǒng)所能識別的消息;其中PEN_DEVICE_INFO結(jié)構(gòu)包括目標(biāo)交互設(shè)備輸入類型、目標(biāo) 交互設(shè)備的光標(biāo)位置絕對值、目標(biāo)交互設(shè)備的光標(biāo)位置變化值。
      8.如權(quán)利要求1所述的方法,其特征在于所述原語包括點擊原語和筆劃原語;對于點 擊原語,將其直接發(fā)送到應(yīng)用程序的目標(biāo)消息隊列中;對于筆劃原語,利用分類器和設(shè)定的 手勢集合,識別出手勢消息類型后發(fā)送到應(yīng)用程序的目標(biāo)消息隊列中。
      9.如權(quán)利要求1所述的方法,其特征在于通過連續(xù)兩次調(diào)用GetRawInputDevicelnfo 函數(shù)以讀取輸入設(shè)備的RIDI_DEVICENAME,通過輸入設(shè)備的RIDI_DEVICENAME值過濾出所 述目標(biāo)交互設(shè)備。
      10.如權(quán)利要求1或9所述的方法,其特征在于所述目標(biāo)交互設(shè)備包括手寫板、手寫 屏、鼠標(biāo)。
      全文摘要
      本發(fā)明公開了一種單顯示多筆交互方法,屬于人機交互領(lǐng)域。本方法為1)計算機系統(tǒng)中過濾出若干目標(biāo)交互設(shè)備,并獲取每個目標(biāo)交互設(shè)備的信息對ID和I/O data;2)隱藏系統(tǒng)光標(biāo),并繪制每個目標(biāo)交互設(shè)備的光標(biāo);3)對I/O data信息進行封裝,并將ID作為附加數(shù)據(jù)發(fā)送到目標(biāo)消息隊列中;4)根據(jù)ID對封裝后的消息進行分發(fā),并更新光標(biāo)顯示;5)對消息進行沖突檢測與消解;6)生成目標(biāo)交互設(shè)備的原語,并根據(jù)原語生成目標(biāo)交互設(shè)備的手勢消息類型,發(fā)送到應(yīng)用程序的目標(biāo)消息隊列;7)應(yīng)用程序根據(jù)接收的ID數(shù)據(jù)和手勢消息類型,驅(qū)動相應(yīng)的目標(biāo)交互設(shè)備。本發(fā)明在提供多人多筆交互的同時,也定義了潛在的沖突檢測與消解方法,且操作簡單、易于實現(xiàn)。
      文檔編號G06F3/048GK101853129SQ20101018081
      公開日2010年10月6日 申請日期2010年5月18日 優(yōu)先權(quán)日2010年5月18日
      發(fā)明者戴國忠, 王丹力, 王宏安, 詹志征 申請人:中國科學(xué)院軟件研究所
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1