倪志慧 沈嵐嵐(桂林電子科技大學(xué)信息科技學(xué)院,廣西 桂林 541000)
隨著計(jì)算機(jī)技術(shù)的普及,在使用計(jì)算機(jī)的時(shí)候經(jīng)常會(huì)面臨反復(fù)同樣的操作或者需要快速點(diǎn)擊的問題,如軟件測(cè)試人員在進(jìn)行軟件測(cè)試的時(shí)候,和各種游戲世界里的人物操作,因此,催生了許多種的鼠標(biāo)鍵盤錄制回放軟件。
然而當(dāng)使用這些軟件的時(shí)候,往往會(huì)有很多不盡如人意或者不滿足自己所需求的地方,大部分軟件只是錄制點(diǎn)擊,沒有錄制鼠標(biāo)移動(dòng)的軌跡,所以本文對(duì)鼠標(biāo)鍵盤的錄制和回放的原理和相關(guān)技術(shù)進(jìn)行了研究。
Windows消息機(jī)制維護(hù)消息隊(duì)列來進(jìn)行的,所有產(chǎn)生的消息都被放入消息隊(duì)列中,而消息對(duì)應(yīng)著事件,每當(dāng)鼠標(biāo)發(fā)生移動(dòng)、按鍵按下松開以及單擊雙擊類似事件的時(shí)候,都會(huì)產(chǎn)生相應(yīng)的消息,這就使監(jiān)聽鼠標(biāo)鍵盤事件成為了可能。
HOOK技術(shù)能夠截獲消息并對(duì)截獲的消息參數(shù)進(jìn)行處理,通過系統(tǒng)調(diào)用,將HOOK掛入系統(tǒng)。每當(dāng)特定的消息發(fā)出時(shí),在沒有到達(dá)目的窗口前,HOOK程序先截獲該消息,優(yōu)先得到對(duì)該消息的控制權(quán),并可以對(duì)消息進(jìn)行各種各樣的處理,完成處理后,再繼續(xù)傳遞該消息或者直接將該消息拋棄。
本文使用Java語(yǔ)言,利用JNA包 (Java Native Access)來實(shí)現(xiàn)鼠標(biāo)鍵盤監(jiān)聽和回放工作。JNA提供一組Java工具類用于在運(yùn)行期動(dòng)態(tài)訪問系統(tǒng)本地庫(kù),只要在一個(gè)Java接口中描述目標(biāo)native library的函數(shù)與結(jié)構(gòu),JNA將自動(dòng)實(shí)現(xiàn)Java接口到native function的映射。鼠標(biāo)鍵盤的每一個(gè)動(dòng)作都會(huì)有一個(gè)消息傳遞給操作系統(tǒng)的應(yīng)用程序,通過調(diào)用的JNA提供的公用Jar包中的接口獲取到鼠標(biāo)鍵盤動(dòng)作所產(chǎn)生的HOOK消息;將記錄的消息以一定的數(shù)據(jù)格式保存為腳本文件后,利用腳本文件怎樣去實(shí)現(xiàn)鼠標(biāo)鍵盤動(dòng)作的回放。
鼠標(biāo)鍵盤錄制回放系統(tǒng)的實(shí)現(xiàn)中,需要利用Jna包來實(shí)現(xiàn),所以首先需要導(dǎo)入JNA包,定義鼠標(biāo)鍵盤鉤子以及鼠標(biāo)鍵盤鉤子數(shù)據(jù)結(jié)構(gòu)體:
通過調(diào)用的JNA提供的接口,在監(jiān)聽HOOK消息程序中加入自定義的代碼,完成對(duì)鼠標(biāo)鍵盤消息的監(jiān)聽和錄制,其實(shí)現(xiàn)如下:
監(jiān)聽截取消息的時(shí)候,得到的是消息參數(shù),需要解析該消息參數(shù),進(jìn)一步得到需要的數(shù)據(jù)信息。對(duì)于鼠標(biāo)事件,需要記錄的是鼠標(biāo)的位置:和按下的按鍵,根據(jù)消息記錄下相應(yīng)的操作和坐標(biāo)到txt文件。而鍵盤只要記錄按下的鍵即可。
完成了鼠標(biāo)和鍵盤記錄后,使用robot機(jī)器人讀取記錄鼠標(biāo)操作的TXT文件,將其讀到Vector v容器中,相當(dāng)于一個(gè)數(shù)組,然后分析內(nèi)容結(jié)構(gòu),得知要進(jìn)行的操作。
根據(jù)分析所得的內(nèi)容,用robot模擬執(zhí)行,實(shí)現(xiàn)回放,下面代碼能夠模擬執(zhí)行鼠標(biāo)左鍵單擊和鍵盤按鍵的操作。
本文實(shí)現(xiàn)了一個(gè)鼠標(biāo)鍵盤的錄制與回訪系統(tǒng),效果如圖1所示。
圖1 系統(tǒng)主界面
點(diǎn)擊開始錄制之后,只需要把需要重復(fù)的操作,操作一遍,程序便會(huì)記錄下來,選擇導(dǎo)出文件即可,當(dāng)需要執(zhí)行重復(fù)動(dòng)作時(shí),選擇需要加載的操作文件,點(diǎn)擊開始執(zhí)行,便可以解放雙手人程序來完成操作。開始執(zhí)行前也可以打開文件根據(jù)格式修改操作。如圖2所示:
圖2 信息記錄文件
本文基于Windows消息機(jī)制,利用HOOK技術(shù)研究基于JNA實(shí)現(xiàn)了一個(gè)鼠標(biāo)鍵盤錄制和回放程序,能夠?qū)崿F(xiàn)記錄操作和回放操作。但是鼠標(biāo)鍵盤操作執(zhí)行速度還有所不足,另外在操作回放時(shí),不能使用電腦,不能把需要回放操作的程序后臺(tái)進(jìn)行,這是需要改進(jìn)的地方,有待進(jìn)一步完善。