本發(fā)明涉及互聯(lián)網(wǎng)技術(shù)領(lǐng)域,尤其涉及一種鍵鼠腳本處理的方法和裝置。
背景技術(shù):
鍵盤和鼠標(biāo)均為用戶設(shè)備的輸入設(shè)備,當(dāng)用戶玩游戲或者進(jìn)行編輯文檔等窗口操作時(shí),往往需要對(duì)某個(gè)操作過程進(jìn)行重復(fù)執(zhí)行,例如,重復(fù)點(diǎn)擊鼠標(biāo)左鍵,或者以一定的順序重復(fù)點(diǎn)擊鍵盤中的不同方向鍵。為了簡化用戶的重復(fù)操作,現(xiàn)有技術(shù)提出了一種模擬用戶操作鍵盤和鼠標(biāo)的方式。在該方式中,用戶設(shè)備可以在用戶第一次執(zhí)行鍵鼠操作時(shí),對(duì)用戶的鍵鼠操作進(jìn)行錄制,獲得鍵鼠腳本,并在后續(xù)對(duì)鍵鼠腳本進(jìn)行回放,實(shí)現(xiàn)同一操作的自動(dòng)執(zhí)行。
現(xiàn)有技術(shù)中,腳本是以事件為單位進(jìn)行錄制的,除了鼠標(biāo)移動(dòng)和鼠標(biāo)滾輪的滾動(dòng)以外,鍵盤或鼠標(biāo)上任何一個(gè)按鍵的操作,均包含按下與放開兩個(gè)動(dòng)作。在進(jìn)行腳本錄制時(shí),用戶設(shè)備將一個(gè)動(dòng)作作為一個(gè)事件進(jìn)行記錄,與此對(duì)應(yīng)的,針對(duì)某個(gè)按鍵的一次操作就包含了按下和放開兩個(gè)事件。因此,鍵盤所涉及的事件包括每一個(gè)按鍵的按下事件和放開事件;鼠標(biāo)所涉及的事件包括鼠標(biāo)左右鍵、鼠標(biāo)滾輪的按下事件和放開事件、鼠標(biāo)滾輪滾動(dòng)事件以及鼠標(biāo)移動(dòng)事件。在進(jìn)行鍵鼠腳本錄制的過程中,用戶常常會(huì)觸發(fā)一些對(duì)游戲狀態(tài)不產(chǎn)生影響的操作,例如,用戶隨意移動(dòng)鼠標(biāo),卻沒有點(diǎn)擊鍵盤或者鼠標(biāo)上的任何按鍵。這種單純的鼠標(biāo)移動(dòng)不會(huì)導(dǎo)致游戲狀態(tài)的改變,因此通常沒有意義。雖然上述操作對(duì)游戲狀態(tài)沒有影響,但是電腦也會(huì)將該操作以事件的形式記錄到鍵鼠腳本中,從而使鍵鼠腳本的數(shù)據(jù)量增大,同時(shí)使鍵鼠腳本回放復(fù)雜。實(shí)際應(yīng)用中,通常將此類事件稱之為冗余事件。此外,由于Windows系統(tǒng)機(jī)制本身的缺陷,在鍵鼠腳本錄制過程中,往往會(huì)出現(xiàn)事件丟失現(xiàn)象,例如,用戶點(diǎn)擊了一下鼠標(biāo)左鍵,但是鍵鼠腳本中,只錄制了鼠標(biāo)左鍵按下事件,卻丟失了鼠標(biāo)左鍵放開事件。 因此,像這種丟失放開事件的情況,會(huì)使得鍵鼠腳本回放結(jié)束后,因缺少放開事件而使模擬操作持續(xù)處于按下的狀態(tài),由此導(dǎo)致目的窗口或者其他窗口發(fā)生卡死的現(xiàn)象,使得用戶無法對(duì)目的窗口或其他窗口進(jìn)行打開、關(guān)閉、拖動(dòng)等操作,進(jìn)而出現(xiàn)Windows異常。
技術(shù)實(shí)現(xiàn)要素:
有鑒于此,本發(fā)明提供的一種鍵鼠腳本處理的方法和裝置,能夠去除冗余事件、補(bǔ)充缺少的必要事件,從而使鍵鼠腳本得到進(jìn)一步優(yōu)化。
依據(jù)本發(fā)明一個(gè)方面,提出了一種鍵鼠腳本處理的方法,所述方法包括:
獲取待執(zhí)行的鍵鼠腳本;
檢測(cè)所述鍵鼠腳本中是否存在冗余事件,所述冗余事件為對(duì)所述鍵鼠腳本的回放狀態(tài)不產(chǎn)生影響的事件;
若所述鍵鼠腳本中存在所述冗余事件,則將所述冗余事件刪除;
檢測(cè)所述鍵鼠腳本中是否缺少必要事件,所述必要事件為應(yīng)當(dāng)記錄在所述鍵鼠腳本中的事件;
若所述鍵鼠腳本中缺少所述必要事件,則添加所述必要事件;
保存處理后的鍵鼠腳本。
依據(jù)本發(fā)明另一個(gè)方面,還提出了一種鍵鼠腳本處理的裝置,所述裝置包括:
獲取單元,用于獲取待執(zhí)行的鍵鼠腳本;
檢測(cè)單元,用于檢測(cè)所述獲取單元獲取的所述鍵鼠腳本中是否存在冗余事件,所述冗余事件為對(duì)所述鍵鼠腳本的回放狀態(tài)不產(chǎn)生影響的事件;
刪除單元,用于當(dāng)所述檢測(cè)單元檢測(cè)到所述鍵鼠腳本中存在所述冗余事件時(shí),將所述冗余事件刪除;
所述檢測(cè)單元,還用于檢測(cè)所述鍵鼠腳本中是否缺少必要事件,所述必要事件為應(yīng)當(dāng)記錄在所述鍵鼠腳本中的事件;
添加單元,用于當(dāng)所述檢測(cè)單元檢測(cè)到所述鍵鼠腳本中缺少所述必要事件時(shí),添加所述必要事件;
保存單元,用于保存處理后的鍵鼠腳本。
借由上述技術(shù)方案,本發(fā)明提供的鍵鼠腳本處理的方法和裝置,能夠在獲取待執(zhí)行的鍵鼠腳本后,檢測(cè)鍵鼠腳本中有無冗余事件以及是否缺少必要事件,當(dāng)有冗余事件時(shí),將冗余事件刪除,當(dāng)缺少必要事件時(shí),添加必要事件,從而得到處理后的鍵鼠腳本。與現(xiàn)有技術(shù)中直接執(zhí)行錄制的鍵鼠腳本相比,本發(fā)明不但可以使鍵鼠腳本的數(shù)據(jù)量減小,而且還能夠避免因缺少必要事件而造成Windows異常現(xiàn)象的出現(xiàn)。
上述說明僅是本發(fā)明技術(shù)方案的概述,為了能夠更清楚了解本發(fā)明的技術(shù)手段,而可依照說明書的內(nèi)容予以實(shí)施,并且為了讓本發(fā)明的上述和其它目的、特征和優(yōu)點(diǎn)能夠更明顯易懂,以下特舉本發(fā)明的具體實(shí)施方式。
附圖說明
通過閱讀下文優(yōu)選實(shí)施方式的詳細(xì)描述,各種其他的優(yōu)點(diǎn)和益處對(duì)于本領(lǐng)域普通技術(shù)人員將變得清楚明了。附圖僅用于示出優(yōu)選實(shí)施方式的目的,而并不認(rèn)為是對(duì)本發(fā)明的限制。而且在整個(gè)附圖中,用相同的參考符號(hào)表示相同的部件。在附圖中:
圖1示出了一種鍵鼠腳本處理的方法的流程圖;
圖2示出了另一種鍵鼠腳本處理的方法的流程圖;
圖3示出了一種鍵鼠腳本處理的裝置的組成框圖;
圖4示出了另一種鍵鼠腳本處理的裝置的組成框圖。
具體實(shí)施方式
下面將參照附圖更詳細(xì)地描述本發(fā)明的示例性實(shí)施例。雖然附圖中顯示了本發(fā)明的示例性實(shí)施例,然而應(yīng)當(dāng)理解,可以以各種形式實(shí)現(xiàn)本發(fā)明而不應(yīng)被這里闡述的實(shí)施例所限制。相反,提供這些實(shí)施例是為了能夠更透徹地理解本發(fā)明,并且能夠?qū)⒈景l(fā)明的范圍完整的傳達(dá)給本領(lǐng)域的技術(shù)人員。
本發(fā)明實(shí)施例提供了一種鍵鼠腳本處理的方法,如圖1所示,該方法包括:
101、獲取待執(zhí)行的鍵鼠腳本。
其中,鍵鼠腳本以事件的形式順序記錄用戶對(duì)鍵盤或鼠標(biāo)的每一次操作,并且記錄相鄰事件之間的時(shí)間間隔,構(gòu)成一個(gè)存儲(chǔ)有事件與時(shí)間間隔 的集合體。
示例性的,鍵鼠腳本中依次記錄按鍵A按下事件、100ms、按鍵A放開事件、5s、按鍵B按下事件、80ms、按鍵B放開事件、8s、鼠標(biāo)移動(dòng)事件、50ms、鼠標(biāo)移動(dòng)事件、50ms、鼠標(biāo)移動(dòng)事件、1s、鼠標(biāo)左鍵按下事件、90ms、鼠標(biāo)左鍵放開事件、8s、按鍵回車按下事件,說明用戶在整個(gè)操作過程中,先對(duì)按鍵A進(jìn)行了操作,5s后,又對(duì)按鍵B進(jìn)行了操作,8s后,又移動(dòng)了鼠標(biāo),1s后,又對(duì)鼠標(biāo)左鍵進(jìn)行了操作,8s后,又對(duì)按鍵回車進(jìn)行了操作。上述時(shí)間數(shù)值表示相鄰事件之間的時(shí)間間隔,本步驟及以下方案中涉及的數(shù)值僅為舉例說明,不作為對(duì)實(shí)際應(yīng)用的具體限定。
需要說明的是,鍵鼠腳本中記錄的每個(gè)事件均以一串字節(jié)的形式存儲(chǔ)于終端,即每個(gè)事件占用一個(gè)或者多個(gè)連續(xù)字節(jié)的存儲(chǔ)空間。每串字節(jié)攜帶的信息包括:事件類型、操作焦點(diǎn)的坐標(biāo)。其中,事件類型包括:鍵盤按鍵按下事件、鍵盤按鍵放開事件、鼠標(biāo)移動(dòng)事件、鼠標(biāo)滾輪滾動(dòng)事件、鼠標(biāo)按鍵按下事件和鼠標(biāo)按鍵放開事件。例如,一個(gè)事件為按鍵A按下事件,則該事件的事件類型為鍵盤按鍵的按鍵A按下事件,操作焦點(diǎn)的坐標(biāo)為(400,500),可知用戶在終端坐標(biāo)為(400,500)處,按下了按鍵A。
102、檢測(cè)鍵鼠腳本中是否存在冗余事件。
由于鍵鼠腳本中的各個(gè)事件是按照時(shí)間順序進(jìn)行記錄的,所以在檢測(cè)鍵鼠腳本時(shí),需要按照順序檢測(cè)鍵鼠腳本中的各個(gè)事件,檢測(cè)鍵鼠腳本中是否存在冗余事件。其中,冗余事件為對(duì)鍵鼠腳本的回放狀態(tài)不產(chǎn)生影響的事件,而回放狀態(tài)是指在鍵鼠腳本回放過程中游戲等的運(yùn)行狀態(tài)。例如,用戶在錄制游戲鍵鼠操作過程中,隨意移動(dòng)鼠標(biāo),卻未點(diǎn)擊鼠標(biāo)或鍵盤,并沒有改變游戲的運(yùn)行狀態(tài)。又如,游戲規(guī)定僅使用鍵盤上的方向鍵就可以進(jìn)行上下左右的操作,完成游戲中的任務(wù),而在游戲鍵鼠錄制中,用戶對(duì)其他按鍵進(jìn)行了操作,如對(duì)按鍵A、按鍵B、按鍵Shift等進(jìn)行了操作,而這些對(duì)其他按鍵的操作沒有改變游戲的運(yùn)行狀態(tài)。雖然上述操作沒有對(duì)回放狀態(tài)產(chǎn)生影響,但是在鍵鼠腳本錄制過程中,同樣會(huì)將這些操作以事件的形式記錄下來,在鍵鼠腳本回放時(shí),也會(huì)將這些操作過程重復(fù)一遍,因此將這些對(duì)鍵鼠腳本的回放狀態(tài)無影響的事件稱為冗余事件。
103、若鍵鼠腳本中存在冗余事件,則將冗余事件刪除。
由于冗余事件對(duì)游戲等的運(yùn)行狀態(tài)沒有影響,所以當(dāng)終端檢測(cè)到鍵鼠腳本中存在冗余事件時(shí),可以將冗余事件刪除,以減小鍵鼠腳本的數(shù)據(jù)量,同時(shí),由于刪除的冗余事件不會(huì)對(duì)回放狀態(tài)產(chǎn)生影響,因此刪除冗余事件不會(huì)改變鍵鼠腳本的回放結(jié)果。
此外,由于終端順序檢測(cè)鍵鼠腳本中的各個(gè)事件,所以當(dāng)終端刪除當(dāng)前所檢測(cè)到的冗余事件后,會(huì)繼續(xù)按照事件的順序?qū)θ哂嗍录蟮氖录M(jìn)行一一檢測(cè)。
104、檢測(cè)鍵鼠腳本中是否缺少必要事件。
其中,必要事件為應(yīng)當(dāng)記錄在鍵鼠腳本中的事件,包括對(duì)回放狀態(tài)產(chǎn)生影響的按下事件、放開事件、鼠標(biāo)移動(dòng)事件等。本步驟中,當(dāng)終端檢測(cè)鍵鼠腳本中是否缺少必要事件時(shí),終端可以檢測(cè)鍵鼠腳本的每一個(gè)按下事件最終是否放開,即是否有對(duì)應(yīng)的放開事件。其原因在于,當(dāng)鍵鼠腳本中缺少放開事件時(shí),會(huì)使得鍵鼠腳本回放結(jié)束后,因缺少放開事件而使模擬操作持續(xù)處于按下的狀態(tài),由此導(dǎo)致目的窗口或者其他窗口發(fā)生卡死的現(xiàn)象,從而出現(xiàn)Windows異常。
105、若鍵鼠腳本中缺少必要事件,則添加必要事件。
當(dāng)鍵鼠腳本中缺少必要事件時(shí),會(huì)影響鍵鼠腳本的回放,甚至影響Windows系統(tǒng)的正常運(yùn)行,因此需要在鍵鼠腳本中添加缺少的必要事件。例如,鍵鼠腳本中記錄有按鍵T按下事件,但是在該事件之后卻未檢測(cè)到按鍵T放開事件,說明鍵鼠腳本中缺少必要事件按鍵T放開事件。因此,需要在按鍵T按下事件之后添加按鍵T放開事件,以保證鍵鼠腳本的正?;胤牛约癢indows系統(tǒng)的正常運(yùn)行。
需要說明的是,上述多個(gè)步驟中包含了終端對(duì)鍵鼠腳本中必要事件的缺失的檢測(cè)和處理,以及對(duì)鍵鼠腳本中冗余事件的檢測(cè)和處理。然而本發(fā)明實(shí)施例對(duì)這兩種情況的操作順序并不作限定。終端獲取待執(zhí)行的鍵鼠腳本以后,可以先對(duì)整個(gè)鍵鼠腳本檢測(cè)有無冗余事件的存在,并將所有的冗余事件刪除,對(duì)于刪除冗余事件后的鍵鼠腳本,終端再進(jìn)行有無必要事件的缺失的檢測(cè),當(dāng)有缺失時(shí),進(jìn)行添加處理;也可以先對(duì)整個(gè)鍵鼠腳本檢 測(cè)有無必要事件的缺失,并添加缺失的必要事件,對(duì)于添加完缺失的必要事件后的鍵鼠腳本,終端再進(jìn)行有無冗余事件的檢測(cè),當(dāng)有冗余事件時(shí),進(jìn)行刪除處理。
106、保存處理后的鍵鼠腳本。
在上述步驟對(duì)獲取的待執(zhí)行的鍵鼠腳本進(jìn)行冗余事件的檢測(cè)和處理,以及進(jìn)行必要事件的缺失的檢測(cè)和處理后,終端將處理完后的鍵鼠腳本進(jìn)行保存,以便后續(xù)進(jìn)行回放時(shí)執(zhí)行該鍵鼠腳本。
本發(fā)明實(shí)施例提供的鍵鼠腳本處理的方法,能夠在獲取待執(zhí)行的鍵鼠腳本后,檢測(cè)鍵鼠腳本中有無冗余事件以及是否缺少必要事件,當(dāng)有冗余事件時(shí),將冗余事件刪除,當(dāng)缺少必要事件時(shí),添加必要事件,從而得到處理后的鍵鼠腳本。與現(xiàn)有技術(shù)中直接執(zhí)行錄制的鍵鼠腳本相比,本發(fā)明不但可以使鍵鼠腳本的數(shù)據(jù)量減小,而且還能夠避免因缺少必要事件而造成Windows異?,F(xiàn)象的出現(xiàn)。
進(jìn)一步的,作為對(duì)上述實(shí)施例的擴(kuò)展與細(xì)化,本發(fā)明實(shí)施例還提供了另一種鍵鼠腳本處理的方法,如圖2所示,該方法包括:
201、獲取待執(zhí)行的鍵鼠腳本。
202、判斷鍵鼠腳本中是否存在與預(yù)設(shè)優(yōu)化條件匹配的事件集合。
其中,預(yù)設(shè)優(yōu)化條件為終端預(yù)設(shè)的用于判斷是否為冗余事件的策略。通過判斷鍵鼠腳本中是否存在與預(yù)設(shè)優(yōu)化條件匹配的事件集合,可以獲得與預(yù)設(shè)優(yōu)化條件匹配的事件集合,從而確定該事件集合中的事件為冗余事件,進(jìn)而對(duì)冗余事件進(jìn)行刪除處理,使得鍵鼠腳本的數(shù)據(jù)量減小。
下面對(duì)不同情況的事件或者事件集合進(jìn)行判斷,從而對(duì)鍵鼠腳本中的冗余事件進(jìn)行處理:
第一種情況:檢測(cè)鍵鼠腳本中是否存在多個(gè)連續(xù)的鼠標(biāo)移動(dòng)事件。若鍵鼠腳本中存在多個(gè)連續(xù)的鼠標(biāo)移動(dòng)事件,則確定多個(gè)連續(xù)的鼠標(biāo)移動(dòng)事件與預(yù)設(shè)優(yōu)化條件匹配。
在實(shí)際應(yīng)用中,當(dāng)用戶在進(jìn)行游戲的鍵鼠錄制過程中,往往會(huì)出于非操作目的移動(dòng)鼠標(biāo),而不進(jìn)行附加操作(如按住鼠標(biāo)左鍵移動(dòng)鼠標(biāo),按住鍵盤上的按鍵移動(dòng)鼠標(biāo)等),例如不小心碰到鼠標(biāo),或者因個(gè)人習(xí)慣而單純 移動(dòng)鼠標(biāo)。對(duì)于這種只進(jìn)行鼠標(biāo)移動(dòng)的操作,只是改變了鼠標(biāo)的操作焦點(diǎn)的坐標(biāo),而未對(duì)游戲的狀態(tài)產(chǎn)生影響,因此可以將這些鼠標(biāo)移動(dòng)的事件歸為冗余事件,所以預(yù)設(shè)優(yōu)化條件中包含多個(gè)連續(xù)的鼠標(biāo)移動(dòng)事件的情況。由此可知,當(dāng)終端檢測(cè)到鍵鼠腳本中存在多個(gè)連續(xù)的鼠標(biāo)移動(dòng)事件時(shí),會(huì)確定該多個(gè)連續(xù)的鼠標(biāo)移動(dòng)事件與預(yù)設(shè)優(yōu)化條件相匹配。
需要說明的是,對(duì)于鼠標(biāo)的移動(dòng)操作,雖然在用戶看來是一次連續(xù)的移動(dòng)過程,但是對(duì)于終端而言,一次鼠標(biāo)移動(dòng)過程是由成百上千個(gè)離散點(diǎn)所組成的近似連續(xù)的移動(dòng)操作。因此,在進(jìn)行鍵鼠腳本錄制時(shí),終端會(huì)記錄下成百上千個(gè)事件(每個(gè)事件都記錄有鼠標(biāo)移動(dòng)的事件類型,以及對(duì)應(yīng)離散點(diǎn)的坐標(biāo)信息),所以鼠標(biāo)的移動(dòng)操作對(duì)鍵鼠腳本數(shù)據(jù)量的占用較大,如果判斷出在進(jìn)行鼠標(biāo)移動(dòng)的同時(shí),沒有附加其他操作(如按住鼠標(biāo)左鍵移動(dòng)鼠標(biāo),按住鍵盤上的按鍵移動(dòng)鼠標(biāo)等),而只是單獨(dú)進(jìn)行鼠標(biāo)移動(dòng),那么終端就將這樣的鼠標(biāo)移動(dòng)操作所對(duì)應(yīng)的多個(gè)連續(xù)的鼠標(biāo)移動(dòng)事件刪除,從而可以在不影響鍵鼠腳本的回放狀態(tài)的前提下,降低鍵鼠腳本的數(shù)據(jù)量。
示例性的,鍵鼠腳本中的事件依次為按鍵Q按下事件、按鍵Q放開事件、鼠標(biāo)移動(dòng)事件、鼠標(biāo)移動(dòng)事件、鼠標(biāo)移動(dòng)事件、按鍵回車按下事件、按鍵回車放開事件,則終端可以檢測(cè)到該鍵鼠腳本中存在連續(xù)的3個(gè)鼠標(biāo)移動(dòng)事件。因此,終端可以確定該連續(xù)的3個(gè)鼠標(biāo)移動(dòng)事件與預(yù)設(shè)優(yōu)化條件匹配,從而將這3個(gè)鼠標(biāo)移動(dòng)事件定為冗余事件,并將其做刪除處理。
進(jìn)一步的,當(dāng)將鍵鼠腳本中所有的多個(gè)連續(xù)的鼠標(biāo)移動(dòng)事件刪除之后,在鍵鼠腳本回放的過程中,會(huì)出現(xiàn)操作焦點(diǎn)瞬間從一個(gè)點(diǎn)轉(zhuǎn)移到另一個(gè)相距較遠(yuǎn)的點(diǎn),而沒有用戶在錄制過程中的鼠標(biāo)慢慢移動(dòng)的焦點(diǎn)軌跡。然而用戶進(jìn)行鼠標(biāo)移動(dòng),往往是為了改變操作焦點(diǎn)的坐標(biāo),從而進(jìn)一步點(diǎn)擊鼠標(biāo)或者鍵盤上的鍵,進(jìn)而改變游戲狀態(tài)。因此,為了保留用戶的正常鼠標(biāo)移動(dòng)操作,需要對(duì)第一種情況進(jìn)行改進(jìn),以防止在“剔除”無用鼠標(biāo)移動(dòng)操作的同時(shí),誤將正常的鼠標(biāo)移動(dòng)操作刪除,具體的,該改進(jìn)方案如下:
檢測(cè)多個(gè)連續(xù)的鼠標(biāo)移動(dòng)事件中最后一個(gè)事件之后的時(shí)間間隔是否大于第一預(yù)設(shè)時(shí)間閾值。若多個(gè)連續(xù)的鼠標(biāo)移動(dòng)事件中最后一個(gè)事件之后的時(shí)間間隔大于第一預(yù)設(shè)時(shí)間閾值,則確定多個(gè)連續(xù)的鼠標(biāo)移動(dòng)事件與預(yù)設(shè) 優(yōu)化條件匹配。
其中,第一預(yù)設(shè)時(shí)間閾值可以為后臺(tái)統(tǒng)計(jì)的應(yīng)用操作的最長時(shí)間閾值。
實(shí)際應(yīng)用中,當(dāng)用戶無意間移動(dòng)了鼠標(biāo),或者隨意移動(dòng)鼠標(biāo)后,往往并無進(jìn)行下一步操作的目的和意愿,最后一個(gè)鼠標(biāo)移動(dòng)事件與下一個(gè)操作事件之間的時(shí)間間隔會(huì)遠(yuǎn)遠(yuǎn)大于正常操作事件之間的時(shí)間間隔,因此可以通過這一特點(diǎn)對(duì)無用的鼠標(biāo)移動(dòng)操作和正常的鼠標(biāo)移動(dòng)操作進(jìn)行區(qū)分。例如,用戶在觸發(fā)鼠標(biāo)移動(dòng)操作后,未立即進(jìn)行鼠標(biāo)點(diǎn)擊操作或者鍵盤上的按鍵操作,說明用戶并不是為了進(jìn)行下一步的點(diǎn)擊而進(jìn)行了鼠標(biāo)移動(dòng)的操作,所以這些由于用戶無目的地移動(dòng)鼠標(biāo)而記錄在鍵鼠腳本中的鼠標(biāo)移動(dòng)事件可以被歸為冗余事件。因此,預(yù)設(shè)優(yōu)化條件中包含在多個(gè)連續(xù)的鼠標(biāo)移動(dòng)事件后長時(shí)間未出現(xiàn)其他類型事件的情況。由此可知,當(dāng)終端檢測(cè)到多個(gè)連續(xù)的鼠標(biāo)移動(dòng)事件中最后一個(gè)事件之后的時(shí)間間隔大于第一預(yù)設(shè)時(shí)間閾值時(shí),可以確定該多個(gè)連續(xù)的鼠標(biāo)移動(dòng)事件與預(yù)設(shè)優(yōu)化條件匹配,并將該多個(gè)連續(xù)的鼠標(biāo)移動(dòng)事件歸為冗余事件,從而將其刪除,以減小鍵鼠腳本的數(shù)據(jù)量。
示例性的,鍵鼠腳本中的事件以及事件間隔依次為按鍵C按下事件、100ms、按鍵C放開事件、5s、鼠標(biāo)移動(dòng)事件、50ms、鼠標(biāo)移動(dòng)事件、50ms、鼠標(biāo)移動(dòng)事件、50ms、鼠標(biāo)移動(dòng)事件、5min、鍵盤按鍵向右鍵按下事件、40ms、鍵盤按鍵向右鍵按下事件、40ms、鍵盤按鍵向右鍵按下事件、90ms、鍵盤按鍵向右鍵放開事件。若第一預(yù)設(shè)時(shí)間閾值為4min,則終端可以檢測(cè)到4個(gè)連續(xù)的鼠標(biāo)移動(dòng)事件中第四個(gè)鼠標(biāo)移動(dòng)事件之后的時(shí)間間隔大于4min,由此可以確定該4個(gè)連續(xù)的鼠標(biāo)移動(dòng)事件與預(yù)設(shè)優(yōu)化條件匹配,并將其確定為冗余事件,從而對(duì)冗余事件做刪除處理,使鍵鼠腳本得到進(jìn)一步優(yōu)化。
進(jìn)一步的,在鍵鼠腳本錄制的過程中,常常出現(xiàn)用戶一不小心壓在鍵盤上,使鍵盤上的按鍵持續(xù)處于按下狀態(tài),而這些鍵的按下并未導(dǎo)致改變回放狀態(tài)等問題。雖然這些鍵被長時(shí)間按下,卻未改變回放狀態(tài),但是這些按下與放開的操作也會(huì)記錄在鍵鼠腳本中,鍵鼠腳本在回放過程中也會(huì)重復(fù)這些操作。因此,這些未對(duì)回放狀態(tài)產(chǎn)生影響的長按操作所對(duì)應(yīng)的事 件可以被歸為冗余事件。由此可知,預(yù)設(shè)優(yōu)化條件中包括未對(duì)回放狀態(tài)產(chǎn)生影響的長按操作的情況。其具體檢測(cè)方式如下述第二種情況:
第二種情況:檢測(cè)多個(gè)連續(xù)的相同按下事件中相鄰事件之間的時(shí)間間隔之和是否大于第二預(yù)設(shè)時(shí)間閾值。若時(shí)間間隔之和大于第二預(yù)設(shè)時(shí)間閾值,則確定多個(gè)連續(xù)的相同按下事件與預(yù)設(shè)優(yōu)化條件匹配。
其中,第二預(yù)設(shè)時(shí)間閾值可以為應(yīng)用開發(fā)商提供的應(yīng)用操作的最長時(shí)間閾值,也可以為后臺(tái)統(tǒng)計(jì)的應(yīng)用操作的最長時(shí)間閾值。
需要說明的是,與鼠標(biāo)移動(dòng)類似,長按操作對(duì)于用戶來說感覺是一個(gè)操作,但是實(shí)際上,長按操作在終端記錄了多個(gè)連續(xù)的相同按下事件。因此,在計(jì)算長按操作的時(shí)長時(shí),需要將該多個(gè)連續(xù)的相同按下事件中相鄰事件間的時(shí)間間隔進(jìn)行相加,以獲得產(chǎn)生該多個(gè)連續(xù)的相同按下事件的總時(shí)長。
當(dāng)長按按鍵的時(shí)間超過了應(yīng)用開發(fā)商提供的應(yīng)用操作的最長時(shí)間閾值,或者后臺(tái)統(tǒng)計(jì)的應(yīng)用操作的最長時(shí)間閾值時(shí),可以確定該長按操作為非正常情況下進(jìn)行的長按操作。因此,當(dāng)終端檢測(cè)到多個(gè)連續(xù)的相同按下事件中相鄰事件之間的時(shí)間間隔之和大于第二預(yù)設(shè)時(shí)間閾值時(shí),可以確定多個(gè)連續(xù)的相同按下事件與預(yù)設(shè)優(yōu)化條件匹配,并將其歸為冗余事件,從而將其刪除,以減小鍵鼠腳本的數(shù)據(jù)量。
示例性的,鍵鼠腳本中有1001個(gè)連續(xù)按鍵A按下事件,相鄰事件的時(shí)間間隔均為100ms。當(dāng)?shù)诙A(yù)設(shè)時(shí)間閾值為60s時(shí),由于1001個(gè)連續(xù)按鍵A按下事件的時(shí)間間隔之和為1000*100=100000ms=100s,大于60s,所以該1001個(gè)連續(xù)按鍵A按下事件為與預(yù)設(shè)優(yōu)化條件匹配的事件集合。因此可以將該1001個(gè)連續(xù)按鍵A按下事件歸為冗余事件,將其刪除。
實(shí)際應(yīng)用中,可以將游戲設(shè)計(jì)中涉及的按鍵的最大長按時(shí)長作為第二預(yù)設(shè)時(shí)間閾值使用,該最大長按時(shí)長可以由游戲開發(fā)商提供,也可以由游戲服務(wù)商后臺(tái)統(tǒng)計(jì)得出,并寫入到終端的配置文件(例如:***.dll文件)中。
需要說明的是,上述方案中的涉及的長按按鍵情況,是基于對(duì)回放狀態(tài)無影響的基礎(chǔ)之上的,因此,在將上述長按按鍵對(duì)應(yīng)的多個(gè)連續(xù)相同的 按下事件進(jìn)行刪除前,需要先判斷該按下事件是否為對(duì)回放狀態(tài)無影響的按鍵所觸發(fā)的事件。當(dāng)該按下事件為對(duì)回放狀態(tài)無影響的按鍵所觸發(fā)的事件時(shí),才可將其刪除。對(duì)于判斷是否為對(duì)回放狀態(tài)無影響的按鍵所觸發(fā)的事件的具體實(shí)現(xiàn)方式如下述第三種情況:
第三種情況:檢測(cè)鍵鼠腳本中是否存在預(yù)設(shè)按鍵以外的按鍵所觸發(fā)的事件。若鍵鼠腳本中存在預(yù)設(shè)按鍵以外的按鍵所觸發(fā)的事件,則確定預(yù)設(shè)按鍵以外的按鍵所觸發(fā)的事件與預(yù)設(shè)優(yōu)化條件匹配。
其中,預(yù)設(shè)按鍵可以為應(yīng)用開發(fā)商提供的用于觸發(fā)應(yīng)用操作的按鍵,也可以為后臺(tái)統(tǒng)計(jì)的用于觸發(fā)應(yīng)用操作的按鍵。實(shí)際應(yīng)用中,預(yù)設(shè)按鍵信息可以被預(yù)先寫入到終端的配置文件中。
由于游戲開發(fā)商在開發(fā)游戲時(shí),往往會(huì)設(shè)置固定的若干按鍵(包括鍵盤或鼠標(biāo)上的按鍵),進(jìn)行游戲的編輯操作,而其他按鍵并不起作用。在游戲鍵鼠腳本錄制過程中,用戶往往會(huì)有意或無意按一些預(yù)設(shè)按鍵以外的按鍵,雖然針對(duì)這些按鍵的操作并不會(huì)對(duì)游戲狀態(tài)產(chǎn)生改變,但仍然被記錄在鍵鼠腳本當(dāng)中,因此,這些預(yù)設(shè)按鍵以外的按鍵所觸發(fā)的事件可以被歸為冗余事件。由此可知,預(yù)設(shè)優(yōu)化條件中包括預(yù)設(shè)按鍵以外的按鍵觸發(fā)事件的情況。
具體的,終端可以對(duì)每一個(gè)預(yù)設(shè)按鍵觸發(fā)的事件做預(yù)設(shè)按鍵的標(biāo)記。當(dāng)終端檢測(cè)到當(dāng)前事件未攜帶預(yù)設(shè)按鍵標(biāo)記時(shí),可以確定該當(dāng)前事件為預(yù)設(shè)按鍵以外的按鍵所觸發(fā)的事件,并且可以確定該事件與預(yù)設(shè)優(yōu)化條件匹配;當(dāng)終端檢測(cè)到當(dāng)前事件攜帶預(yù)設(shè)按鍵標(biāo)記時(shí),可以確定當(dāng)前事件是預(yù)設(shè)按鍵所觸發(fā)的事件,則繼續(xù)對(duì)下一事件進(jìn)行檢測(cè)。
需要說明的是,上述第三種情況的方案,不僅可以實(shí)現(xiàn)對(duì)第二種情況中的多個(gè)相同按下事件的判斷,還可以實(shí)現(xiàn)對(duì)鍵鼠腳本中的其他任何事件的判斷,從而將鍵鼠腳本中的所有預(yù)設(shè)按鍵以外的按鍵所觸發(fā)的事件都檢測(cè)出來,并做進(jìn)一步處理。
進(jìn)一步的,當(dāng)用戶對(duì)游戲窗口進(jìn)行鍵鼠腳本錄制時(shí),可能還會(huì)對(duì)其他窗口進(jìn)行操作,然而由于在鍵鼠錄制過程中,終端僅針對(duì)鍵盤或者鼠標(biāo)觸發(fā)的操作進(jìn)行錄制,而不區(qū)分窗口,所以也會(huì)將用戶對(duì)其他窗口的操作錄 制進(jìn)去,并且也會(huì)在鍵鼠腳本回放中回放這些操作。
例如,用戶在進(jìn)行游戲的鍵鼠腳本錄制過程中,在某一時(shí)刻,用戶點(diǎn)擊了聊天軟件的圖標(biāo),并且找到一個(gè)叫張三的好友,向他發(fā)送了一個(gè)消息“周末一起出去玩吧!”。因此,在該聊天軟件的圖標(biāo)位置不變的情況下,在鍵鼠腳本中的同一時(shí)刻,鼠標(biāo)會(huì)如錄制過程一樣,點(diǎn)擊聊天軟件的圖標(biāo),并向張三發(fā)送相同的消息。而這種情況往往會(huì)對(duì)用戶造成影響,因此,這些對(duì)其他窗口的操作所對(duì)應(yīng)的事件可以被歸為冗余事件。由此可知,預(yù)設(shè)優(yōu)化條件中包括對(duì)其他窗口進(jìn)行操作的情況。判斷是否有對(duì)應(yīng)其他窗口的事件的具體實(shí)現(xiàn)方式如下述第四種情況:
第四種情況:從事件中讀取操作焦點(diǎn)的坐標(biāo),并判斷坐標(biāo)是否位于目標(biāo)窗口中。若坐標(biāo)不位于目標(biāo)窗口中,則確定不位于目標(biāo)窗口的坐標(biāo)對(duì)應(yīng)的事件與預(yù)設(shè)優(yōu)化條件匹配。
如上述步驟101中所述,鍵鼠腳本中的每個(gè)事件均攜帶關(guān)于操作焦點(diǎn)的坐標(biāo)的信息,所以可以先獲取目標(biāo)窗口的坐標(biāo)范圍,然后從鍵鼠腳本的各個(gè)事件中讀取操作焦點(diǎn)的坐標(biāo)。通過將讀取事件的操作焦點(diǎn)的坐標(biāo)與目標(biāo)窗口的坐標(biāo)范圍相匹配,來判斷讀取的事件的操作焦點(diǎn)的坐標(biāo)是否位于目標(biāo)窗口。當(dāng)讀取的事件的操作焦點(diǎn)的坐標(biāo)不位于目標(biāo)窗口的坐標(biāo)范圍內(nèi)時(shí),終端確定不位于目標(biāo)窗口的坐標(biāo)對(duì)應(yīng)的事件與預(yù)設(shè)優(yōu)化條件匹配。
203、若鍵鼠腳本中存在與預(yù)設(shè)優(yōu)化條件匹配的事件集合,則確定與預(yù)設(shè)優(yōu)化條件匹配的事件集合中的事件為冗余事件,并將冗余事件刪除。
由于在步驟202中提到預(yù)設(shè)優(yōu)化條件為終端預(yù)設(shè)的用于判斷是否為冗余事件的策略,所以與預(yù)設(shè)優(yōu)化條件相匹配的事件為冗余事件。當(dāng)檢測(cè)到鍵鼠腳本中存在與預(yù)設(shè)優(yōu)化條件匹配的事件集合時(shí),將這些與預(yù)設(shè)優(yōu)化條件相匹配的事件集合中的事件確定為冗余事件,并將所有冗余事件進(jìn)行刪除處理,以減小鍵鼠腳本的數(shù)據(jù)量。
進(jìn)一步的,由于鍵鼠腳本中除了記錄各個(gè)事件外,還記錄了相鄰事件之間的時(shí)間間隔,所以當(dāng)對(duì)所有的冗余事件進(jìn)行刪除處理后,會(huì)出現(xiàn)多個(gè)連續(xù)時(shí)間間隔的情況。又由于終端在執(zhí)行鍵鼠腳本時(shí),只是根據(jù)鍵鼠腳本中記錄的時(shí)間間隔的時(shí)長進(jìn)行暫停,而依次執(zhí)行多個(gè)連續(xù)的時(shí)間間隔,與 直接執(zhí)行一個(gè)時(shí)長與所有時(shí)間間隔的時(shí)長之和相等的時(shí)間間隔效果相同,即所暫停的時(shí)間長短是一樣的。然而,每個(gè)時(shí)間間隔會(huì)分別占用一定的存儲(chǔ)空間,所以為了減小鍵鼠腳本的數(shù)據(jù)量,可以將多個(gè)連續(xù)的時(shí)間間隔合并為一個(gè)時(shí)間間隔。
示例性的,將冗余事件刪除后,鍵鼠腳本中有10個(gè)連續(xù)的時(shí)間間隔,其數(shù)值分別為100ms、1s、100ms、100ms、10s、50ms、50ms、2s、40ms、60ms,所以將這10個(gè)數(shù)值整個(gè)為1個(gè)數(shù)值后的值為13.5s。若這10個(gè)時(shí)間間隔分別占用一個(gè)字節(jié)的存儲(chǔ)空間,則總共占用10個(gè)字節(jié)的存儲(chǔ)空間,然而將這10個(gè)時(shí)間間隔整合為1個(gè)時(shí)間間隔后,所占用的存儲(chǔ)空間僅為一個(gè)字節(jié),從而減小了鍵鼠腳本的數(shù)據(jù)量,節(jié)省了鍵鼠腳本在終端中的存儲(chǔ)空間。
204、檢測(cè)當(dāng)前事件之后是否缺少與當(dāng)前事件對(duì)應(yīng)的放開事件。
在上述實(shí)施例中提到,缺少放開事件會(huì)影響鍵鼠腳本的回放狀態(tài),甚至影響系統(tǒng)的正常運(yùn)行,因此保證每個(gè)按下事件之后均有對(duì)應(yīng)的放開事件是必要的,從而需要檢測(cè)當(dāng)前事件之后是否缺少與當(dāng)前事件對(duì)應(yīng)的放開事件。
需要說明的是,實(shí)際應(yīng)用中,當(dāng)前事件可能是按下事件,也可能是放開事件,也可能是鼠標(biāo)移動(dòng)事件和鼠標(biāo)滾輪滾動(dòng)事件。當(dāng)當(dāng)前事件為鼠標(biāo)移動(dòng)事件或者鼠標(biāo)滾輪滾動(dòng)事件時(shí),直接繼續(xù)檢測(cè)下一事件。當(dāng)當(dāng)前事件為按下事件時(shí),對(duì)應(yīng)該當(dāng)前事件的放開事件為與當(dāng)前事件操作相反的事件;而當(dāng)當(dāng)前事件為放開事件時(shí),對(duì)應(yīng)該當(dāng)前事件的放開事件為該當(dāng)前事件本身。例如,若當(dāng)前事件為按鍵M按下事件,則對(duì)應(yīng)該當(dāng)前事件的放開事件為按鍵M放開事件;若當(dāng)前事件為按鍵M放開事件,則對(duì)應(yīng)該當(dāng)前事件的放開事件為按鍵M放開事件。
實(shí)際應(yīng)用中,終端每執(zhí)行一個(gè)按下事件和與其對(duì)應(yīng)的放開事件,就可以完成一次按鍵的模擬操作,而當(dāng)在放開事件之后重復(fù)添加相同的放開事件時(shí),對(duì)按鍵的模擬操作并無影響,因?yàn)楸痉桨钢?,只要保證一個(gè)按鍵在按下之后一定可以放開,即按下事件之后一定存在放開事件,而無需限制放開事件的數(shù)量。因此在添加放開事件時(shí),無需對(duì)當(dāng)前事件的事件類型進(jìn) 行判斷。
進(jìn)一步的,為了避免當(dāng)前事件為放開事件時(shí),也對(duì)其后的事件進(jìn)行檢測(cè),而降低對(duì)鍵鼠腳本的檢測(cè)速度,對(duì)上述方案進(jìn)行如下改進(jìn):
在檢測(cè)當(dāng)前事件之后是否缺少與當(dāng)前事件對(duì)應(yīng)的放開事件前,先檢測(cè)當(dāng)前事件是否為按下事件。若當(dāng)前事件為按下事件,則再繼續(xù)檢測(cè)當(dāng)前事件之后是否缺少放開事件;若當(dāng)前事件為放開事件,則不再對(duì)當(dāng)前事件之后的事件進(jìn)行檢測(cè),而直接對(duì)與當(dāng)前事件相鄰的下一事件進(jìn)行按下事件的檢測(cè),并判斷后續(xù)是否需要進(jìn)行有無放開事件的檢測(cè),進(jìn)而進(jìn)行相應(yīng)的后續(xù)操作。
需要說明的是,無論是否需要進(jìn)行按下事件的判斷,當(dāng)對(duì)當(dāng)前事件之后的事件進(jìn)行檢測(cè)時(shí),該檢測(cè)范圍都可以為僅針對(duì)與當(dāng)前事件相鄰的下一事件進(jìn)行檢測(cè),也可以在與當(dāng)前事件相鄰的若干事件中進(jìn)行檢測(cè),也可以在當(dāng)前事件之后的所有事件內(nèi)進(jìn)行檢測(cè)。下面針對(duì)以下兩種檢測(cè)方式進(jìn)行介紹:
方式一:檢測(cè)當(dāng)前事件之后的所有事件中是否缺少放開事件。
終端遍歷當(dāng)前事件之后的所有事件,檢測(cè)是否缺少對(duì)應(yīng)當(dāng)前事件的放開事件。這種對(duì)于當(dāng)前事件之后的所有事件進(jìn)行遍歷檢測(cè)的方式,可以防止事件檢測(cè)遺漏現(xiàn)象的產(chǎn)生。
在實(shí)際應(yīng)用中,除了長按某一按鍵外,用戶對(duì)鍵盤或者鼠標(biāo)的點(diǎn)擊往往是瞬間按下、瞬間放開,因此鍵鼠腳本中錄制的用戶對(duì)鍵盤或鼠標(biāo)的點(diǎn)擊操作,往往是將一個(gè)按鍵按下事件與該按鍵的放開事件進(jìn)行相鄰記錄,所以為了減少檢測(cè)時(shí)間,可以采用以下方式二進(jìn)行檢測(cè)。
方式二:檢測(cè)與當(dāng)前事件相鄰的下一事件是否為放開事件。
若與當(dāng)前事件相鄰的下一事件是對(duì)應(yīng)當(dāng)前事件的放開事件,則終端繼續(xù)檢測(cè)與當(dāng)前事件相鄰的下一事件的下一事件是否有對(duì)應(yīng)的放開事件;若與當(dāng)前事件相鄰的下一事件不是對(duì)應(yīng)當(dāng)前事件的放開事件,則在當(dāng)前事件之后添加放開事件。
205、若當(dāng)前事件之后缺少與當(dāng)前事件對(duì)應(yīng)的放開事件,則在當(dāng)前事件之后添加放開事件。
若當(dāng)前事件之后缺少與當(dāng)前事件對(duì)應(yīng)的放開事件,則有可能對(duì)鍵鼠腳本的回放產(chǎn)生影響,甚至導(dǎo)致Windows出現(xiàn)異常,因此應(yīng)該在當(dāng)前事件之后添加對(duì)應(yīng)的放開事件以保證終端的正常運(yùn)行。
由于無論對(duì)應(yīng)當(dāng)前事件的放開事件位于哪個(gè)位置,只要位于當(dāng)前事件之后,都不會(huì)對(duì)回放結(jié)果或系統(tǒng)產(chǎn)生影響,所以在當(dāng)前事件之后添加放開事件的具體實(shí)現(xiàn)方式可以為在當(dāng)前事件與下一事件之間添加放開事件,可以為在當(dāng)前事件之后的所有事件中,任意兩個(gè)事件之間添加放開事件,還可以為在當(dāng)前事件之后的所有事件之后添加放開事件,本實(shí)施例不對(duì)放開事件的具體添加位置進(jìn)行限定。下面對(duì)不同的添加方式進(jìn)行介紹:
第一種方式:在當(dāng)前事件之后、與當(dāng)前事件相鄰的下一事件之前,添加放開事件。
一般性的,由于每個(gè)事件和與其對(duì)應(yīng)的放開事件往往是相鄰記錄的,所以為了與鍵鼠腳本錄制過程中的事件的順序相一致,可以在當(dāng)前事件之后、與當(dāng)前事件相鄰的下一事件之前,添加放開事件。
在實(shí)際應(yīng)用中,用戶常常會(huì)長按鍵盤或鼠標(biāo)上的按鍵,而對(duì)于長按按鍵的情況,終端會(huì)在鍵鼠腳本中記錄多個(gè)連續(xù)相同的按下事件,例如,當(dāng)用戶長按按鍵空格x秒時(shí),計(jì)算機(jī)會(huì)記錄y個(gè)連續(xù)相同的按鍵空格按下事件。因此為了避免終端對(duì)多個(gè)連續(xù)相同的事件一一進(jìn)行檢測(cè),并多次添加相同的放開事件,而造成鍵鼠腳本回放緩慢,可以采用如下方式進(jìn)行放開事件的添加:
第二種方式:檢測(cè)與當(dāng)前事件相鄰的連續(xù)至少一個(gè)事件是否均與當(dāng)前事件相同。若與當(dāng)前事件相鄰的連續(xù)至少一個(gè)事件均與當(dāng)前事件相同,則在連續(xù)至少一個(gè)事件中的最后一個(gè)事件之后,添加放開事件;若與當(dāng)前事件相鄰的下一事件與當(dāng)前事件不同,則在當(dāng)前事件之后添加放開事件。
示例性的,鍵鼠腳本中記錄的事件依次為按鍵W按下事件、按鍵W放開事件、按鍵Y按下事件、按鍵Y按下事件、按鍵Y按下事件、鼠標(biāo)移動(dòng)事件、鼠標(biāo)移動(dòng)事件、鼠標(biāo)移動(dòng)事件、按鍵U按下事件、按鍵U放開事件。若當(dāng)前事件為第一個(gè)按鍵Y按下事件,則在檢測(cè)到當(dāng)前事件之后缺少對(duì)應(yīng)的放開事件后,終端繼續(xù)檢測(cè)與當(dāng)前事件相鄰的連續(xù)至少一個(gè)事件是否均 與當(dāng)前事件相同。檢測(cè)結(jié)果為與當(dāng)前事件相鄰的連續(xù)兩個(gè)事件與當(dāng)前事件相同,因此終端在與當(dāng)前事件相鄰的連續(xù)兩個(gè)事件中的第二個(gè)事件之后添加按鍵Y放開事件。
第三種方式:在所有事件之后添加放開事件。
由于只要每一個(gè)按下事件之后存在對(duì)應(yīng)的放開事件,就不影響鍵鼠腳本的回放結(jié)果,所以為了將鍵鼠腳本中已有的事件與添加的放開事件區(qū)分開,可以在鍵鼠腳本中的所有事件之后添加放開事件,使得鍵鼠腳本中的最后一個(gè)事件之前均為已有的、未做添加的事件,使得鍵鼠腳本中的最后一個(gè)事件之后均為添加的事件。
在這種添加的事件均位于鍵鼠腳本中的已有事件之后的方式下,對(duì)于相鄰或者不相鄰的若干相同的事件均不存在對(duì)應(yīng)的放開事件時(shí),只要對(duì)該若干相同的事件中的第一個(gè)事件添加了對(duì)應(yīng)的放開事件,那么其他事件之后便均有對(duì)應(yīng)的放開事件,因此,避免了重復(fù)添加放開事件的情況。
進(jìn)一步的,在實(shí)際應(yīng)用中,用戶常常需要使用一些組合鍵來完成必要的操作,如用戶按下按鍵Ctrl后不放開,再按按鍵X,完成剪切的操作,而這個(gè)剪切操作在計(jì)算機(jī)中依次記錄了按鍵Ctrl按下事件、按鍵X按下事件,在按鍵X按下事件之后才記錄按鍵Ctrl放開事件和按鍵X放開事件,因此,當(dāng)檢測(cè)到按鍵Ctrl按下事件之后不存在按鍵Ctrl放開事件時(shí),在按鍵Ctrl按下事件與按鍵X按下事件之間添加按鍵Ctrl放開事件,則會(huì)使得剪切的功能失效,因此為了進(jìn)一步優(yōu)化鍵鼠腳本,使其在避免產(chǎn)生Windows異常的基礎(chǔ)上,保證鍵鼠腳本回放結(jié)果不變,可以采用如下第四種方式進(jìn)行操作:
第四種方式:檢測(cè)當(dāng)前事件是否為事件組合中的事件。若當(dāng)前事件為事件組合中的事件,則在事件組合中的最后一個(gè)事件之后,添加對(duì)應(yīng)當(dāng)前事件的放開事件;若當(dāng)前事件不是事件組合中的事件,則在當(dāng)前事件之后添加對(duì)應(yīng)當(dāng)前事件的放開事件。
其中,事件組合由觸發(fā)組合鍵所產(chǎn)生的多個(gè)事件組成,事件組合包括按鍵Ctrl事件、按鍵Alt事件、按鍵Shift事件、按鍵Fn事件。由于組合鍵是由按鍵Ctrl、按鍵Alt、按鍵Shift、按鍵Fn等特殊按鍵與鍵盤上的其他 字母等普通按鍵組成的,所以事件組合中還包括字母按鍵等其他按鍵的對(duì)應(yīng)事件。
當(dāng)檢測(cè)到當(dāng)前事件為事件組合中的事件時(shí),在事件組合中的最后一個(gè)事件之后,添加對(duì)應(yīng)當(dāng)前事件的放開事件,可以保證該事件組合觸發(fā)的組合鍵的特殊功能不被破壞。
示例性的,鍵鼠腳本中記錄的事件依次為按鍵O按下事件、按鍵O放開事件、按鍵Ctrl按下事件、按鍵C按下事件、按鍵C放開事件、按鍵M按下事件、鼠標(biāo)移動(dòng)事件、鼠標(biāo)移動(dòng)事件、按鍵回車按下事件、按鍵回車放開事件。若當(dāng)前事件為按鍵Ctrl按下事件,則可以檢測(cè)到在按鍵Ctrl按下事件之后缺少按鍵Ctrl放開事件,而按鍵Ctrl與按鍵C又為組合鍵,事件組合中的事件有按鍵Ctrl按下事件、按鍵C按下事件、按鍵C放開事件,因此為避免破壞組合鍵按鍵Ctrl與按鍵C組合產(chǎn)生的復(fù)制功能,終端在事件組合中的最后一個(gè)事件(即按鍵C放開事件)之后添加按鍵Ctrl放開事件;若當(dāng)前事件為按鍵M按下事件,則可以檢測(cè)到按鍵M按下事件之后缺少按鍵M放開事件,且按鍵M按下事件不是事件組合中的事件,所以在按鍵M按下事件之后添加按鍵M放開事件。
可選的,在實(shí)際應(yīng)用中,用戶在使用組合鍵時(shí),往往對(duì)后按下的按鍵先放開,對(duì)先按下的按鍵后放開,例如,用戶使用按鍵Ctrl、按鍵C實(shí)現(xiàn)復(fù)制功能時(shí),往往是先按下按鍵Ctrl,在按住按鍵Ctrl的過程中,再按下按鍵C;而在放開按鍵時(shí),往往是先放開按鍵C,再放開按鍵Ctrl。因此為了與用戶使用按鍵的順序一致,對(duì)上述第四種方式做如下改進(jìn):
若當(dāng)前事件為事件組合中的事件,則在檢測(cè)到當(dāng)前事件之后缺少放開事件后,繼續(xù)檢測(cè)當(dāng)前事件之后的事件組合中的事件之后是否缺少對(duì)應(yīng)的放開事件。若缺少對(duì)應(yīng)的放開事件,則在事件組合中的最后一個(gè)事件之后,按照事件組合中事件的順序反向添加放開事件;若不缺少對(duì)應(yīng)的放開事件,則在事件組合中的最后一個(gè)事件之后,添加對(duì)應(yīng)當(dāng)前事件的放開事件。
示例性的,鍵鼠腳本中記錄的事件依次為按鍵J按下事件、按鍵J放開事件、按鍵Ctrl按下事件、按鍵C按下事件、按鍵X按下事件、按鍵X放 開事件、鼠標(biāo)移動(dòng)事件、鼠標(biāo)移動(dòng)事件、鼠標(biāo)左鍵按下事件、鼠標(biāo)左鍵放開事件。若當(dāng)前事件為按鍵Ctrl按下事件,則在檢測(cè)到按鍵Ctrl按下事件之后缺少按鍵Ctrl放開事件后,繼續(xù)檢測(cè)到按鍵C按下事件之后缺少按鍵C放開事件。因此,在按鍵C按下事件之后按事件順序反向添加放開事件,即依次添加按鍵C放開事件、按鍵Ctrl放開事件,以使得事件在鍵鼠腳本中的順序與用戶的操作順序保持一致。
需要說明的是,對(duì)于上述不同的添加放開事件的方式,在添加對(duì)應(yīng)當(dāng)前事件的放開事件之后,終端會(huì)對(duì)該添加的放開事件做添加標(biāo)記,以區(qū)分已有的鍵鼠腳本中的事件和添加的事件。該標(biāo)記與上述事件類型、操作焦點(diǎn)的坐標(biāo)等信息的存儲(chǔ)形式相同,均可能占用一位、一個(gè)字節(jié),或者多個(gè)字節(jié)的存儲(chǔ)空間。當(dāng)檢測(cè)到當(dāng)前事件具有添加標(biāo)記時(shí),終端直接對(duì)下一事件以及下一事件之后的事件進(jìn)行檢測(cè),而不再對(duì)當(dāng)前事件之后的事件進(jìn)行檢測(cè)。
206、保存處理后的鍵鼠腳本。
本步驟與上述步驟106所述的保存處理后的鍵鼠腳本的內(nèi)容一致,在此不再贅述。
進(jìn)一步的,作為對(duì)上述各實(shí)施例的實(shí)現(xiàn),本發(fā)明實(shí)施例還提供了一種鍵鼠腳本處理的裝置,如圖3所示,該裝置包括:獲取單元31、檢測(cè)單元32、刪除單元33、添加單元34和保存單元35。其中,
獲取單元31,用于獲取待執(zhí)行的鍵鼠腳本;
檢測(cè)單元32,用于檢測(cè)獲取單元31獲取的鍵鼠腳本中是否存在冗余事件,冗余事件為對(duì)鍵鼠腳本的回放狀態(tài)不產(chǎn)生影響的事件;
刪除單元33,用于當(dāng)檢測(cè)單元32檢測(cè)到鍵鼠腳本中存在冗余事件時(shí),將冗余事件刪除;
檢測(cè)單元32,還用于檢測(cè)鍵鼠腳本中是否缺少必要事件,必要事件為應(yīng)當(dāng)記錄在鍵鼠腳本中的事件;
添加單元34,用于當(dāng)檢測(cè)單元32檢測(cè)到鍵鼠腳本中缺少必要事件時(shí),添加必要事件;
保存單元35,用于保存處理后的鍵鼠腳本。
進(jìn)一步的,檢測(cè)單元32,用于判斷獲取單元31獲取的鍵鼠腳本中是否存在與預(yù)設(shè)優(yōu)化條件匹配的事件集合;
刪除單元33,用于當(dāng)檢測(cè)單元32檢測(cè)到鍵鼠腳本中存在與預(yù)設(shè)優(yōu)化條件匹配的事件集合時(shí),確定與預(yù)設(shè)優(yōu)化條件匹配的事件集合中的事件為冗余事件,并將冗余事件刪除。
進(jìn)一步的,如圖4所示,檢測(cè)單元32,包括:
第一檢測(cè)模塊321,用于檢測(cè)鍵鼠腳本中是否存在多個(gè)連續(xù)的鼠標(biāo)移動(dòng)事件;
第一確定模塊322,用于當(dāng)?shù)谝粰z測(cè)模塊321檢測(cè)到鍵鼠腳本中存在多個(gè)連續(xù)的鼠標(biāo)移動(dòng)事件時(shí),確定多個(gè)連續(xù)的鼠標(biāo)移動(dòng)事件與預(yù)設(shè)優(yōu)化條件匹配。
第一檢測(cè)模塊321,還用于在確定多個(gè)連續(xù)的鼠標(biāo)移動(dòng)事件與預(yù)設(shè)優(yōu)化條件匹配之前,檢測(cè)多個(gè)連續(xù)的鼠標(biāo)移動(dòng)事件中最后一個(gè)事件之后的時(shí)間間隔是否大于第一預(yù)設(shè)時(shí)間閾值;
第一確定模塊322,還用于當(dāng)?shù)谝粰z測(cè)模塊321檢測(cè)到多個(gè)連續(xù)的鼠標(biāo)移動(dòng)事件中最后一個(gè)事件之后的時(shí)間間隔大于第一預(yù)設(shè)時(shí)間閾值時(shí),確定多個(gè)連續(xù)的鼠標(biāo)移動(dòng)事件與預(yù)設(shè)優(yōu)化條件匹配。
第二檢測(cè)模塊323,用于檢測(cè)多個(gè)連續(xù)的相同按下事件中相鄰事件之間的時(shí)間間隔之和是否大于第二預(yù)設(shè)時(shí)間閾值;
第二確定模塊324,用于當(dāng)?shù)诙z測(cè)模塊323檢測(cè)到時(shí)間間隔之和大于第二預(yù)設(shè)時(shí)間閾值時(shí),確定多個(gè)連續(xù)的相同按下事件與預(yù)設(shè)優(yōu)化條件匹配。
第二檢測(cè)模塊323使用的第二預(yù)設(shè)時(shí)間閾值為應(yīng)用開發(fā)商提供的應(yīng)用操作的最長時(shí)間閾值,或者為后臺(tái)統(tǒng)計(jì)的應(yīng)用操作的最長時(shí)間閾值。
第三檢測(cè)模塊325,用于檢測(cè)鍵鼠腳本中是否存在預(yù)設(shè)按鍵以外的按鍵所觸發(fā)的事件;
第三確定模塊326,用于當(dāng)?shù)谌龣z測(cè)模塊325檢測(cè)到鍵鼠腳本中存在預(yù)設(shè)按鍵以外的按鍵所觸發(fā)的事件時(shí),確定預(yù)設(shè)按鍵以外的按鍵所觸發(fā)的事件與預(yù)設(shè)優(yōu)化條件匹配。
第三檢測(cè)模塊325使用的預(yù)設(shè)按鍵為應(yīng)用開發(fā)商提供的用于觸發(fā)應(yīng)用 操作的按鍵,或者為后臺(tái)統(tǒng)計(jì)的用于觸發(fā)應(yīng)用操作的按鍵。
讀取模塊327,用于從事件中讀取操作焦點(diǎn)的坐標(biāo);
判斷模塊328,用于判斷讀取模塊327讀取的坐標(biāo)是否位于目標(biāo)窗口;
第四確定模塊329,用于當(dāng)判斷模塊328判斷結(jié)果為坐標(biāo)不位于目標(biāo)窗口時(shí),確定不位于目標(biāo)窗口的坐標(biāo)對(duì)應(yīng)的事件與預(yù)設(shè)優(yōu)化條件匹配。
刪除單元33,還用于在將冗余事件刪除之后,將多個(gè)連續(xù)的時(shí)間間隔合并為一個(gè)時(shí)間間隔。
進(jìn)一步的,檢測(cè)單元32,用于檢測(cè)當(dāng)前事件之后是否缺少與當(dāng)前事件對(duì)應(yīng)的放開事件;
添加單元34,用于當(dāng)檢測(cè)單元32檢測(cè)到當(dāng)前事件之后缺少與當(dāng)前事件對(duì)應(yīng)的放開事件時(shí),在當(dāng)前事件之后添加放開事件。
進(jìn)一步的,如圖4所示,檢測(cè)單元32,包括:
第四檢測(cè)模塊3210,用于檢測(cè)當(dāng)前事件是否為按下事件,若當(dāng)前事件為按下事件,則檢測(cè)當(dāng)前事件之后是否缺少放開事件。
第五檢測(cè)模塊3211,用于檢測(cè)當(dāng)前事件之后的所有事件中是否缺少放開事件。
第六檢測(cè)模塊3212,用于檢測(cè)與當(dāng)前事件相鄰的下一事件是否為放開事件。
進(jìn)一步的,如圖4所示,添加單元34,包括:
第一添加模塊341,用于在當(dāng)前事件之后、與當(dāng)前事件相鄰的下一事件之前,添加放開事件。
第一檢測(cè)模塊342,用于檢測(cè)與當(dāng)前事件相鄰的連續(xù)至少一個(gè)事件是否均與當(dāng)前事件相同;
第二添加模塊343,用于當(dāng)?shù)谝粰z測(cè)模塊342檢測(cè)到與當(dāng)前事件相鄰的連續(xù)至少一個(gè)事件均與當(dāng)前事件相同時(shí),在連續(xù)至少一個(gè)事件中的最后一個(gè)事件之后,添加放開事件。
第三添加模塊344,用于在所有事件之后添加放開事件。
第二檢測(cè)模塊345,用于檢測(cè)當(dāng)前事件是否為事件組合中的事件,事件 組合由觸發(fā)組合鍵所產(chǎn)生的多個(gè)事件組成;
第四添加模塊346,用于當(dāng)?shù)诙z測(cè)模塊345檢測(cè)到當(dāng)前事件為事件組合中的事件時(shí),在事件組合中的最后一個(gè)事件之后,添加對(duì)應(yīng)當(dāng)前事件的放開事件。
本發(fā)明實(shí)施例提供的鍵鼠腳本處理的裝置,能夠在獲取待執(zhí)行的鍵鼠腳本后,檢測(cè)鍵鼠腳本中有無冗余事件以及是否缺少必要事件,當(dāng)有冗余事件時(shí),將冗余事件刪除,當(dāng)缺少必要事件時(shí),添加必要事件,從而得到處理后的鍵鼠腳本。與現(xiàn)有技術(shù)中直接執(zhí)行錄制的鍵鼠腳本相比,本發(fā)明不但可以使鍵鼠腳本的數(shù)據(jù)量減小,而且還能夠避免因缺少必要事件而造成Windows異?,F(xiàn)象的出現(xiàn)。
本發(fā)明實(shí)施例公開了:
A1、一種鍵鼠腳本處理的方法,所述方法包括:
獲取待執(zhí)行的鍵鼠腳本;
檢測(cè)所述鍵鼠腳本中是否存在冗余事件,所述冗余事件為對(duì)所述鍵鼠腳本的回放狀態(tài)不產(chǎn)生影響的事件;
若所述鍵鼠腳本中存在所述冗余事件,則將所述冗余事件刪除;
檢測(cè)所述鍵鼠腳本中是否缺少必要事件,所述必要事件為應(yīng)當(dāng)記錄在所述鍵鼠腳本中的事件;
若所述鍵鼠腳本中缺少所述必要事件,則添加所述必要事件;
保存處理后的鍵鼠腳本。
A2、根據(jù)A1所述的方法,所述檢測(cè)所述鍵鼠腳本中是否存在冗余事件,包括:
判斷所述鍵鼠腳本中是否存在與預(yù)設(shè)優(yōu)化條件匹配的事件集合;
所述若所述鍵鼠腳本中存在所述冗余事件,則將所述冗余事件刪除,包括:
若所述鍵鼠腳本中存在與預(yù)設(shè)優(yōu)化條件匹配的事件集合,則確定所述與預(yù)設(shè)優(yōu)化條件匹配的事件集合中的事件為冗余事件,并將所述冗余事件刪除。
A3、根據(jù)A2所述的方法,所述判斷所述鍵鼠腳本中是否存在與預(yù)設(shè) 優(yōu)化條件匹配的事件集合,包括:
檢測(cè)所述鍵鼠腳本中是否存在多個(gè)連續(xù)的鼠標(biāo)移動(dòng)事件;
若所述鍵鼠腳本中存在多個(gè)連續(xù)的鼠標(biāo)移動(dòng)事件,則確定所述多個(gè)連續(xù)的鼠標(biāo)移動(dòng)事件與所述預(yù)設(shè)優(yōu)化條件匹配。
A4、根據(jù)A3所述的方法,在所述確定所述多個(gè)連續(xù)的鼠標(biāo)移動(dòng)事件與所述預(yù)設(shè)優(yōu)化條件匹配之前,所述方法進(jìn)一步包括:
檢測(cè)所述多個(gè)連續(xù)的鼠標(biāo)移動(dòng)事件中最后一個(gè)事件之后的時(shí)間間隔是否大于第一預(yù)設(shè)時(shí)間閾值;
所述確定所述多個(gè)連續(xù)的鼠標(biāo)移動(dòng)事件與所述預(yù)設(shè)優(yōu)化條件匹配,包括:
若所述多個(gè)連續(xù)的鼠標(biāo)移動(dòng)事件中最后一個(gè)事件之后的時(shí)間間隔大于所述第一預(yù)設(shè)時(shí)間閾值,則確定所述多個(gè)連續(xù)的鼠標(biāo)移動(dòng)事件與所述預(yù)設(shè)優(yōu)化條件匹配。
A5、根據(jù)A2所述的方法,所述判斷所述鍵鼠腳本中是否存在與預(yù)設(shè)優(yōu)化條件匹配的事件集合,包括:
檢測(cè)多個(gè)連續(xù)的相同按下事件中相鄰事件之間的時(shí)間間隔之和是否大于第二預(yù)設(shè)時(shí)間閾值;
若所述時(shí)間間隔之和大于所述第二預(yù)設(shè)時(shí)間閾值,則確定所述多個(gè)連續(xù)的相同按下事件與所述預(yù)設(shè)優(yōu)化條件匹配。
A6、根據(jù)A5所述的方法,所述第二預(yù)設(shè)時(shí)間閾值為應(yīng)用開發(fā)商提供的應(yīng)用操作的最長時(shí)間閾值;
或者,所述第二預(yù)設(shè)時(shí)間閾值為后臺(tái)統(tǒng)計(jì)的應(yīng)用操作的最長時(shí)間閾值。
A7、根據(jù)A2所述的方法,所述判斷所述鍵鼠腳本中是否存在與預(yù)設(shè)優(yōu)化條件匹配的事件集合,包括:
檢測(cè)所述鍵鼠腳本中是否存在預(yù)設(shè)按鍵以外的按鍵所觸發(fā)的事件;
若所述鍵鼠腳本中存在預(yù)設(shè)按鍵以外的按鍵所觸發(fā)的事件,則確定所述預(yù)設(shè)按鍵以外的按鍵所觸發(fā)的事件與所述預(yù)設(shè)優(yōu)化條件匹配。
A8、根據(jù)A7所述的方法,所述預(yù)設(shè)按鍵為應(yīng)用開發(fā)商提供的用于觸發(fā)應(yīng)用操作的按鍵;
或者,所述預(yù)設(shè)按鍵為后臺(tái)統(tǒng)計(jì)的用于觸發(fā)應(yīng)用操作的按鍵。
A9、根據(jù)A2所述的方法,所述判斷所述鍵鼠腳本中是否存在與預(yù)設(shè)優(yōu)化條件匹配的事件集合,包括:
從事件中讀取操作焦點(diǎn)的坐標(biāo);
判斷所述坐標(biāo)是否位于目標(biāo)窗口;
若所述坐標(biāo)不位于所述目標(biāo)窗口,則確定不位于所述目標(biāo)窗口的所述坐標(biāo)對(duì)應(yīng)的事件與所述預(yù)設(shè)優(yōu)化條件匹配。
A10、根據(jù)A1至A9中任意一項(xiàng)所述的方法,在所述將所述冗余事件刪除之后,所述方法進(jìn)一步包括:
將多個(gè)連續(xù)的時(shí)間間隔合并為一個(gè)時(shí)間間隔。
A11、根據(jù)A1所述的方法,所述檢測(cè)所述鍵鼠腳本中是否缺少必要事件,包括:
檢測(cè)當(dāng)前事件之后是否缺少與所述當(dāng)前事件對(duì)應(yīng)的放開事件;
所述若所述鍵鼠腳本中缺少所述必要事件,則添加所述必要事件,包括:
若所述當(dāng)前事件之后缺少與所述當(dāng)前事件對(duì)應(yīng)的放開事件,則在所述當(dāng)前事件之后添加所述放開事件。
A12、根據(jù)A11所述的方法,所述檢測(cè)當(dāng)前事件之后是否缺少與所述當(dāng)前事件對(duì)應(yīng)的放開事件,包括:
檢測(cè)所述當(dāng)前事件是否為按下事件;
若所述當(dāng)前事件為按下事件,則檢測(cè)所述當(dāng)前事件之后是否缺少所述放開事件。
A13、根據(jù)A11所述的方法,所述檢測(cè)當(dāng)前事件之后是否缺少與所述當(dāng)前事件對(duì)應(yīng)的放開事件,包括:
檢測(cè)所述當(dāng)前事件之后的所有事件中是否缺少所述放開事件。
A14、根據(jù)A11所述的方法,所述檢測(cè)當(dāng)前事件之后是否缺少與所述當(dāng)前事件對(duì)應(yīng)的放開事件,包括:
檢測(cè)與所述當(dāng)前事件相鄰的下一事件是否為所述放開事件。
A15、根據(jù)A11所述的方法,所述在所述當(dāng)前事件之后添加所述放開 事件,包括:
在所述當(dāng)前事件之后、與所述當(dāng)前事件相鄰的下一事件之前,添加所述放開事件。
A16、根據(jù)A11所述的方法,所述在所述當(dāng)前事件之后添加所述放開事件,包括:
檢測(cè)與所述當(dāng)前事件相鄰的連續(xù)至少一個(gè)事件是否均與所述當(dāng)前事件相同;
若與所述當(dāng)前事件相鄰的連續(xù)至少一個(gè)事件均與所述當(dāng)前事件相同,則在所述連續(xù)至少一個(gè)事件中的最后一個(gè)事件之后,添加所述放開事件。
A17、根據(jù)A11所述的方法,所述在所述當(dāng)前事件之后添加所述放開事件,包括:
在所有事件之后添加所述放開事件。
A18、根據(jù)A11所述的方法,所述在所述當(dāng)前事件之后添加所述放開事件,包括:
檢測(cè)所述當(dāng)前事件是否為事件組合中的事件,所述事件組合由觸發(fā)組合鍵所產(chǎn)生的多個(gè)事件組成;
若所述當(dāng)前事件為事件組合中的事件,則在所述事件組合中的最后一個(gè)事件之后,添加對(duì)應(yīng)所述當(dāng)前事件的放開事件。
B19、一種鍵鼠腳本處理的裝置,所述裝置包括:
獲取單元,用于獲取待執(zhí)行的鍵鼠腳本;
檢測(cè)單元,用于檢測(cè)所述獲取單元獲取的所述鍵鼠腳本中是否存在冗余事件,所述冗余事件為對(duì)所述鍵鼠腳本的回放狀態(tài)不產(chǎn)生影響的事件;
刪除單元,用于當(dāng)所述檢測(cè)單元檢測(cè)到所述鍵鼠腳本中存在所述冗余事件時(shí),將所述冗余事件刪除;
所述檢測(cè)單元,還用于檢測(cè)所述鍵鼠腳本中是否缺少必要事件,所述必要事件為應(yīng)當(dāng)記錄在所述鍵鼠腳本中的事件;
添加單元,用于當(dāng)所述檢測(cè)單元檢測(cè)到所述鍵鼠腳本中缺少所述必要事件時(shí),添加所述必要事件;
保存單元,用于保存處理后的鍵鼠腳本。
B20、根據(jù)B19所述的裝置,所述檢測(cè)單元,用于判斷所述獲取單元獲取的所述鍵鼠腳本中是否存在與預(yù)設(shè)優(yōu)化條件匹配的事件集合;
所述刪除單元,用于當(dāng)所述檢測(cè)單元檢測(cè)到所述鍵鼠腳本中存在與預(yù)設(shè)優(yōu)化條件匹配的事件集合時(shí),確定所述與預(yù)設(shè)優(yōu)化條件匹配的事件集合中的事件為冗余事件,并將所述冗余事件刪除。
B21、根據(jù)B20所述的裝置,所述檢測(cè)單元,包括:
第一檢測(cè)模塊,用于檢測(cè)所述鍵鼠腳本中是否存在多個(gè)連續(xù)的鼠標(biāo)移動(dòng)事件;
第一確定模塊,用于當(dāng)所述第一檢測(cè)模塊檢測(cè)到所述鍵鼠腳本中存在多個(gè)連續(xù)的鼠標(biāo)移動(dòng)事件時(shí),確定所述多個(gè)連續(xù)的鼠標(biāo)移動(dòng)事件與所述預(yù)設(shè)優(yōu)化條件匹配。
B22、根據(jù)B21所述的裝置,所述第一檢測(cè)模塊,還用于在所述確定所述多個(gè)連續(xù)的鼠標(biāo)移動(dòng)事件與所述預(yù)設(shè)優(yōu)化條件匹配之前,檢測(cè)所述多個(gè)連續(xù)的鼠標(biāo)移動(dòng)事件中最后一個(gè)事件之后的時(shí)間間隔是否大于第一預(yù)設(shè)時(shí)間閾值;
所述第一確定模塊,還用于當(dāng)所述第一檢測(cè)模塊檢測(cè)到所述多個(gè)連續(xù)的鼠標(biāo)移動(dòng)事件中最后一個(gè)事件之后的時(shí)間間隔大于所述第一預(yù)設(shè)時(shí)間閾值時(shí),確定所述多個(gè)連續(xù)的鼠標(biāo)移動(dòng)事件與所述預(yù)設(shè)優(yōu)化條件匹配。
B23、根據(jù)B20所述的裝置,所述檢測(cè)單元,包括:
第二檢測(cè)模塊,用于檢測(cè)多個(gè)連續(xù)的相同按下事件中相鄰事件之間的時(shí)間間隔之和是否大于第二預(yù)設(shè)時(shí)間閾值;
第二確定模塊,用于當(dāng)所述第二檢測(cè)模塊檢測(cè)到所述時(shí)間間隔之和大于所述第二預(yù)設(shè)時(shí)間閾值時(shí),確定所述多個(gè)連續(xù)的相同按下事件與所述預(yù)設(shè)優(yōu)化條件匹配。
B24、根據(jù)B23所述的裝置,所述第二檢測(cè)模塊使用的所述第二預(yù)設(shè)時(shí)間閾值為應(yīng)用開發(fā)商提供的應(yīng)用操作的最長時(shí)間閾值,或者為后臺(tái)統(tǒng)計(jì)的應(yīng)用操作的最長時(shí)間閾值。
B25、根據(jù)B20所述的裝置,所述檢測(cè)單元,包括:
第三檢測(cè)模塊,用于檢測(cè)所述鍵鼠腳本中是否存在預(yù)設(shè)按鍵以外的按鍵所觸發(fā)的事件;
第三確定模塊,用于當(dāng)所述第三檢測(cè)模塊檢測(cè)到所述鍵鼠腳本中存在預(yù)設(shè)按鍵以外的按鍵所觸發(fā)的事件時(shí),確定所述預(yù)設(shè)按鍵以外的按鍵所觸發(fā)的事件與所述預(yù)設(shè)優(yōu)化條件匹配。
B26、根據(jù)B25所述的裝置,所述第三檢測(cè)模塊使用的所述預(yù)設(shè)按鍵為應(yīng)用開發(fā)商提供的用于觸發(fā)應(yīng)用操作的按鍵,或者為后臺(tái)統(tǒng)計(jì)的用于觸發(fā)應(yīng)用操作的按鍵。
B27、根據(jù)B20所述的裝置,所述檢測(cè)單元,包括:
讀取模塊,用于從事件中讀取操作焦點(diǎn)的坐標(biāo);
判斷模塊,用于判斷所述讀取模塊讀取的所述坐標(biāo)是否位于目標(biāo)窗口;
第四確定模塊,用于當(dāng)所述判斷模塊判斷結(jié)果為所述坐標(biāo)不位于所述目標(biāo)窗口時(shí),確定不位于所述目標(biāo)窗口的所述坐標(biāo)對(duì)應(yīng)的事件與所述預(yù)設(shè)優(yōu)化條件匹配。
B28、根據(jù)B19至B27中任意一項(xiàng)所述的裝置,所述刪除單元,還用于在所述將所述冗余事件刪除之后,將多個(gè)連續(xù)的時(shí)間間隔合并為一個(gè)時(shí)間間隔。
B29、根據(jù)B19所述的裝置,所述檢測(cè)單元,用于檢測(cè)當(dāng)前事件之后是否缺少與所述當(dāng)前事件對(duì)應(yīng)的放開事件;
所述添加單元,用于當(dāng)所述檢測(cè)單元檢測(cè)到所述當(dāng)前事件之后缺少與所述當(dāng)前事件對(duì)應(yīng)的放開事件時(shí),在所述當(dāng)前事件之后添加所述放開事件。
B30、根據(jù)B29所述的裝置,所述檢測(cè)單元,包括:
第四檢測(cè)模塊,用于檢測(cè)所述當(dāng)前事件是否為按下事件,若所述當(dāng)前事件為按下事件,則檢測(cè)所述當(dāng)前事件之后是否缺少所述放開事件。
B31、根據(jù)B29所述的裝置,所述檢測(cè)單元,包括:
第五檢測(cè)模塊,用于檢測(cè)所述當(dāng)前事件之后的所有事件中是否缺少所述放開事件。
B32、根據(jù)B29所述的裝置,所述檢測(cè)單元,包括:
第六檢測(cè)模塊,用于檢測(cè)與所述當(dāng)前事件相鄰的下一事件是否為所述 放開事件。
B33、根據(jù)B29所述的裝置,所述添加單元,包括:
第一添加模塊,用于在所述當(dāng)前事件之后、與所述當(dāng)前事件相鄰的下一事件之前,添加所述放開事件。
B34、根據(jù)B29所述的裝置,所述添加單元,包括:
第一檢測(cè)模塊,用于檢測(cè)與所述當(dāng)前事件相鄰的連續(xù)至少一個(gè)事件是否均與所述當(dāng)前事件相同;
第二添加模塊,用于當(dāng)所述第一檢測(cè)模塊檢測(cè)到與所述當(dāng)前事件相鄰的連續(xù)至少一個(gè)事件均與所述當(dāng)前事件相同時(shí),在所述連續(xù)至少一個(gè)事件中的最后一個(gè)事件之后,添加所述放開事件。
B35、根據(jù)B29所述的裝置,所述添加單元,包括:
第三添加模塊,用于在所有事件之后添加所述放開事件。
B36、根據(jù)B29所述的裝置,所述添加單元,包括:
第二檢測(cè)模塊,用于檢測(cè)所述當(dāng)前事件是否為事件組合中的事件,所述事件組合由觸發(fā)組合鍵所產(chǎn)生的多個(gè)事件組成;
第四添加模塊,用于當(dāng)所述第二檢測(cè)模塊檢測(cè)到所述當(dāng)前事件為事件組合中的事件時(shí),在所述事件組合中的最后一個(gè)事件之后,添加對(duì)應(yīng)所述當(dāng)前事件的放開事件。
在上述實(shí)施例中,對(duì)各個(gè)實(shí)施例的描述都各有側(cè)重,某個(gè)實(shí)施例中沒有詳述的部分,可以參見其他實(shí)施例的相關(guān)描述。
可以理解的是,上述方法及裝置中的相關(guān)特征可以相互參考。另外,上述實(shí)施例中的“第一”、“第二”等是用于區(qū)分各實(shí)施例,而并不代表各實(shí)施例的優(yōu)劣。
所屬領(lǐng)域的技術(shù)人員可以清楚地了解到,為描述的方便和簡潔,上述描述的系統(tǒng),裝置和單元的具體工作過程,可以參考前述方法實(shí)施例中的對(duì)應(yīng)過程,在此不再贅述。
在此提供的算法和顯示不與任何特定計(jì)算機(jī)、虛擬系統(tǒng)或者其它設(shè)備固有相關(guān)。各種通用系統(tǒng)也可以與基于在此的示教一起使用。根據(jù)上面的 描述,構(gòu)造這類系統(tǒng)所要求的結(jié)構(gòu)是顯而易見的。此外,本發(fā)明也不針對(duì)任何特定編程語言。應(yīng)當(dāng)明白,可以利用各種編程語言實(shí)現(xiàn)在此描述的本發(fā)明的內(nèi)容,并且上面對(duì)特定語言所做的描述是為了披露本發(fā)明的最佳實(shí)施方式。
在此處所提供的說明書中,說明了大量具體細(xì)節(jié)。然而,能夠理解,本發(fā)明的實(shí)施例可以在沒有這些具體細(xì)節(jié)的情況下實(shí)踐。在一些實(shí)例中,并未詳細(xì)示出公知的方法、結(jié)構(gòu)和技術(shù),以便不模糊對(duì)本說明書的理解。
類似地,應(yīng)當(dāng)理解,為了精簡本公開并幫助理解各個(gè)發(fā)明方面中的一個(gè)或多個(gè),在上面對(duì)本發(fā)明的示例性實(shí)施例的描述中,本發(fā)明的各個(gè)特征有時(shí)被一起分組到單個(gè)實(shí)施例、圖、或者對(duì)其的描述中。然而,并不應(yīng)將該公開的方法解釋成反映如下意圖:即所要求保護(hù)的本發(fā)明要求比在每個(gè)權(quán)利要求中所明確記載的特征更多的特征。更確切地說,如下面的權(quán)利要求書所反映的那樣,發(fā)明方面在于少于前面公開的單個(gè)實(shí)施例的所有特征。因此,遵循具體實(shí)施方式的權(quán)利要求書由此明確地并入該具體實(shí)施方式,其中每個(gè)權(quán)利要求本身都作為本發(fā)明的單獨(dú)實(shí)施例。
本領(lǐng)域那些技術(shù)人員可以理解,可以對(duì)實(shí)施例中的設(shè)備中的模塊進(jìn)行自適應(yīng)性地改變并且把它們?cè)O(shè)置在與該實(shí)施例不同的一個(gè)或多個(gè)設(shè)備中??梢园褜?shí)施例中的模塊或單元或組件組合成一個(gè)模塊或單元或組件,以及此外可以把它們分成多個(gè)子模塊或子單元或子組件。除了這樣的特征和/或過程或者單元中的至少一些是相互排斥之外,可以采用任何組合對(duì)本說明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的所有特征以及如此公開的任何方法或者設(shè)備的所有過程或單元進(jìn)行組合。除非另外明確陳述,本說明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的每個(gè)特征可以由提供相同、等同或相似目的的替代特征來代替。
此外,本領(lǐng)域的技術(shù)人員能夠理解,盡管在此所述的一些實(shí)施例包括其它實(shí)施例中所包括的某些特征而不是其它特征,但是不同實(shí)施例的特征的組合意味著處于本發(fā)明的范圍之內(nèi)并且形成不同的實(shí)施例。例如,在下面的權(quán)利要求書中,所要求保護(hù)的實(shí)施例的任意之一都可以以任意的組合方式來使用。
本發(fā)明的各個(gè)部件實(shí)施例可以以硬件實(shí)現(xiàn),或者以在一個(gè)或者多個(gè)處理器上運(yùn)行的軟件模塊實(shí)現(xiàn),或者以它們的組合實(shí)現(xiàn)。本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)理解,可以在實(shí)踐中使用微處理器或者數(shù)字信號(hào)處理器(DSP)來實(shí)現(xiàn)根據(jù)本發(fā)明實(shí)施例的一種網(wǎng)絡(luò)通訊的方法、裝置及系統(tǒng)中的一些或者全部部件的一些或者全部功能。本發(fā)明還可以實(shí)現(xiàn)為用于執(zhí)行這里所描述的方法的一部分或者全部的設(shè)備或者裝置程序(例如,計(jì)算機(jī)程序和計(jì)算機(jī)程序產(chǎn)品)。這樣的實(shí)現(xiàn)本發(fā)明的程序可以存儲(chǔ)在計(jì)算機(jī)可讀介質(zhì)上,或者可以具有一個(gè)或者多個(gè)信號(hào)的形式。這樣的信號(hào)可以從因特網(wǎng)網(wǎng)站上下載得到,或者在載體信號(hào)上提供,或者以任何其他形式提供。
應(yīng)該注意的是上述實(shí)施例對(duì)本發(fā)明進(jìn)行說明而不是對(duì)本發(fā)明進(jìn)行限制,并且本領(lǐng)域技術(shù)人員在不脫離所附權(quán)利要求的范圍的情況下可設(shè)計(jì)出替換實(shí)施例。在權(quán)利要求中,不應(yīng)將位于括號(hào)之間的任何參考符號(hào)構(gòu)造成對(duì)權(quán)利要求的限制。單詞“包含”不排除存在未列在權(quán)利要求中的元件或步驟。位于元件之前的單詞“一”或“一個(gè)”不排除存在多個(gè)這樣的元件。本發(fā)明可以借助于包括有若干不同元件的硬件以及借助于適當(dāng)編程的計(jì)算機(jī)來實(shí)現(xiàn)。在列舉了若干裝置的單元權(quán)利要求中,這些裝置中的若干個(gè)可以是通過同一個(gè)硬件項(xiàng)來具體體現(xiàn)。單詞第一、第二、以及第三等的使用不表示任何順序??蓪⑦@些單詞解釋為名稱。