專利名稱:一種窗口切換方法及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及多窗口操作技術(shù)領(lǐng)域,尤其涉及一種窗口切換方法和一種窗口切換裝置。
背景技術(shù):
目前,實(shí)現(xiàn)應(yīng)用程序窗口切換的方法主要有下面兩種:一種是在Windows下通過鍵盤執(zhí)行alt+tab (alt鍵組合tab鍵使用)根據(jù)系統(tǒng)進(jìn)程列表調(diào)出當(dāng)前窗口列表,從而實(shí)現(xiàn)進(jìn)行窗口切換,但這個(gè)需依賴鍵盤操作,在沒有鍵盤時(shí)不能執(zhí)行這操作。第二種是使用程序模擬鍵盤操作向系統(tǒng)發(fā)送模擬鍵盤消息實(shí)現(xiàn)鍵盤切換,卻容易出現(xiàn)切換窗口不成功情況,如執(zhí)行切換窗口命令后待切換的目標(biāo)窗口沒有被置前。同時(shí)操作時(shí)易受系統(tǒng)其它程序的窗口的影響,致使無法切換到系統(tǒng)輸入法等系統(tǒng)內(nèi)部窗口等問題。還可能會因操作系統(tǒng)停止響應(yīng)的進(jìn)程阻塞的影響,切換過程長時(shí)間延遲,影響用戶體驗(yàn)。因此,增強(qiáng)窗口切換實(shí)時(shí)性,提高窗口切換成功率成為一個(gè)迫切需要解決的問題。
發(fā)明內(nèi)容
基于此,本發(fā)明提供了一種窗口切換方法和一種窗口切換裝置。一種窗口切換方法,包括以下步驟:實(shí)時(shí)判斷當(dāng)前系統(tǒng)的置前窗口是否符合預(yù)設(shè)切換條件,如果符合則將其窗口指針添加至窗口數(shù)據(jù)鏈表中;循環(huán)讀取第一列表中記錄的用戶的窗口切換請求,每讀取到一次窗口切換請求,則從所述窗口數(shù)據(jù)鏈表中獲取最近一次置前窗口的窗口指針;如果獲取的最近一次置前窗口的窗口指針有效,則將該窗口指針添加至第二列表中;循環(huán)讀取所述第二列表中的窗口指針,將相應(yīng)的窗口置前。與一般技術(shù)相比,本發(fā)明窗口切換方法可記錄最近的焦點(diǎn)窗口,采用輪詢的方法,能夠分離查詢線程和響應(yīng)線程進(jìn)行后臺程序切換窗口。減少了其它系統(tǒng)程序?qū)Υ翱谇袚Q的影響,提高了窗口切換的實(shí)時(shí)性,同時(shí)能大大提高窗口切換的成功率。一種窗口切換裝置,包括窗口記錄模塊、輪詢模塊和響應(yīng)模塊;所述窗口記錄模塊,用于實(shí)時(shí)判斷當(dāng)前系統(tǒng)的置前窗口是否符合預(yù)設(shè)切換條件,如果符合則將其窗口指針添加至窗口數(shù)據(jù)鏈表中;所述輪詢模塊,用于循環(huán)讀取第一列表中記錄的用戶的窗口切換請求,每讀取到一次窗口切換請求,則從所述窗口數(shù)據(jù)鏈表中獲取最近一次置前窗口的窗口指針;如果獲取的最近一次置前窗口的窗口指針有效,則所述輪詢模塊將該窗口指針添加至第二列表中;所述響應(yīng)模塊,用于循環(huán)讀取所述第二列表中的窗口指針,將相應(yīng)的窗口置前。
與一般技術(shù)相比,本發(fā)明窗口切換裝置可記錄最近的焦點(diǎn)窗口,采用輪詢的方法,能夠分離查詢線程和響應(yīng)線程進(jìn)行后臺程序切換窗口。減少了其它系統(tǒng)程序?qū)Υ翱谇袚Q的影響,提高了窗口切換的實(shí)時(shí)性,同時(shí)能大大提高窗口切換的成功率。
圖1為本發(fā)明窗口切換方法的流程示意圖;圖2為應(yīng)用本發(fā)明窗口切換方法的一個(gè)優(yōu)選實(shí)施例的工作原理圖;圖3為本發(fā)明窗口切換裝置的結(jié)構(gòu)示意圖。
具體實(shí)施例方式為更進(jìn)一步闡述本發(fā)明所采取的技術(shù)手段及取得的效果,下面結(jié)合附圖及較佳實(shí)施例,對本發(fā)明的技術(shù)方案,進(jìn)行清楚和完整的描述。請參閱圖1,為本發(fā)明窗口切換方法的流程示意圖。本發(fā)明窗口切換方法,包括以下步驟:SlOl實(shí)時(shí)判斷當(dāng)前系統(tǒng)的置前窗口是否符合預(yù)設(shè)切換條件,如果符合則將其窗口指針添加至窗口數(shù)據(jù)鏈表中;作為其中一個(gè)實(shí)施例,以預(yù)設(shè)時(shí)間段為周期,循環(huán)獲取當(dāng)前系統(tǒng)的置前窗口的窗口句柄;根據(jù)獲取的所述窗口句柄判斷該窗口是否符合預(yù)設(shè)切換條件。作為其中一個(gè)實(shí)施例,所述預(yù)設(shè)時(shí)間段為20毫秒。系統(tǒng)運(yùn)行時(shí)的窗口記錄部分,在盡量減少系統(tǒng)資源占用和避免錯(cuò)漏窗口記錄,通過判定最優(yōu)時(shí)間TO間,使用線程按TO查詢當(dāng)前系統(tǒng)激活窗口,獲取到窗口句柄后判斷該窗口是否符合切換窗口條件H),符合條件的窗口將窗口指針更新進(jìn)窗口數(shù)據(jù)鏈表中。TO的時(shí)間按下值計(jì)算:人眼的殘影現(xiàn)象,對顯示圖像變化超24幀/秒人眼是分辨不出來的,因此T0〈(1/24)秒;對鍵盤或鼠標(biāo)的點(diǎn)擊速度一般只到300次/分鐘,如鍵盤組合鍵(alt+tab)只能達(dá)約100/分鐘,Τ0<(1/24)秒可滿足用戶通過鍵盤鼠標(biāo)操作的窗口切換;對窗口查詢的操作進(jìn)行越快,則系統(tǒng)需更多時(shí)間處理查詢操作,即窗口記錄的線程周期越慢則總體系統(tǒng)運(yùn)行的效率越高。因此,可將(1/24)的周期加快2倍,使用1/50秒即20毫秒以滿足系統(tǒng)使用。條件H)按下條件篩選:當(dāng)如窗口是否己是鏈表頂層窗口,是則不處理;當(dāng)前窗口是否系統(tǒng)桌面子窗口或菜單或提示信息窗口,是則不處理;當(dāng)前窗口符合用戶自主篩選的排除窗口,如響應(yīng)模塊生成的窗口 W,是則不處理。S102循環(huán)讀取第一列表中記錄的用戶的窗口切換請求,每讀取到一次窗口切換請求,則從所述窗口數(shù)據(jù)鏈表中獲取最近一次置前窗口的窗口指針;可使用共享鎖Lock輔助線程輪詢處理,如果鎖Lock為鎖定狀態(tài),則只記錄用戶切換窗口請求到第一列表Listl。如鎖Lock為開鎖狀態(tài),可啟動(dòng)線程按TO速度循環(huán)讀取記錄用戶的切換窗口請求的第一列表Listl,讀取到請求,則從窗口數(shù)據(jù)鏈表取出上次置前激活窗口指針P。
S103如果獲取的最近一次置前窗口的窗口指針有效,則將該窗口指針添加至第二列表中;作為其中一個(gè)實(shí)施例,如果獲取的最近一次置前窗口的窗口指針非空,窗口屬性不是隱藏狀態(tài),并且窗口大小不為零,則判斷該窗口指針有效,將其添加至第二列表中。作為其中一個(gè)實(shí)施例,在從窗口數(shù)據(jù)鏈表中獲取最近一次置前窗口的窗口指針之后,如果獲取的最近一次置前窗口的窗口指針無效,則從所述窗口數(shù)據(jù)鏈表中刪除該窗口指針。如指針P有效Fl則指針發(fā)送到待響應(yīng)模塊待置前激活窗口列表,即第二列表List2,并將鎖Lock鎖定,否則從窗口數(shù)據(jù)鏈表冊除此窗口指針,依次按窗口數(shù)據(jù)鏈表向前取上次的激活指針進(jìn)行處理。窗口有效性Fl的條件可為:窗口指針P非空,窗口仍存在;窗口屬性不是隱藏狀態(tài);窗口大小不為O。S104循環(huán)讀取所述第二列表中的窗口指針,將相應(yīng)的窗口置前。初始化時(shí)在用戶可見顯示區(qū)外生成一大小為1*1的窗口 W,作為激活窗口時(shí)的輔助窗口,并設(shè)為隱藏狀態(tài)。初始化時(shí)另啟動(dòng)線程按TO速度循環(huán)讀取待置前激活窗口列表,即第二列表List2,如Lock狀態(tài)為開鎖,程序讀取到請求后執(zhí)行窗口置前操作P,完成后將鎖Lock設(shè)為開鎖狀態(tài)。窗口置前操作P共有3部分:使用系統(tǒng)API設(shè)置窗口置前;如上述I設(shè)置失敗,則先設(shè)置窗口 W置前,再將待置前窗口用系統(tǒng)API執(zhí)行置前激活操作;如待置前窗口無響應(yīng),則響應(yīng)模塊等待I秒鐘后該窗口無法置前,則將本次切換動(dòng)作請求丟棄,等待下次切換請求。優(yōu)選地,可在PC上增加一個(gè)按鍵裝置,按鍵被用戶激活后執(zhí)行切換操作,每次點(diǎn)擊按鍵后將上次的置前激活窗口置前。響應(yīng)時(shí)間小于0.1秒。優(yōu)選地,可在PC上接收一個(gè)接收切換程序的服務(wù),接收到網(wǎng)絡(luò)發(fā)送到的切換消息或用戶其它進(jìn)程的切換消息,則執(zhí)行窗口切換操作。請參閱圖2,為應(yīng)用本發(fā)明窗口切換方法的一個(gè)優(yōu)選實(shí)施例的工作原理圖。各模塊調(diào)用關(guān)系如該圖所示。與一般技術(shù)相比,本發(fā)明窗口切換方法可記錄最近的焦點(diǎn)窗口,采用輪詢的方法,能夠分離查詢線程和響應(yīng)線程進(jìn)行后臺程序切換窗口。減少了其它系統(tǒng)程序?qū)Υ翱谇袚Q的影響,提高了窗口切換的實(shí)時(shí)性,同時(shí)能大大提高窗口切換的成功率。本發(fā)明是通過記錄最近焦點(diǎn)窗口來進(jìn)行后臺程序切換窗口,從而大大提高窗口有效窗口的切換率,并且能有效避免切換到系統(tǒng)窗口而非用戶所期望的窗口的問題。依賴鏈表判斷是否符合切換條件的窗口,提高有效窗口的切換率。對用戶切換請求和響應(yīng)請求使用獨(dú)立的處理模塊執(zhí)行,響應(yīng)模塊超時(shí)不影響輪詢模塊記錄用戶的切換請求。使用一個(gè)輔助窗口提高置前激活窗口的成功率。請參閱圖3,為本發(fā)明窗口切換裝置的結(jié)構(gòu)示意圖。本發(fā)明窗口切換裝置,包括窗口記錄模塊301、輪詢模塊302和響應(yīng)模塊303 ;
所述窗口記錄模塊301,用于實(shí)時(shí)判斷當(dāng)前系統(tǒng)的置前窗口是否符合預(yù)設(shè)切換條件,如果符合則將其窗口指針添加至窗口數(shù)據(jù)鏈表中;作為其中一個(gè)實(shí)施例,所述窗口記錄模塊301以預(yù)設(shè)時(shí)間段為周期,循環(huán)獲取當(dāng)前系統(tǒng)的置前窗口的窗口句柄;并根據(jù)獲取的所述窗口句柄判斷該窗口是否符合預(yù)設(shè)切換條件。作為其中一個(gè)實(shí)施例,所述預(yù)設(shè)時(shí)間段為20毫秒。窗口記錄模塊:系統(tǒng)運(yùn)行時(shí)的窗口記錄部分,在盡量減少系統(tǒng)資源占用和避免錯(cuò)漏窗口記錄,通過判定最優(yōu)時(shí)間TO間,使用線程按TO查詢當(dāng)前系統(tǒng)激活窗口,獲取到窗口句柄后判斷該窗口是否符合切換窗口條件H),符合條件的窗口將窗口指針更新進(jìn)窗口數(shù)據(jù)鏈表中。所述輪詢模塊302,用于循環(huán)讀取第一列表中記錄的用戶的窗口切換請求,每讀取到一次窗口切換請求,則從所述窗口數(shù)據(jù)鏈表中獲取最近一次置前窗口的窗口指針;輪詢模塊使用共享鎖Lock輔助線程輪詢處理,如果鎖Lock為鎖定狀態(tài),則輪詢模塊只記錄用戶切換窗口請求到列表Listl,如鎖Lock為開鎖狀態(tài),輪詢模塊初始化后啟動(dòng)線程按TO速度循環(huán)讀取記錄用戶的切換窗口請求的列表Listl,讀取到請求,則從窗口數(shù)據(jù)鏈表取出上次置前激活窗口指針P,如指針P有效Fl則指針發(fā)送到待響應(yīng)模塊待置前激活窗口列表List2,并將鎖Lock鎖定,否則從窗口數(shù)據(jù)鏈表冊除此窗口指針,依次按窗口數(shù)據(jù)鏈表向前取上次的激活指針進(jìn)行處理。如果獲取的最近一次置前窗口的窗口指針有效,則所述輪詢模塊302將該窗口指針添加至第二列表中;作為其中一個(gè)實(shí)施例,如果獲取的最近一次置前窗口的窗口指針無效,則所述輪詢模塊302從所述窗口數(shù)據(jù)鏈表中刪除該窗口指針。作為其中一個(gè)實(shí)施例,如果獲取的最近一次置前窗口的窗口指針非空,窗口屬性不是隱藏狀態(tài),并且窗口大小不為零,則所述輪詢模塊302判斷該窗口指針有效,將其添加至第二列表中。所述響應(yīng)模塊303,用于循環(huán)讀取所述第二列表中的窗口指針,將相應(yīng)的窗口置
N /.刖。響應(yīng)模塊初始化時(shí)在用戶可見顯示區(qū)外生成一大小為1*1的窗口 W,作為激活窗口時(shí)的輔助窗口,并設(shè)為隱藏狀態(tài)。響應(yīng)模塊初始化時(shí)另啟動(dòng)線程按TO速度循環(huán)讀取待置前激活窗口列表List2,如Lock狀態(tài)為開鎖,程序讀取到請求后執(zhí)行窗口置前操作P,完成后將鎖Lock設(shè)為開鎖狀態(tài)。窗口置前操作P共有3部分:使用系統(tǒng)API設(shè)置窗口置前;如上述I設(shè)置失敗,則先設(shè)置窗口 W置前,再將待置前窗口用系統(tǒng)API執(zhí)行置前激活操作;如待置前窗口無響應(yīng),則響應(yīng)模塊等待I秒鐘后該窗口無法置前,則將本次切換動(dòng)作請求丟棄,等待下次切換請求。本發(fā)明由3個(gè)部分組成,窗口記錄模塊,輪詢模塊和響應(yīng)模塊。其中窗口記錄模塊記錄當(dāng)前置前窗口到窗口數(shù)據(jù)鏈表,由輪詢模塊查詢調(diào)用,當(dāng)輪詢模塊接收到切換命令時(shí),確定待切換窗口后,發(fā)送消息給響應(yīng)模塊實(shí)現(xiàn)窗口切換。與一般技術(shù)相比,本發(fā)明窗口切換裝置可記錄最近的焦點(diǎn)窗口,采用輪詢的方法,能夠分離查詢線程和響應(yīng)線程進(jìn)行后臺程序切換窗口。減少了其它系統(tǒng)程序?qū)Υ翱谇袚Q的影響,提高了窗口切換的實(shí)時(shí)性,同時(shí)能大大提高窗口切換的成功率。以上所述實(shí)施例僅表達(dá)了本發(fā)明的幾種實(shí)施方式,其描述較為具體和詳細(xì),但并不能因此而理解為對本發(fā)明專利范圍的限制。應(yīng)當(dāng)指出的是,對于本領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明構(gòu)思的前提下,還可以做出若干變形和改進(jìn),這些都屬于本發(fā)明的保護(hù)范圍。因此,本發(fā)明專利的保護(hù)范圍應(yīng)以所附權(quán)利要求為準(zhǔn)。
權(quán)利要求
1.一種窗口切換方法,其特征在于,包括以下步驟: 實(shí)時(shí)判斷當(dāng)前系統(tǒng)的置前窗口是否符合預(yù)設(shè)切換條件,如果符合則將其窗口指針添加至窗口數(shù)據(jù)鏈表中; 循環(huán)讀取第一列表中記錄的用戶的窗口切換請求,每讀取到一次窗口切換請求,則從所述窗口數(shù)據(jù)鏈表中獲取最近一次置前窗口的窗口指針; 如果獲取的最近一次置前窗口的窗口指針有效,則將該窗口指針添加至第二列表中; 循環(huán)讀取所述第二列表中的窗口指針,將相應(yīng)的窗口置前。
2.根據(jù)權(quán)利要求1所述的窗口切換方法,其特征在于,所述實(shí)時(shí)判斷當(dāng)前系統(tǒng)的置前窗口是否符合預(yù)設(shè)切換條件的步驟,包括以下步驟: 以預(yù)設(shè)時(shí)間段為周期,循環(huán)獲取當(dāng)前系統(tǒng)的置前窗口的窗口句柄; 根據(jù)獲取的所述窗口句柄判斷該窗口是否符合預(yù)設(shè)切換條件。
3.根據(jù)權(quán)利要求2所述的窗口切換方法,其特征在于,所述預(yù)設(shè)時(shí)間段為20毫秒。
4.根據(jù)權(quán)利要求1所述的窗口切換方法,其特征在于,在所述從窗口數(shù)據(jù)鏈表中獲取最近一次置前窗口的窗口指針的步驟之后,包括以下步驟: 如果獲取的最近一次置前窗口的窗口指針無效,則從所述窗口數(shù)據(jù)鏈表中刪除該窗口指針。
5.根據(jù)權(quán)利要求1所述的窗口切換方法,其特征在于,所述如果獲取的最近一次置前窗口的窗口指針有效,則將該窗口指針添加至第二列表中的步驟,包括以下步驟: 如果獲取的最近一次置前窗口的窗口指針非空,窗口屬性不是隱藏狀態(tài),并且窗口大小不為零,則判斷該窗口指針有效,將其添加至第二列表中。
6.一種窗口切換裝置,其特征在于,包括窗口記錄模塊、輪詢模塊和響應(yīng)模塊; 所述窗口記錄模塊,用于實(shí)時(shí)判斷當(dāng)前系統(tǒng)的置前窗口是否符合預(yù)設(shè)切換條件,如果符合則將其窗口指針添加至窗口數(shù)據(jù)鏈表中; 所述輪詢模塊,用于循環(huán)讀取第一列表中記錄的用戶的窗口切換請求,每讀取到一次窗口切換請求,則從所述窗口數(shù)據(jù)鏈表中獲取最近一次置前窗口的窗口指針; 如果獲取的最近一次置前窗口的窗口指針有效,則所述輪詢模塊將該窗口指針添加至第二列表中; 所述響應(yīng)模塊,用于循環(huán)讀取所述第二列表中的窗口指針,將相應(yīng)的窗口置前。
7.根據(jù)權(quán)利要求6所述的窗口切換裝置,其特征在于,所述窗口記錄模塊以預(yù)設(shè)時(shí)間段為周期,循環(huán)獲取當(dāng)前系統(tǒng)的置前窗口的窗口句柄;并根據(jù)獲取的所述窗口句柄判斷該窗口是否符合預(yù)設(shè)切換條件。
8.根據(jù)權(quán)利要求7所述的窗口切換裝置,其特征在于,所述預(yù)設(shè)時(shí)間段為20毫秒。
9.根據(jù)權(quán)利要求6所述的窗口切換裝置,其特征在于,如果獲取的最近一次置前窗口的窗口指針無效,則所述輪詢模塊從所述窗口數(shù)據(jù)鏈表中刪除該窗口指針。
10.根據(jù)權(quán)利要求6所述的窗口切換裝置,其特征在于,如果獲取的最近一次置前窗口的窗口指針非空,窗口屬性不是隱藏狀態(tài),并且窗口大小不為零,則所述輪詢模塊判斷該窗口指針有效,將其添加至第二列表中。
全文摘要
本發(fā)明公開了一種窗口切換方法,包括實(shí)時(shí)判斷當(dāng)前系統(tǒng)的置前窗口是否符合預(yù)設(shè)切換條件,如果符合則將其窗口指針添加至窗口數(shù)據(jù)鏈表中;循環(huán)讀取第一列表中記錄的用戶的窗口切換請求,每讀取到一次窗口切換請求,則從所述窗口數(shù)據(jù)鏈表中獲取最近一次置前窗口的窗口指針;如果獲取的最近一次置前窗口的窗口指針有效,則將該窗口指針添加至第二列表中;循環(huán)讀取所述第二列表中的窗口指針,將相應(yīng)的窗口置前。此外,還公開了一種窗口切換裝置。本發(fā)明可記錄最近的焦點(diǎn)窗口,采用輪詢的方法,能夠分離查詢線程和響應(yīng)線程進(jìn)行后臺程序切換窗口。減少了其它系統(tǒng)程序?qū)Υ翱谇袚Q的影響,提高了窗口切換的實(shí)時(shí)性,同時(shí)能大大提高窗口切換的成功率。
文檔編號G06F3/0481GK103116441SQ20131003277
公開日2013年5月22日 申請日期2013年1月28日 優(yōu)先權(quán)日2013年1月28日
發(fā)明者廖天素, 陳先志 申請人:廣東威創(chuàng)視訊科技股份有限公司