下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
利用鍵盤鉤子捕獲Windows鍵盤動(dòng)作2004年12月20日07:51天極yesky文/郎銳引言在科研生產(chǎn)中對研制、調(diào)試操作的記錄是非常有必要而且是有很重要價(jià)值的。通過對記錄信息的分析,可以在事故發(fā)生后準(zhǔn)確的分析出事故的起因、操作是否存在失誤等許多重要線索。通常需要記錄的信息是多種多樣的,如環(huán)境溫度記錄、軟件運(yùn)行記錄、文件訪問記錄等等。這里將以鍵盤信息記錄為例來講述類似的實(shí)驗(yàn)信息自動(dòng)記錄的一般實(shí)現(xiàn)方法。由于需要記錄當(dāng)前系統(tǒng)下所有應(yīng)用程序的鍵盤錄入記錄,因此必須采取某種特殊的技術(shù)來實(shí)現(xiàn)本進(jìn)程(監(jiān)視程序)對外部進(jìn)程鍵盤操作信息的獲取。這種技術(shù)便是本文將要論述的核心一系統(tǒng)全局鉤子。本文下面將對Win32平臺(tái)下全局鉤子的運(yùn)行機(jī)制進(jìn)行介紹并給出了一個(gè)具體的由VC++6.0編寫的捕獲鍵盤動(dòng)作的鍵盤鉤子示例程序。系統(tǒng)鉤子和DLL鉤子的本質(zhì)是一段用以處理系統(tǒng)消息的程序,通過系統(tǒng)調(diào)用,將其掛入系統(tǒng)。鉤子的種類有很多,每種鉤子可以截獲并處理相應(yīng)的消息,每當(dāng)特定的消息發(fā)出,在到達(dá)目的窗口之前,鉤子程序先行截獲該消息、得到對此消息的控制權(quán)。此時(shí)在鉤子函數(shù)中就可以對截獲的消息進(jìn)行加工處理,甚至可以強(qiáng)制結(jié)束消息的傳遞。在本程序中我們需要捕獲在任意窗口上的鍵盤輸入,這就需要采用全局鉤子以便攔截整個(gè)系統(tǒng)的消息,而全局鉤子函數(shù)必須以DLL(動(dòng)態(tài)連接庫)為載體進(jìn)行封裝,VC6中有三種形式的MFCDLL可供選擇,即RegularstaticallylinkedtoMFCDLL(標(biāo)準(zhǔn)靜態(tài)鏈接MFCDLL)、RegularusingthesharedMFCDLL(標(biāo)準(zhǔn)動(dòng)態(tài)鏈接MFCDLL)以及ExtensionMFCDLL(擴(kuò)展MFCDLL)。在本程序中為方便起見采用了標(biāo)準(zhǔn)靜態(tài)連接MFCDLL。鍵盤鉤子程序示例本示例程序用到全局鉤子函數(shù),程序分兩部分:可執(zhí)行程序KeyKook和動(dòng)態(tài)連接庫LaunchDLL。首先創(chuàng)建一個(gè)MFCAppWizard(DLL)工程,并選擇RegularstaticallylinkedtoMFCDLL(標(biāo)準(zhǔn)靜態(tài)鏈接MFCDLL)選項(xiàng),以建立MFC擴(kuò)展動(dòng)態(tài)連接庫LaunchDLL.dll。之后,在相應(yīng)的頭文件中添加宏定義和待導(dǎo)出函數(shù)的聲明:#defineDllExport__declspec(dllexport)DllExportvoidWINAPIInstallLaunchEv();classCLaunchDLLApp:publicCWinApp{public:CLaunchDLLAppO;〃{{AFX_VIRTUAL(CLaunchDLLApp)//}}AFX_VIRTUAL〃{{AFX_MSG(CLaunchDLLApp)//NOTE-theClassWizardwilladdandremovememberfunctionshere.//DONOTEDITwhatyouseeintheseblocksofgeneratedcode!//}}AFX_MSGDECLARE_MESSAGE_MAP()};同時(shí)在實(shí)現(xiàn)文件中添加全局變量Hook和全局函數(shù)LauncherHook()、SaveLog():HHOOKHook;LRESULTCALLBACKLauncherHook(intnCode,WPARAMwParam,LPARAMlParam);voidSaveLog(char*c);最后,完成以上提到的這幾個(gè)函數(shù)的具體編碼實(shí)現(xiàn):在此我們實(shí)現(xiàn)了Windows的系統(tǒng)鉤子的安裝,首先要調(diào)用SDK中的API函數(shù)SetWindowsHookEx()來安裝這個(gè)鉤子函數(shù),其原型是:HHOOKSetWindowsHookEx(intidHook,HOOKPROClpfn,HINSTANCEhMod,DWORDdwThreadld);利用鍵盤鉤子捕獲Windows鍵盤動(dòng)作(2)2004年12月20日07:51天極yesky文/郎銳其中,第一個(gè)參數(shù)指定鉤子的類型,常用的有WH_MOUSE、WH_KEYBOARD、WH_GETMESSAGE等,在此我們只關(guān)心鍵盤操作所以設(shè)定為WH_KEYBOARD;第二個(gè)參數(shù)標(biāo)識(shí)鉤子函數(shù)的入口地址,當(dāng)鉤子鉤到任何消息后便調(diào)用這個(gè)函數(shù),即當(dāng)不管系統(tǒng)的哪個(gè)窗口有鍵盤輸入馬上會(huì)引起LauncherHook的動(dòng)作;第三個(gè)參數(shù)是鉤子函數(shù)所在模塊的句柄,我們可以很簡單的設(shè)定其為本應(yīng)用程序的實(shí)例句柄;最后一個(gè)參數(shù)是鉤子相關(guān)函數(shù)的ID用以指定想讓鉤子去鉤哪個(gè)線程,為0時(shí)則攔截整個(gè)系統(tǒng)的消息,在本程序中鉤子需要為全局鉤子,故設(shè)定為0。雖然調(diào)用CallNextHookEx()是可選的,但調(diào)用此函數(shù)的習(xí)慣是很值得推薦的;否則的話,其他安裝了鉤子的應(yīng)用程序?qū)⒉粫?huì)接收到鉤子的通知而且還有可能產(chǎn)生不正確的結(jié)果,所以我們應(yīng)盡量調(diào)用該函數(shù)除非絕對需要阻止其他程序獲取通知。當(dāng)有鍵彈起的時(shí)候就通過此函數(shù)將剛彈起的鍵保存到記錄文件中從而實(shí)現(xiàn)對鍵盤進(jìn)行監(jiān)控記錄的目的。編譯完成便可得到運(yùn)行時(shí)所需的鍵盤鉤子的動(dòng)態(tài)連接庫和進(jìn)行靜態(tài)鏈接時(shí)用到的lib庫。下面開始編寫調(diào)用此動(dòng)態(tài)連接庫的主程序,并實(shí)現(xiàn)最后的集成。另外創(chuàng)建一個(gè)單文檔應(yīng)用程序,把所需的動(dòng)態(tài)鏈接庫頭文件、lib庫復(fù)制到工程目錄中,將動(dòng)態(tài)鏈接庫復(fù)制到Debug目錄下。然后鏈接DLL庫:在"Project","Settings…"的"Link"屬性頁內(nèi),在"Object/librarymodules:"中填入"LaunchDLL.lib"。再通過"Project","AddToProject","Files…"將LaunchDLL.h添加到工程中來,最后在視類的源文件KeyHook.cpp中加入對其的引用:這樣我們就可以象使用本工程內(nèi)的函數(shù)一樣使用動(dòng)態(tài)連接庫LaunchDLL.dll中的所有導(dǎo)出函數(shù)了。接下來在視類重載虛函數(shù)OnInitialUpdate(),并添加代碼完成對鍵盤鉤子的安裝:到此為止其實(shí)已經(jīng)完成了所有的功能,但由于本程序是作為一個(gè)后臺(tái)監(jiān)控軟件運(yùn)行,因此還應(yīng)當(dāng)采取其他措施以隱藏其程序界面。這只需在應(yīng)用程序類CkeyHookApp的Initinstance()函數(shù)中將m_pMainWnd-〉ShowWindow(SW_SHOW)改為m_pMainWnd-〉ShowWindow(SW_HIDE)即可。小結(jié)編譯運(yùn)行程序,運(yùn)行起來之后并無什么現(xiàn)象,但通過Alt+Ctrl+Del在關(guān)閉程序?qū)υ捒騼?nèi)可以找到我們剛編寫完畢的程序"KeyHook",隨便在什么程序中通過鍵盤輸入字符,然后打開記錄文件,我們會(huì)發(fā)現(xiàn):通過鍵盤鉤子,我們剛才輸入的字符都被記錄到
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年房產(chǎn)認(rèn)購訂金合同
- 2025年粵教新版八年級地理上冊月考試卷含答案
- 2025年滬科版選擇性必修1歷史上冊月考試卷
- 2025年人教A新版九年級歷史下冊階段測試試卷含答案
- 2025年滬科版選修歷史上冊月考試卷含答案
- 2025年人教新課標(biāo)九年級語文下冊階段測試試卷含答案
- 2025年粵教版高三歷史上冊月考試卷含答案
- 二零二五版嬰幼兒奶粉跨境電商進(jìn)口合同范本4篇
- 二零二五年度農(nóng)藥企業(yè)信息化管理系統(tǒng)開發(fā)合同
- 二零二五版門窗行業(yè)綠色制造體系建設(shè)合同4篇
- 河道綜合治理工程技術(shù)投標(biāo)文件
- 專題24 短文填空 選詞填空 2024年中考英語真題分類匯編
- 再生障礙性貧血課件
- 產(chǎn)后抑郁癥的護(hù)理查房
- 2024年江蘇護(hù)理職業(yè)學(xué)院高職單招(英語/數(shù)學(xué)/語文)筆試歷年參考題庫含答案解析
- 電能質(zhì)量與安全課件
- 醫(yī)藥營銷團(tuán)隊(duì)建設(shè)與管理
- 工程項(xiàng)目設(shè)計(jì)工作管理方案及設(shè)計(jì)優(yōu)化措施
- 圍場滿族蒙古族自治縣金匯螢石開采有限公司三義號螢石礦礦山地質(zhì)環(huán)境保護(hù)與土地復(fù)墾方案
- 小升初幼升小擇校畢業(yè)升學(xué)兒童簡歷
- 資金支付審批單
評論
0/150
提交評論