本發(fā)明涉及互聯(lián)網(wǎng)技術(shù)領(lǐng)域,尤其涉及一種鍵鼠腳本錄制的方法及裝置。
背景技術(shù):
鍵盤和鼠標(biāo)是計(jì)算機(jī)系統(tǒng)中最基本的兩種輸入設(shè)備,并且在windows系統(tǒng)中是通過(guò)兩種不同的例程來(lái)進(jìn)行輸入信號(hào)的處理的。在一些特定的環(huán)境下(如網(wǎng)絡(luò)游戲),對(duì)鼠標(biāo)和鍵盤的操作過(guò)程進(jìn)行腳本錄制并回放可以減少用戶的重復(fù)性勞動(dòng),提高使用者的操作效率。
目前對(duì)鍵鼠腳本錄制的方式主要是采用通過(guò)窗口子類化或者是利用windows API函數(shù)掛高級(jí)權(quán)限的全局鉤子來(lái)獲取并記錄鍵盤鼠標(biāo)的操作行為的。其中,窗口子類化技術(shù)是指在同一進(jìn)程中,不需要?jiǎng)?chuàng)建新的窗口即可將目標(biāo)窗口的窗口處理過(guò)程(包括窗口相應(yīng)的一系列windows消息)截取的一種方法,通過(guò)截取并記錄目標(biāo)窗口的相關(guān)消息(包括鼠標(biāo)、鍵盤的消息),進(jìn)而完成鍵鼠腳本的錄制。然而窗口子類化技術(shù)需要寄存于目標(biāo)窗口進(jìn)程的內(nèi)部,通過(guò)目標(biāo)窗口的回調(diào)函數(shù)獲取鼠標(biāo)、鍵盤的消息,而要調(diào)用回調(diào)函數(shù)就需要將該函數(shù)的DLL(動(dòng)態(tài)鏈接庫(kù))映射到目標(biāo)窗口進(jìn)程的地址空間中,即將這個(gè)DLL注入到目標(biāo)窗口進(jìn)程中,以達(dá)到統(tǒng)一進(jìn)程處理的目的。后一種是利用windows API函數(shù)掛高級(jí)權(quán)限的全局鉤子來(lái)獲取并記錄鍵盤鼠標(biāo)的操作消息,通過(guò)WH_JOURNALRECORD鉤子可以一次性的將鼠標(biāo)、鍵盤的操作行為記錄下來(lái),并可以通過(guò)WH_JOURNALPLAYBACK鉤子進(jìn)行回放。但是,采用這種方式首先要保證系統(tǒng)用戶的管理權(quán)限為高權(quán)限,以確保該鉤子為高權(quán)限啟動(dòng),而windows系統(tǒng)在vista及以上版本的系統(tǒng)加強(qiáng)了程序啟動(dòng)權(quán)限的管理,在用戶需要獲取高權(quán)限時(shí)會(huì)彈出UAC(User Account Control,用戶帳戶控制)提示框,在用 戶確認(rèn)并許可后才能繼續(xù)執(zhí)行。
因此,目前所采用的鍵鼠腳本錄制方式或者是增加了系統(tǒng)的資源開銷或者是提高了用戶操作的限制條件,使得鍵鼠腳本錄制的代價(jià)過(guò)高,無(wú)法獲得廣泛的應(yīng)用。
技術(shù)實(shí)現(xiàn)要素:
有鑒于此,本發(fā)明提供一種鍵鼠腳本錄制的方法及裝置,能夠解決鍵鼠腳本錄制代價(jià)過(guò)高的問(wèn)題。
依據(jù)本發(fā)明一個(gè)方面,提出了一種鍵鼠腳本錄制的方法,該方法包括:
通過(guò)低級(jí)全局鉤子獲取輸入設(shè)備操作的描述信息;
將所述描述信息合成為事件;
計(jì)算相鄰兩個(gè)事件之間的時(shí)間間隔;
對(duì)所述事件及所述時(shí)間間隔進(jìn)行記錄,獲得鍵鼠腳本。
依據(jù)本發(fā)明的另一個(gè)方面,提出了一種鍵鼠腳本錄制的裝置,該裝置包括:
獲取單元,用于通過(guò)低級(jí)全局鉤子獲取輸入設(shè)備操作的描述信息;
處理單元,用于將所述獲取單元獲取的所述描述信息合成為事件;
計(jì)算單元,用于計(jì)算所述處理單元合成的相鄰兩個(gè)事件之間的時(shí)間間隔;
記錄單元,用于對(duì)所述處理單元合成的所述事件及所述計(jì)算單元計(jì)算的所述時(shí)間間隔進(jìn)行記錄,獲得鍵鼠腳本。
本發(fā)明所采用的一種鍵鼠腳本錄制的方法及裝置,通過(guò)設(shè)置低級(jí)全局鉤子來(lái)獲取鍵盤或鼠標(biāo)操作的描述信息,并將描述信息以事件的形式加以記錄,同時(shí)再將相鄰兩個(gè)事件之間的時(shí)間間隔進(jìn)行記錄,最終將這些事件以及時(shí)間間隔以腳本的形式記錄下來(lái),獲得鍵鼠腳本。該鍵鼠腳本由于采用了低級(jí)的全局鉤子,使得該鍵鼠腳本在錄制鍵盤、鼠標(biāo)的操作過(guò)程時(shí),即不需要將DLL注入到目標(biāo)窗口進(jìn)程中,也不需要用戶的高管理權(quán)限,大幅降低了錄制鍵鼠腳本的成本,讓鍵鼠腳本的錄制更加簡(jiǎn)便易行。
上述說(shuō)明僅是本發(fā)明技術(shù)方案的概述,為了能夠更清楚了解本發(fā)明的技術(shù)手段,而可依照說(shuō)明書的內(nèi)容予以實(shí)施,并且為了讓本發(fā)明的上述和 其它目的、特征和優(yōu)點(diǎn)能夠更明顯易懂,以下特舉本發(fā)明的具體實(shí)施方式。
附圖說(shuō)明
通過(guò)閱讀下文優(yōu)選實(shí)施方式的詳細(xì)描述,各種其他的優(yōu)點(diǎn)和益處對(duì)于本領(lǐng)域普通技術(shù)人員將變得清楚明了。附圖僅用于示出優(yōu)選實(shí)施方式的目的,而并不認(rèn)為是對(duì)本發(fā)明的限制。而且在整個(gè)附圖中,用相同的參考符號(hào)表示相同的部件。在附圖中:
圖1示出了本發(fā)明實(shí)施例提出的一種鍵鼠腳本錄制的方法流程圖;
圖2示出了本發(fā)明實(shí)施例提出的另一種鍵鼠腳本錄制的方法流程圖;
圖3示出了本發(fā)明實(shí)施例提出的一種鍵鼠腳本錄制的裝置組成框圖;
圖4示出了本發(fā)明實(shí)施例提出的另一種鍵鼠腳本錄制的裝置組成框圖。
具體實(shí)施方式
下面將參照附圖更詳細(xì)地描述本公開的示例性實(shí)施例。雖然附圖中顯示了本公開的示例性實(shí)施例,然而應(yīng)當(dāng)理解,可以以各種形式實(shí)現(xiàn)本公開而不應(yīng)被這里闡述的實(shí)施例所限制。相反,提供這些實(shí)施例是為了能夠更透徹地理解本公開,并且能夠?qū)⒈竟_的范圍完整的傳達(dá)給本領(lǐng)域的技術(shù)人員。
本發(fā)明實(shí)施例提供了一種鍵鼠腳本錄制的方法,如圖1所示,該方法包括:
101、通過(guò)低級(jí)全局鉤子獲取輸入設(shè)備操作的描述信息。
鉤子是Windows消息處理機(jī)制的一個(gè)平臺(tái),應(yīng)用程序可以在上面設(shè)置子程以監(jiān)視指定窗口的某種消息,而且所監(jiān)視的窗口可以是其他進(jìn)程所創(chuàng)建的。當(dāng)消息到達(dá)后,在目標(biāo)窗口處理函數(shù)之前處理它。鉤子機(jī)制允許應(yīng)用程序截獲處理window消息或特定事件。而全局鉤子是指在系統(tǒng)中任意位置中都起作用的鉤子。在本實(shí)施例中,低級(jí)全局鉤子是指在系統(tǒng)底層攔截消息的全局鉤子,該鉤子可以截取操作系統(tǒng)發(fā)向任何進(jìn)程的消息。
在鍵鼠腳本的錄制過(guò)程中,所錄制的內(nèi)容是操作鼠標(biāo)和鍵盤所產(chǎn)生的描述信息,該描述信息包含有設(shè)備標(biāo)識(shí)、按鍵標(biāo)識(shí)、操作類型、操作焦點(diǎn)的坐標(biāo)信息等,其中,設(shè)備標(biāo)識(shí)用于標(biāo)識(shí)產(chǎn)生描述信息的輸入設(shè)備,如鍵盤操作的描述信息、鼠標(biāo)操作的描述信息等;按鍵標(biāo)識(shí)是用于區(qū)別具體按 鍵,如鍵盤中的具體按鍵以及鼠標(biāo)上的左鍵、右鍵等;操作類型用于記錄信息的種類,具體包括:按鍵的按下、放開以及鼠標(biāo)的移動(dòng);操作焦點(diǎn)的坐標(biāo)信息用來(lái)記錄操作產(chǎn)生時(shí)的輸入坐標(biāo)信息。
102、將描述信息合成為事件。
在本實(shí)施例所錄制的鍵鼠腳本中,用于記錄鍵盤或鼠標(biāo)操作的最小單元稱為事件,即在鍵盤或鼠標(biāo)的操作中,將操作細(xì)分到不能再分解為止。根據(jù)鼠標(biāo)和鍵盤操作方式的不同,鼠標(biāo)操作的事件包括有鼠標(biāo)移動(dòng)事件,鼠標(biāo)按鍵的按下事件,鼠標(biāo)按鍵的放開事件,鍵盤操作的事件分為按鍵的按下事件與按鍵的放開事件。舉例說(shuō)明,如鼠標(biāo)的移動(dòng)過(guò)程,可以看成是光標(biāo)在多個(gè)坐標(biāo)點(diǎn)之間連續(xù)的移動(dòng),那么將光標(biāo)從一個(gè)坐標(biāo)點(diǎn)移動(dòng)至相鄰坐標(biāo)點(diǎn)的操作就定義為一個(gè)鼠標(biāo)移動(dòng)事件。再比如,對(duì)鍵盤上某個(gè)按鍵的點(diǎn)擊操作,可以分解為該按鍵的按下操作和放開操作,對(duì)應(yīng)的就是該按鍵的按下事件和放開事件,而對(duì)按鍵的長(zhǎng)按則可以分解成多個(gè)連續(xù)的該按鍵的按下事件和一個(gè)放開事件的組合。需要說(shuō)明的是,在鼠標(biāo)移動(dòng)或是按鍵長(zhǎng)按時(shí),所分解出的多個(gè)鼠標(biāo)移動(dòng)事件和多個(gè)該按鍵的按下事件的具體個(gè)數(shù),取決于錄制該鍵鼠腳本的采樣率,即單位時(shí)間內(nèi)所采集的次數(shù)。采樣率越高,則操作步驟被分解的就越詳細(xì),例如,鼠標(biāo)移動(dòng)移動(dòng)了2s的過(guò)程,如果采樣率為100次/s,那么系統(tǒng)會(huì)對(duì)該鼠標(biāo)的移動(dòng)操作進(jìn)行分解,每隔0.01s獲取一次鼠標(biāo)的當(dāng)前坐標(biāo),將從上一次的坐標(biāo)點(diǎn)移動(dòng)至當(dāng)前坐標(biāo)點(diǎn)的過(guò)程記錄為一個(gè)鼠標(biāo)移動(dòng)事件。同理,在鍵盤長(zhǎng)按時(shí),每隔一個(gè)采樣周期就獲取一次該按鍵的狀態(tài),為按下狀態(tài)時(shí)就記錄一個(gè)按下事件,直到有放開事件為止。需要指出的是,采樣率越高所需要的系統(tǒng)處理符合就越大,因此,對(duì)采樣率的設(shè)置應(yīng)根據(jù)具體的硬件條件進(jìn)行設(shè)置,即處理能力越強(qiáng)的錄制設(shè)備可以相應(yīng)的提高采樣率,以提高鍵鼠腳本錄制的精確度。本實(shí)施例對(duì)此不做具體限定。
其中,將描述信息合成為事件,是指一個(gè)事件中所含有的描述信息的種類。根據(jù)上述101中所提到的對(duì)描述信息的分類,可以對(duì)事件所包含的描述信息內(nèi)容進(jìn)行具體說(shuō)明,此處不再贅述描述信息的具體內(nèi)容。
103、計(jì)算相鄰兩個(gè)事件之間的時(shí)間間隔。
在鍵鼠腳本中,除了記錄有用于描述輸入設(shè)備操作的事件外,還記錄有兩個(gè)相鄰事件之間的時(shí)間間隔。通過(guò)記錄時(shí)間間隔,可以描述事件與事件之間的關(guān)聯(lián)關(guān)系,因此,鍵鼠腳本就可以按照事件產(chǎn)生的先后順序依次進(jìn)行記錄。而計(jì)算相鄰兩個(gè)事件之間的時(shí)間間隔又分成兩種:相同事件間的時(shí)間間隔和不同事件間的時(shí)間間隔。一般兩個(gè)相鄰事件為相同事件的情況只有在長(zhǎng)按或是鼠標(biāo)移動(dòng)的情況下才能產(chǎn)生,根據(jù)102中所述的內(nèi)容,可以知道這兩個(gè)相同事件之間的時(shí)間間隔為一個(gè)采樣周期,因此,對(duì)于相同的兩個(gè)相鄰事件的時(shí)間間隔是不需要計(jì)算的。而計(jì)算不同的兩個(gè)相鄰事件的時(shí)間間隔,則可以通過(guò)調(diào)用計(jì)數(shù)函數(shù)與頻率函數(shù)進(jìn)行計(jì)算得出。該時(shí)間間隔的精度主要取決于所調(diào)用的計(jì)數(shù)函數(shù)與頻率函數(shù)的精度。
104、對(duì)事件及時(shí)間間隔進(jìn)行記錄,獲得鍵鼠腳本。
在得到事件和時(shí)間間隔后,將事件與時(shí)間間隔以產(chǎn)生的時(shí)間先后為順序依次寫入到腳本中,就獲得了一個(gè)鍵鼠腳本文件,通過(guò)對(duì)該鍵鼠腳本文件的執(zhí)行,可以模擬出鍵盤和鼠標(biāo)在錄制的時(shí)間段內(nèi)實(shí)際的操作過(guò)程。
本發(fā)明所采用的鍵鼠腳本錄制的方法,通過(guò)設(shè)置低級(jí)全局鉤子來(lái)獲取鍵盤或鼠標(biāo)操作的描述信息,并將描述信息以事件的形式加以記錄,同時(shí)再將相鄰兩個(gè)事件之間的時(shí)間間隔進(jìn)行記錄,最終將這些事件以及時(shí)間間隔以腳本的形式記錄下來(lái),獲得鍵鼠腳本。該鍵鼠腳本由于采用了低級(jí)的全局鉤子,使得該鍵鼠腳本在錄制鍵盤、鼠標(biāo)的操作過(guò)程時(shí),即不需要將DLL注入到目標(biāo)窗口進(jìn)程中,也不需要用戶的高管理權(quán)限,因此,該方法可以大幅降低鍵鼠腳本錄制的成本,讓鍵鼠腳本的錄制更加簡(jiǎn)便易行。
由于鍵鼠腳本已經(jīng)較多的應(yīng)用于網(wǎng)絡(luò)游戲中,因此,為了更詳細(xì)的說(shuō)明本發(fā)明提出的鍵鼠腳本錄制的方法,本實(shí)施例還提供一種針對(duì)網(wǎng)絡(luò)游戲的鍵鼠腳本錄制的方法,如圖2所示,該方法包括:
201、確定錄制窗口。
在網(wǎng)絡(luò)游戲中錄制鍵鼠腳本是為了將用戶具體的操作流程保存下來(lái),以供與其他玩家進(jìn)行切磋交流。而游戲作為一個(gè)獨(dú)立運(yùn)行的軟件程序,有其自己的執(zhí)行窗口。在本發(fā)明實(shí)施例中,由于所采用的是低級(jí)全局鉤子,所獲取的鍵盤或鼠標(biāo)的操作信息是不區(qū)分針對(duì)于哪個(gè)窗口進(jìn)行的。因此, 為了將多余的鍵鼠操作過(guò)濾掉,即只對(duì)指定的窗口內(nèi)的鍵鼠操作進(jìn)行獲取,就需要再錄制前對(duì)錄制的目的窗口進(jìn)行確定。
確定鍵鼠腳本錄制的目的窗口,或稱對(duì)象窗口,可以是通過(guò)設(shè)置,將當(dāng)前頂層的活動(dòng)窗口確定為對(duì)象窗口,經(jīng)過(guò)設(shè)置后,錄制的窗口將不固定,而是要先判斷當(dāng)前頂層的活動(dòng)窗口的坐標(biāo)范圍,然后記錄發(fā)生在該窗口坐標(biāo)范圍內(nèi)的鍵鼠操作,當(dāng)頂層的活動(dòng)窗口改變時(shí),要重新確定新的頂層活動(dòng)窗口的坐標(biāo)范圍,并記錄在該對(duì)象窗口內(nèi)所執(zhí)行的鍵鼠操作,這種方式在網(wǎng)絡(luò)游戲中,是為了方便記錄對(duì)多個(gè)游戲賬號(hào)的操作而設(shè)置的。此外,還可以設(shè)置成只針對(duì)一個(gè)窗口的操作進(jìn)行鍵鼠腳本錄制,通過(guò)接收窗口選擇指令,在該指令中需要攜帶有對(duì)象窗口的窗口句柄,然后根據(jù)窗口句柄查找對(duì)應(yīng)的窗口,同時(shí)確定窗口的坐標(biāo)范圍,當(dāng)對(duì)該窗口進(jìn)行鍵鼠操作時(shí)開始進(jìn)行錄制,如此設(shè)置后,錄制的窗口將固定不變,這樣就排除了錄制用戶對(duì)其它窗口的操作,這在錄制游戲鍵鼠腳本時(shí),可以防止由于誤操作導(dǎo)致的窗口切換后產(chǎn)生的多余操作被錄制的情況,從而提高了鍵鼠腳本的錄制效果,減小了存儲(chǔ)空間。對(duì)于上述的兩種目的窗口設(shè)置方式,可以根據(jù)不同的情況進(jìn)行區(qū)別設(shè)置,本實(shí)施例不做具體限定。
在確定了目的窗口后,在該窗口的進(jìn)程中設(shè)置低級(jí)全局鉤子,用于獲取針對(duì)該窗口的鍵鼠操作的描述信息。在本發(fā)明實(shí)施例中,所采用的低級(jí)全局鉤子為WH_KEYBOARD_LL和WH_MOUSE_LL,分別用于截取鍵盤和鼠標(biāo)操作的描述信息。
202、通過(guò)低級(jí)全局鉤子獲取輸入設(shè)備操作的描述信息。
在設(shè)置好上述的低級(jí)全局鉤子后,當(dāng)啟動(dòng)鍵鼠腳本錄制后,系統(tǒng)將通過(guò)低級(jí)鍵盤鉤子,即WH_KEYBOARD_LL,獲取鍵盤操作的描述信息;通過(guò)低級(jí)鼠標(biāo)鉤子,即WH_MOUSE_LL,獲取鼠標(biāo)操作的描述信息。所獲取的描述信息內(nèi)容在上述101中已做具體說(shuō)明,此處不再贅述。
需要說(shuō)明的是,上述的低級(jí)鍵盤鉤子與低級(jí)鼠標(biāo)鉤子均為全局鉤子,在不做限定的情況下可以獲取所有當(dāng)前鍵盤與鼠標(biāo)的操作描述信息,因此,需要上述步驟中的將低級(jí)全局鉤子設(shè)置在目的窗口的進(jìn)程中,用來(lái)獲取針對(duì)該目的窗口的操作描述信息。
203、將描述信息合成為事件。
本步驟同102,詳細(xì)內(nèi)容請(qǐng)參考上述102的內(nèi)容。需要說(shuō)明的是,由于采用的低級(jí)鍵盤鉤子與低級(jí)鼠標(biāo)鉤子所獲取的描述信息分別是由鍵盤和鼠標(biāo)兩種輸入設(shè)備的操作生成的,所以在所合成的事件中,由低級(jí)鍵盤鉤子獲取的鍵盤事件與由低級(jí)鼠標(biāo)鉤子獲取的鼠標(biāo)事件可能是同時(shí)產(chǎn)生的。因此,在以生成時(shí)間為順序進(jìn)行排列是,有可能會(huì)出現(xiàn)兩個(gè)事件同時(shí)發(fā)生的情況,為此,可以采用將鍵盤事件和鼠標(biāo)事件分別進(jìn)行順序排列,防止事件發(fā)生重疊而無(wú)法處理的現(xiàn)象出現(xiàn)。
204、計(jì)算相鄰兩個(gè)事件之間的時(shí)間間隔。
鍵鼠腳本中,由于事件與事件之間的時(shí)間間隔非常的短暫,因此就需要高精度的計(jì)時(shí)器來(lái)準(zhǔn)確計(jì)算兩個(gè)事件之間的時(shí)間間隔,在本實(shí)施例中,計(jì)算相鄰兩個(gè)事件之間的時(shí)間間隔,是通過(guò)調(diào)用API函數(shù)QueryPerformanc eCounter和QueryPerformanceFrequency來(lái)實(shí)現(xiàn)的,在這組函數(shù)中,QueryP erformanceCounter函數(shù)可以返回高精確度性能計(jì)數(shù)器的值,它可以以微妙為單位計(jì)時(shí)。但是,QueryPerformanceCounter確切的精確計(jì)時(shí)的最小單位是與系統(tǒng)相關(guān)的,所以,必須要查詢系統(tǒng)以得到QueryPerformanceCounter返回的嘀噠聲的頻率。而QueryPerformanceFrequency函數(shù)就提供了這個(gè)頻率值,返回每秒嘀噠聲的個(gè)數(shù)。
并且,通過(guò)這組函數(shù)所計(jì)算的確切時(shí)間是從第一次調(diào)用QueryPerforma nceCounter函數(shù)開始的,即第一個(gè)事件觸發(fā)時(shí),調(diào)用QueryPerformanceCou nter函數(shù)開始計(jì)數(shù),第二個(gè)事件觸發(fā)時(shí),再調(diào)用QueryPerformanceCounter函數(shù)停止計(jì)數(shù),計(jì)算兩者只差再除以QueryPerformanceFrequency函數(shù)提供的頻率就是這兩個(gè)事件間的時(shí)間間隔。
205、對(duì)事件及時(shí)間間隔進(jìn)行記錄,獲得鍵鼠腳本。
在對(duì)事件以及時(shí)間間隔進(jìn)行記錄時(shí),可以按照時(shí)間順序進(jìn)行線性的記錄,獲得的鍵鼠腳本是以事件加時(shí)間間隔的組合進(jìn)行排列的腳本文件。此外,還可以對(duì)事件以及時(shí)間間隔標(biāo)記序號(hào),該序號(hào)可以表示事件與事件間隔的位置排序,再將標(biāo)記后的事件與時(shí)間間隔進(jìn)行分類記錄,并且同樣以時(shí)間順序進(jìn)行排列,獲得鍵鼠腳本是包括有事件組合和時(shí)間間隔組合的腳本文件。例如,標(biāo)記三個(gè)事件為事件1、事件2、事件3,標(biāo)記這3個(gè)事件間的兩個(gè)間隔為間隔1、間隔2,按照第一種記錄的方式所得到的鍵鼠腳本是事件1-間隔1-事件2-間隔2-事件3的記錄方式,而按照第二種方式所得 到的腳本文件是事件1-事件2-事件3、間隔1-間隔2的記錄方式。后一種記錄方式在回放時(shí),只需要將時(shí)間間隔插入對(duì)應(yīng)的事件后就可以還原成第一鐘方式。
此外,在對(duì)時(shí)間間隔進(jìn)行記錄時(shí),還可以將計(jì)算出來(lái)的時(shí)間間隔直接用數(shù)值的形式加以記錄,從而減少記錄時(shí)間間隔所占用的存儲(chǔ)空間。
進(jìn)一步的,作為對(duì)上述方法的實(shí)現(xiàn),本發(fā)明實(shí)施例提供了一種鍵鼠腳本錄制的裝置,該裝置可以位于手機(jī)、平板電腦、個(gè)人電腦(Personal Computer,簡(jiǎn)稱PC)等電子設(shè)備中,也可以制作成獨(dú)立于電子設(shè)備外部設(shè)備,通過(guò)有線或無(wú)線的方式與電子設(shè)備進(jìn)行數(shù)據(jù)交互,或者該裝置還可以被設(shè)置于服務(wù)器側(cè)或服務(wù)器內(nèi)部,用以對(duì)上述圖1及圖2的方法進(jìn)行實(shí)現(xiàn)。具體的,如圖3所示,該裝置包括:獲取單元31、處理單元32、計(jì)算單元33以及記錄單元34,其中,
獲取單元31,用于通過(guò)低級(jí)全局鉤子獲取輸入設(shè)備操作的描述信息;
處理單元32,用于將獲取單元31獲取的描述信息合成為事件;
計(jì)算單元33,用于計(jì)算處理單元32合成的相鄰兩個(gè)事件之間的時(shí)間間隔;
記錄單元34,用于對(duì)處理單元32合成的事件及計(jì)算單元33計(jì)算的時(shí)間間隔進(jìn)行記錄,獲得鍵鼠腳本。
進(jìn)一步的,如圖4所示,該裝置還包括:
設(shè)置單元35,用于在獲取單元31通過(guò)低級(jí)全局鉤子獲取輸入設(shè)備操作的描述信息之前,在目的窗口的進(jìn)程中設(shè)置低級(jí)全局鉤子,目的窗口為進(jìn)行鍵鼠腳本錄制的對(duì)象窗口。
進(jìn)一步的,如圖4所示,該裝置還包括:
確定單元36,用于在設(shè)置單元35在目的窗口的進(jìn)程中設(shè)置低級(jí)全局鉤子之前,確定目的窗口。
進(jìn)一步的,如圖4所示,確定單元36,包括:
第一確定模塊361,用于將當(dāng)前頂層的活動(dòng)窗口確定為目的窗口。
進(jìn)一步的,如圖4所示,確定單元36,包括:
第二確定模塊362,用于接收窗口選擇指令,查找對(duì)應(yīng)窗口句柄的窗口, 并將查找到的窗口確定為目的窗口,窗口選擇指令中攜帶有窗口句柄。
進(jìn)一步的,獲取單元31使用的低級(jí)全局鉤子為低級(jí)鼠標(biāo)鉤子;
如圖4所示,獲取單元31,包括:
第一獲取模塊311,用于通過(guò)低級(jí)鼠標(biāo)鉤子獲取鼠標(biāo)操作的描述信息。
進(jìn)一步的,獲取單元31使用的低級(jí)全局鉤子為低級(jí)鍵盤鉤子;
如圖4所示,獲取單元31,包括:
第二獲取模塊312,用于通過(guò)低級(jí)鍵盤鉤子獲取鍵盤操作的描述信息。
進(jìn)一步的,計(jì)算單元33,用于:調(diào)用API函數(shù)QueryPerformanceCounter和QueryPerformanceFrequency計(jì)算相鄰的兩個(gè)觸發(fā)事件間的時(shí)間間隔。
進(jìn)一步的,如圖4所示,記錄單元34,包括:
第一記錄模塊341,用于按照時(shí)間順序?qū)κ录约皶r(shí)間間隔進(jìn)行線性記錄,獲得鍵鼠腳本。
進(jìn)一步的,如圖4所示,記錄單元34,包括:
第二記錄模塊342,用于對(duì)事件以及時(shí)間間隔標(biāo)記序號(hào),并對(duì)標(biāo)記后的事件以及時(shí)間間隔進(jìn)行分類記錄,獲得鍵鼠腳本,序號(hào)用于表征事件及時(shí)間間隔的位置排序。
進(jìn)一步的,記錄單元34,用于:
將時(shí)間間隔以數(shù)值的形式記錄。
本發(fā)明所采用的一種鍵鼠腳本錄制的方法及裝置,通過(guò)設(shè)置低級(jí)全局鉤子來(lái)獲取鍵盤或鼠標(biāo)在目的窗口內(nèi)操作的描述信息,并將描述信息以事件的形式加以記錄,同時(shí)再將相鄰兩個(gè)事件之間的時(shí)間間隔進(jìn)行記錄,最終將這些事件以及時(shí)間間隔以腳本的形式記錄下來(lái),獲得鍵鼠腳本。該鍵鼠腳本由于采用了低級(jí)的全局鉤子,使得該鍵鼠腳本在錄制鍵盤、鼠標(biāo)的操作過(guò)程時(shí),即不需要將DLL注入到目標(biāo)窗口進(jìn)程中,也不需要用戶的高管理權(quán)限,并且將鉤子掛在目的窗口的進(jìn)程內(nèi),使獲取的事件可以過(guò)濾掉非目的窗口的鍵鼠操作的事件,減少了鍵鼠腳本所占用的存儲(chǔ)空間,同時(shí)也降低了鍵鼠腳本錄制的成本,讓鍵鼠腳本的錄制更加簡(jiǎn)便易行。
在上述實(shí)施例中,對(duì)各個(gè)實(shí)施例的描述都各有側(cè)重,某個(gè)實(shí)施例中沒有詳述的部分,可以參見其他實(shí)施例的相關(guān)描述。
可以理解的是,上述方法及裝置中的相關(guān)特征可以相互參考。另外,上述實(shí)施例中的“第一”、“第二”等是用于區(qū)分各實(shí)施例,而并不代表各實(shí)施例的優(yōu)劣。
所屬領(lǐng)域的技術(shù)人員可以清楚地了解到,為描述的方便和簡(jiǎn)潔,上述描述的系統(tǒng),裝置和單元的具體工作過(guò)程,可以參考前述方法實(shí)施例中的對(duì)應(yīng)過(guò)程,在此不再贅述。
在此提供的算法和顯示不與任何特定計(jì)算機(jī)、虛擬系統(tǒng)或者其它設(shè)備固有相關(guān)。各種通用系統(tǒng)也可以與基于在此的示教一起使用。根據(jù)上面的描述,構(gòu)造這類系統(tǒng)所要求的結(jié)構(gòu)是顯而易見的。此外,本發(fā)明也不針對(duì)任何特定編程語(yǔ)言。應(yīng)當(dāng)明白,可以利用各種編程語(yǔ)言實(shí)現(xiàn)在此描述的本發(fā)明的內(nèi)容,并且上面對(duì)特定語(yǔ)言所做的描述是為了披露本發(fā)明的最佳實(shí)施方式。
在此處所提供的說(shuō)明書中,說(shuō)明了大量具體細(xì)節(jié)。然而,能夠理解,本發(fā)明的實(shí)施例可以在沒有這些具體細(xì)節(jié)的情況下實(shí)踐。在一些實(shí)例中,并未詳細(xì)示出公知的方法、結(jié)構(gòu)和技術(shù),以便不模糊對(duì)本說(shuō)明書的理解。
類似地,應(yīng)當(dāng)理解,為了精簡(jiǎn)本公開并幫助理解各個(gè)發(fā)明方面中的一個(gè)或多個(gè),在上面對(duì)本發(fā)明的示例性實(shí)施例的描述中,本發(fā)明的各個(gè)特征有時(shí)被一起分組到單個(gè)實(shí)施例、圖、或者對(duì)其的描述中。然而,并不應(yīng)將該公開的方法解釋成反映如下意圖:即所要求保護(hù)的本發(fā)明要求比在每個(gè)權(quán)利要求中所明確記載的特征更多的特征。更確切地說(shuō),如下面的權(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è)子模塊或子單元或子組件。除了這樣的特征和/或過(guò)程或者單元中的至少一些是相互排斥之外,可以采用任何組合對(duì)本說(shuō)明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的所有特征以及如此公開 的任何方法或者設(shè)備的所有過(guò)程或單元進(jìn)行組合。除非另外明確陳述,本說(shuō)明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的每個(gè)特征可以由提供相同、等同或相似目的的替代特征來(lái)代替。
此外,本領(lǐng)域的技術(shù)人員能夠理解,盡管在此所述的一些實(shí)施例包括其它實(shí)施例中所包括的某些特征而不是其它特征,但是不同實(shí)施例的特征的組合意味著處于本發(fā)明的范圍之內(nèi)并且形成不同的實(shí)施例。例如,在下面的權(quán)利要求書中,所要求保護(hù)的實(shí)施例的任意之一都可以以任意的組合方式來(lái)使用。
本發(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)來(lái)實(shí)現(xiàn)根據(jù)本發(fā)明實(shí)施例的發(fā)明名稱(如確定網(wǎng)站內(nèi)鏈接等級(jí)的裝置)中的一些或者全部部件的一些或者全部功能。本發(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)行說(shuō)明而不是對(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ī)來(lái)實(shí)現(xiàn)。在列舉了若干裝置的單元權(quán)利要求中,這些裝置中的若干個(gè)可以是通過(guò)同一個(gè)硬件項(xiàng)來(lái)具體體現(xiàn)。單詞第一、第二、以及第三等的使用不表示任何順序。可將這些單詞解釋為名稱。
本發(fā)明還公開了下述方案:
A1、一種鍵鼠腳本錄制的方法,所述方法包括:
通過(guò)低級(jí)全局鉤子獲取輸入設(shè)備操作的描述信息;
將所述描述信息合成為事件;
計(jì)算相鄰兩個(gè)事件之間的時(shí)間間隔;
對(duì)所述事件及所述時(shí)間間隔進(jìn)行記錄,獲得鍵鼠腳本。
A2、根據(jù)A1所述的方法,在所述通過(guò)低級(jí)全局鉤子獲取輸入設(shè)備操作的描述信息之前,所述方法還包括:
在目的窗口的進(jìn)程中設(shè)置所述低級(jí)全局鉤子,所述目的窗口為進(jìn)行鍵鼠腳本錄制的對(duì)象窗口。
A3、根據(jù)A2所述的方法,在所述在目的窗口的進(jìn)程中設(shè)置所述低級(jí)全局鉤子之前,所述方法進(jìn)一步包括:
確定所述目的窗口。
A4、根據(jù)A3所述的方法,所述確定所述目的窗口,包括:
將當(dāng)前頂層的活動(dòng)窗口確定為所述目的窗口。
A5、根據(jù)A3所述的方法,所述確定所述目的窗口,包括:
接收窗口選擇指令,所述窗口選擇指令中攜帶有窗口句柄;
查找對(duì)應(yīng)所述窗口句柄的窗口,并將查找到的窗口確定為所述目的窗口。
A6、根據(jù)A1所述的方法,所述低級(jí)全局鉤子為低級(jí)鼠標(biāo)鉤子;
所述通過(guò)低級(jí)全局鉤子獲取輸入設(shè)備操作的描述信息,包括:
通過(guò)所述低級(jí)鼠標(biāo)鉤子獲取鼠標(biāo)操作的描述信息。
A7、根據(jù)A1所述的方法,所述低級(jí)全局鉤子為低級(jí)鍵盤鉤子;
所述通過(guò)低級(jí)全局鉤子獲取輸入設(shè)備操作的描述信息,包括:
通過(guò)所述低級(jí)鍵盤鉤子獲取鍵盤操作的描述信息。
A8、根據(jù)A1所述的方法,所述計(jì)算相鄰兩個(gè)事件之間的時(shí)間間隔,包括:
調(diào)用API函數(shù)QueryPerformanceCounter和QueryPerformanceFrequency計(jì)算相鄰的兩個(gè)觸發(fā)事件間的時(shí)間間隔。
A9、根據(jù)A1所述的方法,所述對(duì)所述事件及所述時(shí)間間隔進(jìn)行記錄,獲得鍵鼠腳本,包括:
按照時(shí)間順序?qū)λ鍪录约八鰰r(shí)間間隔進(jìn)行線性記錄,獲得所述 鍵鼠腳本。
A10、根據(jù)A1所述的方法,所述對(duì)所述事件及所述時(shí)間間隔進(jìn)行記錄,獲得鍵鼠腳本,包括:
對(duì)所述事件以及所述時(shí)間間隔標(biāo)記序號(hào),所述序號(hào)用于表征所述事件及所述時(shí)間間隔的位置排序;
對(duì)標(biāo)記后的所述事件以及所述時(shí)間間隔進(jìn)行分類記錄,獲得所述鍵鼠腳本。
A11、根據(jù)A9或A10所述的方法,所述對(duì)所述時(shí)間間隔進(jìn)行記錄,包括:
將所述時(shí)間間隔以數(shù)值的形式記錄。
B12、一種鍵鼠腳本錄制的裝置,所述裝置包括:
獲取單元,用于通過(guò)低級(jí)全局鉤子獲取輸入設(shè)備操作的描述信息;
處理單元,用于將所述獲取單元獲取的所述描述信息合成為事件;
計(jì)算單元,用于計(jì)算所述處理單元合成的相鄰兩個(gè)事件之間的時(shí)間間隔;
記錄單元,用于對(duì)所述處理單元合成的所述事件及所述計(jì)算單元計(jì)算的所述時(shí)間間隔進(jìn)行記錄,獲得鍵鼠腳本。
B13、根據(jù)B12所述的裝置,所述裝置還包括:
設(shè)置單元,用于在所述獲取單元通過(guò)低級(jí)全局鉤子獲取輸入設(shè)備操作的描述信息之前,在目的窗口的進(jìn)程中設(shè)置所述低級(jí)全局鉤子,所述目的窗口為進(jìn)行鍵鼠腳本錄制的對(duì)象窗口。
B14、根據(jù)B13所述的裝置,所述裝置還包括:
確定單元,用于在所述設(shè)置單元在目的窗口的進(jìn)程中設(shè)置所述低級(jí)全局鉤子之前,確定所述目的窗口。
B15、根據(jù)B14所述的裝置,所述確定單元,包括:
第一確定模塊,用于將當(dāng)前頂層的活動(dòng)窗口確定為所述目的窗口。
B16、根據(jù)B14所述的裝置,所述確定單元,包括:
第二確定模塊,用于接收窗口選擇指令,查找對(duì)應(yīng)所述窗口句柄的窗口,并將查找到的窗口確定為所述目的窗口,所述窗口選擇指令中攜帶有 窗口句柄。
B17、根據(jù)B12所述的裝置,所述獲取單元使用的所述低級(jí)全局鉤子為低級(jí)鼠標(biāo)鉤子;
所述獲取單元,包括:
第一獲取模塊,用于通過(guò)所述低級(jí)鼠標(biāo)鉤子獲取鼠標(biāo)操作的描述信息。
B18、根據(jù)B12所述的裝置,所述獲取單元使用的所述低級(jí)全局鉤子為低級(jí)鍵盤鉤子;
所述獲取單元,包括:
第二獲取模塊,用于通過(guò)所述低級(jí)鍵盤鉤子獲取鍵盤操作的描述信息。
B19、根據(jù)B12所述的裝置,所述計(jì)算單元,用于:
調(diào)用API函數(shù)QueryPerformanceCounter和QueryPerformanceFrequency計(jì)算相鄰的兩個(gè)觸發(fā)事件間的時(shí)間間隔。
B20、根據(jù)B12所述的裝置,所述記錄單元,包括:
第一記錄模塊,用于按照時(shí)間順序?qū)λ鍪录约八鰰r(shí)間間隔進(jìn)行線性記錄,獲得所述鍵鼠腳本。
B21、根據(jù)B12所述的裝置,所述記錄單元,包括:
第二記錄模塊,用于對(duì)所述事件以及所述時(shí)間間隔標(biāo)記序號(hào),并對(duì)標(biāo)記后的所述事件以及所述時(shí)間間隔進(jìn)行分類記錄,獲得所述鍵鼠腳本,所述序號(hào)用于表征所述事件及所述時(shí)間間隔的位置排序。
B22、根據(jù)B20或B21所述的裝置,所述記錄單元,用于:
將所述時(shí)間間隔以數(shù)值的形式記錄。