郝永彬+韓瑞昕+方英蘭
摘要: 針對計(jì)算機(jī)日常應(yīng)用中經(jīng)常會出現(xiàn)的、需要重復(fù)進(jìn)行某些操作的需求,按照記錄用戶操作、圖像對比分析、模擬輸入的思路,通過封裝Windows API并添加相關(guān)算法,構(gòu)造一個(gè)通用的行為模擬引擎,以達(dá)到解決重復(fù)進(jìn)行某些操作,通過簡化上層編程,方便終端用戶的目的。
關(guān)鍵詞:輸入設(shè)備;行為模擬;引擎
中圖分類號:TP317 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2015)30-0047-04
The Design and Realization of Behavior Simulation Engine Based on Windows
HAO Yong-bin, HAN Rui-xin, FANG Ying-lan
(College of Computer Science, North China University of Technology, Beijing 100144, China)
Abstract: For computer application which appears frequently in demand or need to repeat an action, it has added related algorithm by encapsulating the Windows API according to record user actions and image analysis and analog input idea. It has constructed a generic simulation engine to reach solutions to repeat certain actions by simplifying the top programming and facilitate the end user's purposes.
Key words: I/O device; behavior simulate; engine
1 概述
隨著時(shí)代的發(fā)展,電腦已成為人們?nèi)粘9ぷ骷吧钪胁豢扇鄙俚脑O(shè)備。而在個(gè)人電腦的操作系統(tǒng)中,Windows系統(tǒng)的占有量最大,使用范圍也最為廣泛。而在諸多應(yīng)用場景之中,不乏需要使用電腦進(jìn)行重復(fù)操作的情況,比如將文本文檔或網(wǎng)頁中的信息錄入Excel,或是在OA系統(tǒng)中通過點(diǎn)擊“確定”等按鈕處理大量事務(wù)。諸如此類的重復(fù)操作由于沒有技術(shù)支持進(jìn)行改善或缺乏技術(shù)投入,都只能人工進(jìn)行輸入或點(diǎn)擊,費(fèi)時(shí)費(fèi)力且容易出錯(cuò),降低了工作效率,增加了人工等諸多成本。想一想操作電腦的過程,可以發(fā)現(xiàn)電腦上的操作都是通過鼠標(biāo)、鍵盤來實(shí)現(xiàn)的[1],因此可以考慮開發(fā)一個(gè)通用的行為模擬引擎解決該類問題。
Windows是微軟公司開發(fā)并銷售的一系列桌面操作系統(tǒng),至今已推出諸多版本,而最新的版本則是Windows 10。微軟公司在發(fā)布操作系統(tǒng)時(shí),會同時(shí)發(fā)布與之相對應(yīng)的SDK(Software Development Kit,包含在Visual Studio應(yīng)用程序中),并提供一系列的Windows API(Windows Application Programming Interface, Windows應(yīng)用程序編程接口)供開發(fā)者使用。在諸多的Windows API中,有一系列的I/O相關(guān)的API可以提供輸入功能,可以實(shí)現(xiàn)模擬用戶輸入的效果。通過封裝此類API,并添加模擬用戶及顏色/圖像分析的相應(yīng)算法,即可實(shí)現(xiàn)一個(gè)記錄并模擬用戶行為的引擎,達(dá)到方便上層開發(fā)者及有一定計(jì)算機(jī)編程技術(shù)的終端用戶的目的。
2 引擎設(shè)計(jì)與實(shí)現(xiàn)
2.1 總體設(shè)計(jì)
本引擎主要由三個(gè)模塊構(gòu)成,即輸入記錄模塊,分析識別模塊,模擬輸出模塊。這三個(gè)模塊分別導(dǎo)出為三個(gè)不同的DLL(DLL全稱dynamic linking library.即動(dòng)態(tài)鏈接庫。廣泛應(yīng)用與windows及其他系統(tǒng)中。[2]),以便于更靈活地使用該引擎并拓展其功能。
輸入記錄模塊功能為記錄鍵盤鼠標(biāo)的輸入及在錨點(diǎn)(即屏幕上需進(jìn)行操作的對象,如文本框、按鈕等)出現(xiàn)的時(shí)機(jī)。分析識別模塊功能為在運(yùn)行時(shí)實(shí)時(shí)監(jiān)控屏幕,按照需求尋找錨點(diǎn),并返回錨點(diǎn)坐標(biāo)。模擬輸出模塊功能為讀取已描述出的行為的信息,并按照該數(shù)據(jù)模擬鼠標(biāo)鍵盤輸入。
2.2 輸入記錄模塊設(shè)計(jì)與實(shí)現(xiàn)
2.2.1 模塊設(shè)計(jì)
圖1 hook過程演示
本模塊是基于Windows Hook[3]技術(shù)實(shí)現(xiàn)的。Windows Hook(即Windows鉤子)是Windows系統(tǒng)中用于監(jiān)視、截獲或重定向發(fā)往目標(biāo)窗口消息的特殊接口[4]。如圖1所示,通過設(shè)置Hook,可以截獲Windows消息隊(duì)列中傳遞往應(yīng)用程序窗口的消息(即虛箭頭方向),改為傳遞往hook程序(即實(shí)箭頭方向),而本引擎中所要取得的鍵盤鼠標(biāo)輸入信息就是通過消息隊(duì)列傳遞的,所以通過安放監(jiān)聽整個(gè)系統(tǒng)的全局Hook,即可獲得所有的輸入信息。
2.2.2 模塊實(shí)現(xiàn)
)
該函數(shù)的參數(shù)中code為消息類型,wParam為按鍵的狀態(tài),lParam為指向LPKBDLLHOOKSTRUCT結(jié)構(gòu)體的指針,該結(jié)構(gòu)體包含了按鍵事件的詳細(xì)信息:
KBDLLHOOKSTRUCT *pkbhs = (KBDLLHOOKSTRUCT *)lParam;
在輸入記錄過程中,如需開始或暫停,可通過右ALT加A組合鍵的方式執(zhí)行操作,將執(zhí)行狀態(tài)標(biāo)識RecordState取反,也可通過右ALT加I組合鍵標(biāo)記錨點(diǎn)動(dòng)作開始或結(jié)束: