本發(fā)明涉及互聯(lián)網(wǎng)技術(shù)領(lǐng)域,尤其涉及一種鍵鼠操作回放的方法和裝置。
背景技術(shù):
鍵盤和鼠標(biāo)均為用戶設(shè)備的輸入設(shè)備,當(dāng)用戶玩游戲或者進(jìn)行編輯文檔等窗口操作時(shí),往往需要對某個(gè)操作過程進(jìn)行重復(fù)執(zhí)行,例如,重復(fù)點(diǎn)擊鼠標(biāo)左鍵,或者以一定的順序重復(fù)點(diǎn)擊鍵盤中的不同方向鍵。為了簡化用戶的重復(fù)操作,現(xiàn)有技術(shù)提出了一種模擬用戶操作鍵盤和鼠標(biāo)的方式。在該方式中,用戶設(shè)備可以在用戶第一次執(zhí)行鍵鼠操作時(shí),對用戶的鍵鼠操作進(jìn)行錄制,獲得鍵鼠腳本,并在后續(xù)對鍵鼠腳本進(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)行記錄,與此對應(yīng)的,針對某個(gè)按鍵的一次操作就包含了按下和放開兩個(gè)事件。例如錄制時(shí)用戶觸發(fā)了鍵盤上的按鍵W,則用戶設(shè)備會(huì)在腳本中記錄一個(gè)按鍵W按下的事件和一個(gè)按鍵W放開的事件,相應(yīng)地,在腳本回放時(shí),用戶設(shè)備也會(huì)順序執(zhí)行按鍵W的按下事件以及按鍵W的放開事件。對于包含104個(gè)按鍵的標(biāo)準(zhǔn)鍵盤而言,鍵盤所涉及的事件數(shù)量為208個(gè),再加上分別對應(yīng)鼠標(biāo)左鍵、滾輪及右鍵的按下和放開事件,涉及鍵鼠按鍵的事件數(shù)量一共有214種。
目前,現(xiàn)有技術(shù)中存在兩種腳本回放模式,即后臺(tái)模式和托管模式,這兩種回放模式都是基于執(zhí)行腳本事件的方式實(shí)現(xiàn)的鍵鼠操作回放。實(shí)際應(yīng)用中,不論采用何種模式進(jìn)行回放,在回放過程中用戶插入的手動(dòng)操作都會(huì)影響事件的回放(包括針對目的窗口的操作以及針對其他窗口的操作)。例如用戶的手動(dòng)操作會(huì)干擾到按鍵W的放開事件的執(zhí)行,其放開的 效果并未真正作用到目的窗口中。這種情況下,按鍵W雖然被模擬按下,但是缺失了按鍵W的放開效果,在回放結(jié)束后按鍵W仍持續(xù)處于按下的狀態(tài),由此導(dǎo)致目的窗口或者其他窗口發(fā)生卡死的現(xiàn)象,使得用戶無法對目的窗口或其他窗口進(jìn)行打開、關(guān)閉、拖動(dòng)等操作,進(jìn)而出現(xiàn)Windows異常。
技術(shù)實(shí)現(xiàn)要素:
有鑒于此,本發(fā)明提供的鍵鼠操作回放的方法和裝置,能夠解決鍵鼠操作回放所導(dǎo)致的Windows異常的問題。
為解決上述技術(shù)問題,一方面,本發(fā)明提出了一種鍵鼠操作回放的方法,所述方法包括:
獲取待執(zhí)行的鍵鼠腳本;
順序執(zhí)行所述鍵鼠腳本中的各個(gè)事件;
檢測當(dāng)前事件之后是否存在與所述當(dāng)前事件對應(yīng)的放開事件;
若所述當(dāng)前事件之后不存在與所述當(dāng)前事件對應(yīng)的放開事件,則在所述當(dāng)前事件之后添加所述放開事件。
另一方面,本發(fā)明提出了一種鍵鼠操作回放的裝置,所述裝置包括:
獲取單元,用于獲取待執(zhí)行的鍵鼠腳本;
執(zhí)行單元,用于順序執(zhí)行所述獲取單元獲取的所述鍵鼠腳本中的各個(gè)事件;
檢測單元,用于檢測當(dāng)前事件之后是否存在與所述當(dāng)前事件對應(yīng)的放開事件;
添加單元,用于當(dāng)所述檢測單元檢測到所述當(dāng)前事件之后不存在與所述當(dāng)前事件對應(yīng)的放開事件時(shí),在所述當(dāng)前事件之后添加所述放開事件。
借由上述技術(shù)方案,本發(fā)明提供的鍵鼠操作回放的方法和裝置,能夠在獲取待執(zhí)行的鍵鼠腳本后,順序執(zhí)行鍵鼠腳本中的各個(gè)事件,并且檢測當(dāng)前事件之后有無與其對應(yīng)的放開事件,若無,則將放開事件添加在當(dāng)前事件之后。與現(xiàn)有技術(shù)中直接對獲取的待執(zhí)行鍵鼠腳本中的事件依次執(zhí)行相比,本發(fā)明能夠使得鍵鼠腳本中的按下事件之后一定存在放開事件,從而保證了鍵鼠腳本的正?;胤?,進(jìn)而避免了因缺少放開事件而造成Windows異常的現(xiàn)象。
上述說明僅是本發(fā)明技術(shù)方案的概述,為了能夠更清楚了解本發(fā)明的技術(shù)手段,而可依照說明書的內(nèi)容予以實(shí)施,并且為了讓本發(fā)明的上述和其它目的、特征和優(yōu)點(diǎn)能夠更明顯易懂,以下特舉本發(fā)明的具體實(shí)施方式。
附圖說明
通過閱讀下文優(yōu)選實(shí)施方式的詳細(xì)描述,各種其他的優(yōu)點(diǎn)和益處對于本領(lǐng)域普通技術(shù)人員將變得清楚明了。附圖僅用于示出優(yōu)選實(shí)施方式的目的,而并不認(rèn)為是對本發(fā)明的限制。而且在整個(gè)附圖中,用相同的參考符號(hào)表示相同的部件。在附圖中:
圖1示出了一種鍵鼠操作回放的方法的流程圖;
圖2示出了鍵鼠腳本的示意圖;
圖3示出了一種鍵鼠操作回放的裝置的結(jié)構(gòu)示意圖;
圖4示出了另一種鍵鼠操作回放的裝置的結(jié)構(gòu)示意圖。
具體實(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í)行的鍵鼠腳本。
其中,鍵鼠腳本以事件的形式順序記錄用戶對鍵盤或鼠標(biāo)的每一次操作,并且記錄相鄰操作之間的時(shí)間間隔,形成一個(gè)線性集合。
例如,圖2為一個(gè)鍵鼠腳本示意圖,該鍵鼠腳本中依次記錄按鍵A按下事件、100ms、按鍵A放開事件、5s、按鍵C按下事件、80ms、按鍵C放開事件、10s、鼠標(biāo)左鍵按下事件、90ms、鼠標(biāo)左鍵放開事件、8s、按鍵回車按下事件,說明用戶在整個(gè)操作過程中,先對按鍵A進(jìn)行了操作,5s后,對按鍵C進(jìn)行了操作,10s后,對鼠標(biāo)左鍵進(jìn)行了操作,8s后,又對按鍵回車進(jìn)行了操作。上述時(shí)間數(shù)值表示相鄰事件之間的時(shí)間間隔,本實(shí) 施例中的數(shù)值僅為舉例說明,不作為對實(shí)際應(yīng)用的具體限定。
需要說明的是,由于時(shí)間間隔并不會(huì)對鍵鼠腳本的回放或者Windows系統(tǒng)產(chǎn)生異常,所以在以下步驟中僅針對鍵鼠腳本中的事件進(jìn)行檢測。
102、順序執(zhí)行鍵鼠腳本中的各個(gè)事件。
由于鍵鼠腳本中的各個(gè)事件是按照時(shí)間順序進(jìn)行記錄的,所以在執(zhí)行鍵鼠腳本時(shí),需要按照順序執(zhí)行鍵鼠腳本中的各個(gè)事件。
示例性的,終端在執(zhí)行圖2中的鍵鼠腳本時(shí),按照事件記錄的順序依次執(zhí)行按鍵A按下事件、按鍵A放開事件、按鍵C按下事件、按鍵C放開事件、鼠標(biāo)左鍵按下事件、鼠標(biāo)左鍵放開事件和按鍵回車按下事件。
實(shí)際應(yīng)用中,由于后臺(tái)模式和托管模式均基于執(zhí)行腳本事件的方式實(shí)現(xiàn)的鍵鼠操作回放,所以本實(shí)施例中鍵鼠腳本的回放既適用于后臺(tái)模式,又適用于托管模式。
103、檢測當(dāng)前事件之后是否存在與當(dāng)前事件對應(yīng)的放開事件。
終端從執(zhí)行鍵鼠腳本中的第一個(gè)事件起,會(huì)檢測當(dāng)前事件之后是否存在與當(dāng)前事件對應(yīng)的放開事件。其中,對當(dāng)前事件之后的事件進(jìn)行檢測時(shí),該檢測范圍可以為僅針對與當(dāng)前事件相鄰的下一事件進(jìn)行檢測,也可以在與當(dāng)前事件相鄰的若干事件中進(jìn)行檢測,也可以在當(dāng)前事件之后的所有事件內(nèi)進(jìn)行檢測。
示例性的,鍵鼠腳本中記錄的事件依次為按鍵A按下事件、按鍵A放開事件、按鍵X按下事件、按鍵X放開事件、按鍵M按下事件、鼠標(biāo)左鍵按下事件、鼠標(biāo)左鍵放開事件、按鍵回車按下事件。若當(dāng)前事件為按鍵X按下事件,則終端可以僅檢測按鍵X放開事件是否為與按鍵X按下事件對應(yīng)的放開事件,也可以在與按鍵X按下事件相鄰的若干事件內(nèi)進(jìn)行檢測,如在與按鍵X按下事件相鄰的連續(xù)3個(gè)事件內(nèi)進(jìn)行檢測,即在按鍵X放開事件、按鍵M按下事件、鼠標(biāo)左鍵按下事件中進(jìn)行檢測,也可以在按鍵X按下事件之后的所有事件內(nèi)進(jìn)行檢測,即在按鍵X放開事件、按鍵M按下事件、鼠標(biāo)左鍵按下事件、鼠標(biāo)左鍵放開事件、按鍵回車按下事件中進(jìn)行檢測。
需要說明的是,實(shí)際應(yīng)用中,當(dāng)前事件可能是按下事件也可能是放開 事件。當(dāng)當(dāng)前事件為按下事件時(shí),對應(yīng)該當(dāng)前事件的放開事件為與當(dāng)前事件操作相反的事件;而當(dāng)當(dāng)前事件為放開事件時(shí),對應(yīng)該當(dāng)前事件的放開事件為該當(dāng)前事件本身。例如,若當(dāng)前事件為按鍵O按下事件,則對應(yīng)該當(dāng)前事件的放開事件為按鍵O放開事件;若當(dāng)前事件為按鍵O放開事件,則對應(yīng)該當(dāng)前事件的放開事件為按鍵O放開事件。
實(shí)際應(yīng)用中,終端每執(zhí)行一個(gè)按下事件和與其對應(yīng)的放開事件,就可以完成一次按鍵的模擬操作,而當(dāng)在放開事件之后重復(fù)添加相同的放開事件時(shí),對按鍵的模擬操作并無影響,因?yàn)楸痉桨钢校灰WC一個(gè)按鍵在按下之后一定可以放開,即按下事件之后一定存在放開事件,而無需限制放開事件的數(shù)量。因此本實(shí)施例在添加放開事件時(shí),無需對當(dāng)前事件的事件類型進(jìn)行判斷。
104、若當(dāng)前事件之后不存在與當(dāng)前事件對應(yīng)的放開事件,則在當(dāng)前事件之后添加放開事件。
若檢測到當(dāng)前事件之后不存在與當(dāng)前事件對應(yīng)的放開事件,則說明鍵鼠腳本中缺少與當(dāng)前事件對應(yīng)的放開事件,從而有可能對鍵鼠腳本的回放產(chǎn)生影響,甚至導(dǎo)致Windows出現(xiàn)異常,因此應(yīng)該在當(dāng)前事件之后添加對應(yīng)的放開事件以保證終端正常運(yùn)行。
由于無論對應(yīng)當(dāng)前事件的放開事件處于哪個(gè)位置,只要位于當(dāng)前事件之后,都不會(huì)對回放結(jié)果或系統(tǒng)產(chǎn)生影響,所以在當(dāng)前事件之后添加放開事件的具體實(shí)現(xiàn)方式可以為在當(dāng)前事件與下一事件之間添加放開事件,可以為在當(dāng)前事件之后的所有事件中,任意兩個(gè)事件之間添加放開事件,還可以為在當(dāng)前事件之后的所有事件之后添加放開事件,本實(shí)施例不對放開事件的具體添加位置進(jìn)行限定。
示例性的,若鍵鼠腳本中記錄的事件為按鍵S按下事件、按鍵S放開事件、按鍵G按下事件、按鍵P按下事件、按鍵P放開事件、鼠標(biāo)右鍵按下事件、鼠標(biāo)右鍵放開事件,則當(dāng)前事件為按鍵G按下事件時(shí),在該當(dāng)前事件之后并未檢測到與當(dāng)前事件對應(yīng)的放開事件,所以可以在按鍵G按下事件與按鍵P按下事件之間添加按鍵G放開事件,也可以在按鍵P按下事件、按鍵P放開事件、鼠標(biāo)右鍵按下事件、鼠標(biāo)右鍵放開事件中任意兩個(gè) 事件之間添加按鍵G放開事件(如在按鍵P放開事件和鼠標(biāo)右鍵按下事件之間添加按鍵G放開事件),也可以在最后一個(gè)事件鼠標(biāo)右鍵放開事件之后添加按鍵G放開事件。
此外,若檢測到當(dāng)前事件之后存在與當(dāng)前事件對應(yīng)的放開事件,則無需添加對應(yīng)當(dāng)前事件的放開事件,并且對于下一事件,則繼續(xù)進(jìn)行步驟103、步驟104所述的操作。
除了對放開事件的添加位置不作限定以外,本實(shí)施例同樣不對放開事件的添加時(shí)機(jī)進(jìn)行限制。在本實(shí)施例中,在檢測到當(dāng)前事件之后沒有對應(yīng)的放開事件時(shí),終端可以在執(zhí)行當(dāng)前事件之前對放開事件進(jìn)行添加,也可以在執(zhí)行當(dāng)前事件之后、下一事件之前進(jìn)行添加,還可以是在鍵鼠腳本中所有的事件都執(zhí)行完畢后再進(jìn)行統(tǒng)一添加,本實(shí)施例對添加放開事件的時(shí)機(jī)不作限制。
需要說明的是,對于檢測之后立即添加放開事件的方式,當(dāng)當(dāng)前事件為上述添加的放開事件時(shí),直接執(zhí)行該當(dāng)前事件,而并不對其進(jìn)行上述流程的檢測與判斷。其中,區(qū)分添加的事件與鍵鼠腳本中已有的事件的方式可以有多種,例如:可以對添加的事件進(jìn)行標(biāo)記,當(dāng)執(zhí)行到添加的事件時(shí),終端可以檢測到該事件攜帶有添加標(biāo)記,則直接執(zhí)行該事件。
本發(fā)明實(shí)施例提供的鍵鼠操作回放的方法,能夠在獲取待執(zhí)行的鍵鼠腳本后,順序執(zhí)行鍵鼠腳本中的各個(gè)事件,并且檢測當(dāng)前事件之后有無與其對應(yīng)的放開事件,若無,則將放開事件添加在當(dāng)前事件之后。與現(xiàn)有技術(shù)中直接對獲取的待執(zhí)行鍵鼠腳本中的事件依次執(zhí)行相比,本發(fā)明能夠使得鍵鼠腳本中的按下事件之后一定存在放開事件,從而保證了鍵鼠腳本的正常回放,進(jìn)而避免了因缺少放開事件而造成Windows異常的現(xiàn)象。
進(jìn)一步的,作為對上述方法實(shí)施例的細(xì)化與擴(kuò)展,由于在步驟103中并未對當(dāng)前事件進(jìn)行限制,即無論當(dāng)前事件是按下事件,還是放開事件,均對該當(dāng)前事件之后的事件進(jìn)行檢測,因此為了避免當(dāng)前事件為放開事件時(shí),也對其后的事件進(jìn)行檢測,而降低鍵鼠腳本執(zhí)行的速度,本實(shí)施例采用如下改進(jìn)方式:
在檢測當(dāng)前事件之后是否存在與當(dāng)前事件對應(yīng)的放開事件前,先檢測 當(dāng)前事件是否為按下事件。若當(dāng)前事件為按下事件,則再繼續(xù)檢測當(dāng)前事件之后是否存在放開事件;若當(dāng)前事件為放開事件,則不再對當(dāng)前事件之后的事件進(jìn)行檢測,而直接執(zhí)行當(dāng)前事件,并在執(zhí)行下一事件之前,繼續(xù)對下一事件進(jìn)行按下事件與放開事件的判斷,進(jìn)而繼續(xù)判斷是否對該下一事件之后的事件進(jìn)行檢測。
進(jìn)一步的,在上述步驟103中提到,終端檢測當(dāng)前事件之后是否存在與當(dāng)前事件對應(yīng)的放開事件時(shí),可以采用多種實(shí)現(xiàn)方式,下面對以下兩種實(shí)現(xiàn)方式進(jìn)行介紹:
方式一:檢測當(dāng)前事件之后的所有事件中是否存在放開事件。
終端遍歷當(dāng)前事件之后的所有事件,查看是否存在對應(yīng)當(dāng)前事件的放開事件。這種對于當(dāng)前事件之后的所有事件進(jìn)行遍歷檢測,可以防止事件查找遺漏現(xiàn)象的產(chǎn)生。
在實(shí)際應(yīng)用中,除了長按某一按鍵外,用戶對鍵盤或者鼠標(biāo)的點(diǎn)擊往往是瞬間按下、瞬間放開,因此鍵鼠腳本中錄制的用戶對鍵盤或鼠標(biāo)的操作,往往是一個(gè)按鍵按下事件與該按鍵的放開事件相鄰記錄的,所以為了減少檢測時(shí)間,可以采用以下方式二進(jìn)行檢測。
方式二:檢測與當(dāng)前事件相鄰的下一事件是否為放開事件。
終端檢測與當(dāng)前事件相鄰的下一事件是否為放開事件,若不是,則在當(dāng)前事件之后添加對應(yīng)當(dāng)前事件的放開事件,若是,則執(zhí)行該當(dāng)前事件。
進(jìn)一步的,當(dāng)檢測到當(dāng)前事件之后并不存在對應(yīng)當(dāng)前事件的放開事件時(shí),需要在當(dāng)前事件之后添加該放開事件,由于每個(gè)事件和與其對應(yīng)的放開事件往往是相鄰記錄的,所以可以在當(dāng)前事件之后、與當(dāng)前事件相鄰的下一事件之前,添加放開事件。
在實(shí)際應(yīng)用中,用戶常常會(huì)長按鍵盤或鼠標(biāo)上的按鍵,而對于長按按鍵的情況,終端會(huì)在鍵鼠腳本中記錄多個(gè)連續(xù)相同的按下事件,例如,用戶長按按鍵回車x秒時(shí),計(jì)算機(jī)會(huì)記錄m個(gè)連續(xù)相同的按鍵回車按下事件。因此為了避免終端對連續(xù)相同的多個(gè)事件一一進(jìn)行檢測,并多次添加相同的放開事件,而造成鍵鼠腳本回放緩慢,可以采用如下方式進(jìn)行放開事件的添加:
檢測與當(dāng)前事件相鄰的連續(xù)至少一個(gè)事件是否均與當(dāng)前事件相同,若與當(dāng)前事件相鄰的連續(xù)至少一個(gè)事件均與當(dāng)前事件相同,則在連續(xù)至少一個(gè)事件中的最后一個(gè)事件之后,添加放開事件,若與當(dāng)前事件相鄰的下一事件與當(dāng)前事件不同,則在當(dāng)前事件之后添加對應(yīng)當(dāng)前事件的放開事件。
示例性的,鍵鼠腳本中記錄的事件依次為按鍵Q按下事件、按鍵Q放開事件、按鍵T按下事件、按鍵T按下事件、按鍵T按下事件、按鍵N按下事件、按鍵N放開事件,若當(dāng)前事件為第一個(gè)按鍵T按下事件,則終端檢測到在當(dāng)前事件之后并不存在與當(dāng)前事件對應(yīng)的放開事件后,繼續(xù)檢測與當(dāng)前事件相鄰的連續(xù)至少一個(gè)事件是否均與當(dāng)前事件相同,檢測結(jié)果為有兩個(gè)事件均與當(dāng)前事件相同,因此在當(dāng)前事件之后的連續(xù)兩個(gè)按鍵T按下事件的第二個(gè)事件之后添加按鍵T放開事件。
進(jìn)一步的,由于在與當(dāng)前事件均相同且相鄰的連續(xù)至少一個(gè)事件之后,添加了放開事件,所以當(dāng)前事件之后、與當(dāng)前事件相鄰的連續(xù)至少一個(gè)事件之后均存在放開事件,這幾個(gè)事件對鍵鼠腳本的回放以及Windows系統(tǒng)均無影響,因此在添加了放開事件后,可以直接順序執(zhí)行當(dāng)前事件以及與當(dāng)前事件相鄰的連續(xù)至少一個(gè)事件,而無需對與當(dāng)前事件相鄰的連續(xù)至少一個(gè)事件進(jìn)行步驟103、步驟104的操作。
可選的,由于對于鍵鼠腳本中的每一個(gè)按下事件,只要按下事件之后存在對應(yīng)的放開事件,就不影響鍵鼠腳本的回放結(jié)果,所以為了將鍵鼠腳本中已有的事件與添加的放開事件區(qū)分開,可以在鍵鼠腳本中的所有事件之后添加放開事件,使得鍵鼠腳本中的最后一個(gè)事件之前均為已有的、未做添加的事件,使得鍵鼠腳本中的最后一個(gè)事件之后均為添加的事件。
在本實(shí)施例的一種實(shí)現(xiàn)方式中,終端可以在腳本回放的過程中,僅判斷當(dāng)前事件之后是否存在對應(yīng)的放開事件,但不立即對放開事件進(jìn)行添加。在檢測并執(zhí)行完鍵鼠腳本中最后一個(gè)事件后,終端在鍵鼠腳本最后統(tǒng)一添加對應(yīng)各個(gè)按下事件的放開事件。具體的,終端順序執(zhí)行鍵鼠腳本中的各個(gè)事件,在執(zhí)行每一個(gè)事件的過程中,檢測當(dāng)前事件之后是否存在對應(yīng)的放開事件,并對不存在放開事件的當(dāng)前事件添加標(biāo)記。當(dāng)將鍵鼠腳本中的所有事件執(zhí)行完后,終端在最后一個(gè)事件之后順序添加放開事件,并順序 執(zhí)行添加的放開事件。
示例性的,鍵鼠腳本中的事件依次為按鍵A按下事件、按鍵A放開事件、按鍵W按下事件、按鍵R按下事件、按鍵R放開事件、按鍵P按下事件、按鍵B按下事件、按鍵B放開事件、按鍵Y按下事件,終端順序執(zhí)行上述事件,在執(zhí)行過程中,依次檢測到按鍵W按下事件、按鍵P按下事件、按鍵Y按下事件不存在對應(yīng)的放開事件,因此依次對按鍵W按下事件、按鍵P按下事件、按鍵Y按下事件添加標(biāo)記。在最后一個(gè)事件按鍵Y按下事件執(zhí)行完后,終端在該事件之后,按照按下事件出現(xiàn)的先后順序,順序添加按鍵W放開事件、按鍵P放開事件和按鍵Y放開事件,并順序執(zhí)行添加的放開事件。
在這種添加的事件均位于鍵鼠腳本中的已有事件之后的方式下,對于相鄰或者不相鄰的若干相同的事件均不存在對應(yīng)的放開事件時(shí),只要該若干事件中的第一個(gè)事件添加了對應(yīng)的放開事件,那么其他事件之后便均有對應(yīng)的放開事件,因此,避免了重復(fù)添加放開事件的情況。
進(jìn)一步的,在實(shí)際應(yīng)用中,用戶常常需要使用一些組合鍵來完成必要的操作,如用戶按下按鍵Ctrl后不放開,再按按鍵C,完成復(fù)制的操作,而這個(gè)復(fù)制操作在計(jì)算機(jī)中依次記錄了按鍵Ctrl按下事件、按鍵C按下事件,在按鍵C按下事件之后才記錄按鍵Ctrl放開事件和按鍵C放開事件,因此當(dāng)檢測到按鍵Ctrl按下事件之后不存在按鍵Ctrl放開事件時(shí),在按鍵Ctrl按下事件與按鍵C按下事件之間添加按鍵Ctrl放開事件,則會(huì)使得復(fù)制的功能失效,因此為了進(jìn)一步完善鍵鼠腳本,使其在避免產(chǎn)生Windows異常的基礎(chǔ)上,保證鍵鼠腳本回放結(jié)果不變,可以對步驟104做如下改進(jìn):
S1、若當(dāng)前事件之后不存在與當(dāng)前事件對應(yīng)的放開事件,則檢測當(dāng)前事件是否為事件組合中的事件。
其中,事件組合由觸發(fā)組合鍵所產(chǎn)生的多個(gè)事件組成,事件組合包括按鍵Ctrl事件、按鍵Alt事件、按鍵Shift事件、按鍵Fn事件,由于組合鍵是由按鍵Ctrl、按鍵Alt、按鍵Shift、按鍵Fn等特殊按鍵與鍵盤上的其他字母等普通按鍵組成的,所以事件組合中還包括字母按鍵等其他按鍵的對應(yīng)事件。
S2、若當(dāng)前事件為事件組合中的事件,則在事件組合中的最后一個(gè)事件之后,添加對應(yīng)當(dāng)前事件的放開事件。
當(dāng)當(dāng)前事件為事件組合中的事件時(shí),將放開事件添加在事件組合中的最后一個(gè)事件之后,可以保證該事件組合觸發(fā)的組合鍵的特殊功能不被破壞。
此外,若當(dāng)前事件不是事件組合中的事件,則在當(dāng)前事件之后添加對應(yīng)當(dāng)前事件的放開事件。
示例性的,鍵鼠腳本中記錄的事件依次為按鍵S按下事件、按鍵S放開事件、按鍵Ctrl按下事件、按鍵X按下事件、按鍵X放開事件、按鍵M按下事件、按鍵回車按下事件、按鍵回車放開事件,若當(dāng)前事件為按鍵Ctrl按下事件,則可以檢測到在按鍵Ctrl按下事件之后并不存在按鍵Ctrl放開事件,而按鍵Ctrl與按鍵X又為組合鍵,事件組合中的事件有按鍵Ctrl按下事件、按鍵X按下事件、按鍵X放開事件,因此為避免破壞組合鍵按鍵Ctrl與按鍵X組合產(chǎn)生的剪切功能,終端在事件組合中的最后一個(gè)事件(即按鍵X放開事件)之后添加按鍵Ctrl放開事件;若當(dāng)前事件為按鍵M按下事件,則可以檢測到按鍵M按下事件之后不存在按鍵M放開事件,而按鍵M按下事件不是事件組合中的事件,所以在按鍵M按下事件之后添加按鍵M放開事件。
進(jìn)一步的,在實(shí)際應(yīng)用中,用戶在使用組合鍵時(shí),往往對后按下的按鍵先放開,對先按下的事件后放開,例如,用戶使用按鍵Ctrl、按鍵C實(shí)現(xiàn)復(fù)制功能時(shí),往往是先按下按鍵Ctrl,在按住按鍵Ctrl的過程中,再按下按鍵C;而在放開按鍵時(shí),往往是先放開按鍵C,再放開按鍵Ctrl。因此為了與用戶使用按鍵的順序一致,對上述步驟S2做如下改進(jìn):
若當(dāng)前事件為事件組合中的事件,則繼續(xù)檢測當(dāng)前事件之后的事件組合中的事件之后是否存在對應(yīng)的放開事件。若不存在,則在事件組合中的最后一個(gè)事件之后,按照事件組合中事件的順序反向添加放開事件;若存在,則在事件組合中的最后一個(gè)事件之后,添加對應(yīng)當(dāng)前事件的放開事件。
例如,鍵鼠腳本中的事件依次為按鍵Ctrl按下事件、按鍵C按下事件、按鍵E按下事件、按鍵E放開事件、按鍵T按下事件、按鍵T放開事件, 則在執(zhí)行按鍵Ctrl按下事件前,檢測到按鍵Ctrl按下事件之后不存在對應(yīng)的放開事件,并且按鍵Ctrl按下事件為事件組合中的事件,則繼續(xù)檢測事件組合中的按鍵C按下事件之后是否存在對應(yīng)的放開事件。檢測結(jié)果為按鍵C按下事件之后不存在對應(yīng)的放開事件,因此在按鍵C按下事件之后,依次添加按鍵C放開事件、按鍵Ctrl放開事件。
進(jìn)一步的,作為對上述各實(shí)施例的實(shí)現(xiàn),本發(fā)明實(shí)施例還提供了一種鍵鼠操作回放的裝置,如圖3所示,該裝置包括:獲取單元21、執(zhí)行單元22、檢測單元23和添加單元24。其中,
獲取單元21,用于獲取待執(zhí)行的鍵鼠腳本;
執(zhí)行單元22,用于順序執(zhí)行獲取單元21獲取的鍵鼠腳本中的各個(gè)事件;
檢測單元23,用于檢測當(dāng)前事件之后是否存在與當(dāng)前事件對應(yīng)的放開事件;
添加單元24,用于當(dāng)檢測單元23檢測到當(dāng)前事件之后不存在與當(dāng)前事件對應(yīng)的放開事件時(shí),在當(dāng)前事件之后添加放開事件。
進(jìn)一步的,如圖4所示,檢測單元23,包括:
第一檢測模塊231,用于檢測當(dāng)前事件是否為按下事件;
第一檢測模塊231,還用于當(dāng)當(dāng)前事件為按下事件時(shí),檢測當(dāng)前事件之后是否存在放開事件。
第二檢測模塊232,用于檢測當(dāng)前事件之后的所有事件中是否存在放開事件。
第三檢測模塊233,用于檢測與當(dāng)前事件相鄰的下一事件是否為放開事件。
進(jìn)一步的,如圖4所示,添加單元24,包括:
第一添加模塊241,用于在當(dāng)前事件之后、與當(dāng)前事件相鄰的下一事件之前,添加放開事件。
第一檢測模塊242,用于檢測與當(dāng)前事件相鄰的連續(xù)至少一個(gè)事件是否均與當(dāng)前事件相同;
第二添加模塊243,用于當(dāng)?shù)谝粰z測模塊242檢測到與當(dāng)前事件相鄰的 連續(xù)至少一個(gè)事件均與當(dāng)前事件相同時(shí),在連續(xù)至少一個(gè)事件中的最后一個(gè)事件之后,添加放開事件。
進(jìn)一步的,第三添加模塊244,用于在所有事件之后添加放開事件。
進(jìn)一步的,第二檢測模塊245,用于檢測當(dāng)前事件是否為事件組合中的事件,事件組合由觸發(fā)組合鍵所產(chǎn)生的多個(gè)事件組成;
第四添加模塊246,用于當(dāng)?shù)诙z測模塊245檢測到當(dāng)前事件為事件組合中的事件時(shí),在事件組合中的最后一個(gè)事件之后,添加對應(yīng)當(dāng)前事件的放開事件。
進(jìn)一步的,第二檢測模塊245檢測的事件組合中的事件包括:
按鍵Ctrl事件、按鍵Alt事件、按鍵Shift事件、按鍵Fn事件。
本發(fā)明實(shí)施例提供的鍵鼠操作回放的裝置,能夠在獲取待執(zhí)行的鍵鼠腳本后,順序執(zhí)行鍵鼠腳本中的各個(gè)事件,并且檢測當(dāng)前事件之后有無與其對應(yīng)的放開事件,若無,則將放開事件添加在當(dāng)前事件之后。與現(xiàn)有技術(shù)中直接對獲取的待執(zhí)行鍵鼠腳本中的事件依次執(zhí)行相比,本發(fā)明能夠使得鍵鼠腳本中的按下事件之后一定存在放開事件,從而保證了鍵鼠腳本的正?;胤?,進(jìn)而避免了因缺少放開事件而造成Windows異常的現(xiàn)象。
本發(fā)明實(shí)施例公開了:
A1、一種鍵鼠操作回放的方法,所述方法包括:
獲取待執(zhí)行的鍵鼠腳本;
順序執(zhí)行所述鍵鼠腳本中的各個(gè)事件;
檢測當(dāng)前事件之后是否存在與所述當(dāng)前事件對應(yīng)的放開事件;
若所述當(dāng)前事件之后不存在與所述當(dāng)前事件對應(yīng)的放開事件,則在所述當(dāng)前事件之后添加所述放開事件。
A2、根據(jù)A1所述的方法,所述檢測當(dāng)前事件之后是否存在與所述當(dāng)前事件對應(yīng)的放開事件,包括:
檢測所述當(dāng)前事件是否為按下事件;
若所述當(dāng)前事件為按下事件,則檢測所述當(dāng)前事件之后是否存在所述放開事件。
A3、根據(jù)A1所述的方法,所述檢測當(dāng)前事件之后是否存在與所述當(dāng)前事件對應(yīng)的放開事件,包括:
檢測所述當(dāng)前事件之后的所有事件中是否存在所述放開事件。
A4、根據(jù)A1所述的方法,所述檢測當(dāng)前事件之后是否存在與所述當(dāng)前事件對應(yīng)的放開事件,包括:
檢測與所述當(dāng)前事件相鄰的下一事件是否為所述放開事件。
A5、根據(jù)A1所述的方法,所述在所述當(dāng)前事件之后添加所述放開事件,包括:
在所述當(dāng)前事件之后、與所述當(dāng)前事件相鄰的下一事件之前,添加所述放開事件。
A6、根據(jù)A1所述的方法,所述在所述當(dāng)前事件之后添加所述放開事件,包括:
檢測與所述當(dāng)前事件相鄰的連續(xù)至少一個(gè)事件是否均與所述當(dāng)前事件相同;
若與所述當(dāng)前事件相鄰的連續(xù)至少一個(gè)事件均與所述當(dāng)前事件相同,則在所述連續(xù)至少一個(gè)事件中的最后一個(gè)事件之后,添加所述放開事件。
A7、根據(jù)A1所述的方法,所述在所述當(dāng)前事件之后添加所述放開事件,包括:
在所有事件之后添加所述放開事件。
A8、根據(jù)A1所述的方法,所述在所述當(dāng)前事件之后添加所述放開事件,包括:
檢測所述當(dāng)前事件是否為事件組合中的事件,所述事件組合由觸發(fā)組合鍵所產(chǎn)生的多個(gè)事件組成;
若所述當(dāng)前事件為事件組合中的事件,則在所述事件組合中的最后一個(gè)事件之后,添加對應(yīng)所述當(dāng)前事件的放開事件。
A9、根據(jù)A8所述的方法,所述事件組合中的事件包括:
按鍵Ctrl事件、按鍵Alt事件、按鍵Shift事件、按鍵Fn事件。
B10、一種鍵鼠操作回放的裝置,所述裝置包括:
獲取單元,用于獲取待執(zhí)行的鍵鼠腳本;
執(zhí)行單元,用于順序執(zhí)行所述獲取單元獲取的所述鍵鼠腳本中的各個(gè)事件;
檢測單元,用于檢測當(dāng)前事件之后是否存在與所述當(dāng)前事件對應(yīng)的放開事件;
添加單元,用于當(dāng)所述檢測單元檢測到所述當(dāng)前事件之后不存在與所述當(dāng)前事件對應(yīng)的放開事件時(shí),在所述當(dāng)前事件之后添加所述放開事件。
B11、根據(jù)B10所述的裝置,所述檢測單元,包括:
第一檢測模塊,用于檢測所述當(dāng)前事件是否為按下事件;
所述第一檢測模塊,還用于當(dāng)所述當(dāng)前事件為按下事件時(shí),檢測所述當(dāng)前事件之后是否存在所述放開事件。
B12、根據(jù)B10所述的裝置,所述檢測單元,包括:
第二檢測模塊,用于檢測所述當(dāng)前事件之后的所有事件中是否存在所述放開事件。
B13、根據(jù)B10所述的裝置,所述檢測單元,包括:
第三檢測模塊,用于檢測與所述當(dāng)前事件相鄰的下一事件是否為所述放開事件。
B14、根據(jù)B10所述的裝置,所述添加單元,包括:
第一添加模塊,用于在所述當(dāng)前事件之后、與所述當(dāng)前事件相鄰的下一事件之前,添加所述放開事件。
B15、根據(jù)B10所述的裝置,所述添加單元,包括:
第一檢測模塊,用于檢測與所述當(dāng)前事件相鄰的連續(xù)至少一個(gè)事件是否均與所述當(dāng)前事件相同;
第二添加模塊,用于當(dāng)所述第一檢測模塊檢測到與所述當(dāng)前事件相鄰的連續(xù)至少一個(gè)事件均與所述當(dāng)前事件相同時(shí),在所述連續(xù)至少一個(gè)事件中的最后一個(gè)事件之后,添加所述放開事件。
B16、根據(jù)B10所述的裝置,所述添加單元,包括:
第三添加模塊,用于在所有事件之后添加所述放開事件。
B17、根據(jù)B10所述的裝置,所述添加單元,包括:
第二檢測模塊,用于檢測所述當(dāng)前事件是否為事件組合中的事件,所述事件組合由觸發(fā)組合鍵所產(chǎn)生的多個(gè)事件組成;
第四添加模塊,用于當(dāng)所述第二檢測模塊檢測到所述當(dāng)前事件為事件組合中的事件時(shí),在所述事件組合中的最后一個(gè)事件之后,添加對應(yīng)所述當(dāng)前事件的放開事件。
B18、根據(jù)B17所述的裝置,所述第二檢測模塊檢測的所述事件組合中的事件包括:
按鍵Ctrl事件、按鍵Alt事件、按鍵Shift事件、按鍵Fn事件。
在上述實(shí)施例中,對各個(gè)實(shí)施例的描述都各有側(cè)重,某個(gè)實(shí)施例中沒有詳述的部分,可以參見其他實(shí)施例的相關(guān)描述。
可以理解的是,上述方法及裝置中的相關(guān)特征可以相互參考。另外,上述實(shí)施例中的“第一”、“第二”等是用于區(qū)分各實(shí)施例,而并不代表各實(shí)施例的優(yōu)劣。
所屬領(lǐng)域的技術(shù)人員可以清楚地了解到,為描述的方便和簡潔,上述描述的系統(tǒng),裝置和單元的具體工作過程,可以參考前述方法實(shí)施例中的對應(yīng)過程,在此不再贅述。
在此提供的算法和顯示不與任何特定計(jì)算機(jī)、虛擬系統(tǒng)或者其它設(shè)備固有相關(guān)。各種通用系統(tǒng)也可以與基于在此的示教一起使用。根據(jù)上面的描述,構(gòu)造這類系統(tǒng)所要求的結(jié)構(gòu)是顯而易見的。此外,本發(fā)明也不針對任何特定編程語言。應(yīng)當(dāng)明白,可以利用各種編程語言實(shí)現(xiàn)在此描述的本發(fā)明的內(nèi)容,并且上面對特定語言所做的描述是為了披露本發(fā)明的最佳實(shí)施方式。
在此處所提供的說明書中,說明了大量具體細(xì)節(jié)。然而,能夠理解,本發(fā)明的實(shí)施例可以在沒有這些具體細(xì)節(jié)的情況下實(shí)踐。在一些實(shí)例中,并未詳細(xì)示出公知的方法、結(jié)構(gòu)和技術(shù),以便不模糊對本說明書的理解。
類似地,應(yīng)當(dāng)理解,為了精簡本公開并幫助理解各個(gè)發(fā)明方面中的一個(gè)或多個(gè),在上面對本發(fā)明的示例性實(shí)施例的描述中,本發(fā)明的各個(gè)特征有時(shí)被一起分組到單個(gè)實(shí)施例、圖、或者對其的描述中。然而,并不應(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ù)人員可以理解,可以對實(shí)施例中的設(shè)備中的模塊進(jìn)行自適應(yīng)性地改變并且把它們設(shè)置在與該實(shí)施例不同的一個(gè)或多個(gè)設(shè)備中??梢园褜?shí)施例中的模塊或單元或組件組合成一個(gè)模塊或單元或組件,以及此外可以把它們分成多個(gè)子模塊或子單元或子組件。除了這樣的特征和/或過程或者單元中的至少一些是相互排斥之外,可以采用任何組合對本說明書(包括伴隨的權(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í)施例對本發(fā)明進(jìn)行說明而不是對本發(fā)明進(jìn)行限制,并且本領(lǐng)域技術(shù)人員在不脫離所附權(quán)利要求的范圍的情況下可設(shè)計(jì)出替換實(shí)施例。在權(quán)利要求中,不應(yīng)將位于括號(hào)之間的任何參考符號(hào)構(gòu)造成對權(quán)利要求的限制。單詞“包含”不排除存在未列在權(quán)利要求中的元件或步驟。位于元件之前的單詞“一”或“一個(gè)”不排除存在多個(gè)這樣的元件。本發(fā)明可以借助于包括有若干不同元件的硬件以及借助于適當(dāng)編程的計(jì)算機(jī)來實(shí)現(xiàn)。在列舉了若干裝置的單元權(quán)利要求中,這些裝置中的若干個(gè)可以是通過同一個(gè)硬件項(xiàng)來具體體現(xiàn)。單詞第一、第二、以及第三等的使用不表示任何順序。可將這些單詞解釋為名稱。