![利用鍵盤(pán)鉤子捕獲Windows鍵盤(pán)動(dòng)作_第1頁(yè)](http://file4.renrendoc.com/view/7d856359f8cc45acbe07a226308e6835/7d856359f8cc45acbe07a226308e68351.gif)
![利用鍵盤(pán)鉤子捕獲Windows鍵盤(pán)動(dòng)作_第2頁(yè)](http://file4.renrendoc.com/view/7d856359f8cc45acbe07a226308e6835/7d856359f8cc45acbe07a226308e68352.gif)
![利用鍵盤(pán)鉤子捕獲Windows鍵盤(pán)動(dòng)作_第3頁(yè)](http://file4.renrendoc.com/view/7d856359f8cc45acbe07a226308e6835/7d856359f8cc45acbe07a226308e68353.gif)
![利用鍵盤(pán)鉤子捕獲Windows鍵盤(pán)動(dòng)作_第4頁(yè)](http://file4.renrendoc.com/view/7d856359f8cc45acbe07a226308e6835/7d856359f8cc45acbe07a226308e68354.gif)
![利用鍵盤(pán)鉤子捕獲Windows鍵盤(pán)動(dòng)作_第5頁(yè)](http://file4.renrendoc.com/view/7d856359f8cc45acbe07a226308e6835/7d856359f8cc45acbe07a226308e68355.gif)
下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
利用鍵盤(pán)鉤子捕獲Windows鍵盤(pán)動(dòng)作2004年12月20日07:51天極yesky文/郎銳引言在科研生產(chǎn)中對(duì)研制、調(diào)試操作的記錄是非常有必要而且是有很重要價(jià)值的。通過(guò)對(duì)記錄信息的分析,可以在事故發(fā)生后準(zhǔn)確的分析出事故的起因、操作是否存在失誤等許多重要線索。通常需要記錄的信息是多種多樣的,如環(huán)境溫度記錄、軟件運(yùn)行記錄、文件訪問(wèn)記錄等等。這里將以鍵盤(pán)信息記錄為例來(lái)講述類(lèi)似的實(shí)驗(yàn)信息自動(dòng)記錄的一般實(shí)現(xiàn)方法。由于需要記錄當(dāng)前系統(tǒng)下所有應(yīng)用程序的鍵盤(pán)錄入記錄,因此必須采取某種特殊的技術(shù)來(lái)實(shí)現(xiàn)本進(jìn)程(監(jiān)視程序)對(duì)外部進(jìn)程鍵盤(pán)操作信息的獲取。這種技術(shù)便是本文將要論述的核心一系統(tǒng)全局鉤子。本文下面將對(duì)Win32平臺(tái)下全局鉤子的運(yùn)行機(jī)制進(jìn)行介紹并給出了一個(gè)具體的由VC++6.0編寫(xiě)的捕獲鍵盤(pán)動(dòng)作的鍵盤(pán)鉤子示例程序。系統(tǒng)鉤子和DLL鉤子的本質(zhì)是一段用以處理系統(tǒng)消息的程序,通過(guò)系統(tǒng)調(diào)用,將其掛入系統(tǒng)。鉤子的種類(lèi)有很多,每種鉤子可以截獲并處理相應(yīng)的消息,每當(dāng)特定的消息發(fā)出,在到達(dá)目的窗口之前,鉤子程序先行截獲該消息、得到對(duì)此消息的控制權(quán)。此時(shí)在鉤子函數(shù)中就可以對(duì)截獲的消息進(jìn)行加工處理,甚至可以強(qiáng)制結(jié)束消息的傳遞。在本程序中我們需要捕獲在任意窗口上的鍵盤(pán)輸入,這就需要采用全局鉤子以便攔截整個(gè)系統(tǒng)的消息,而全局鉤子函數(shù)必須以DLL(動(dòng)態(tài)連接庫(kù))為載體進(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)。在本程序中為方便起見(jiàn)采用了標(biāo)準(zhǔn)靜態(tài)連接MFCDLL。鍵盤(pán)鉤子程序示例本示例程序用到全局鉤子函數(shù),程序分兩部分:可執(zhí)行程序KeyKook和動(dòng)態(tài)連接庫(kù)LaunchDLL。首先創(chuàng)建一個(gè)MFCAppWizard(DLL)工程,并選擇RegularstaticallylinkedtoMFCDLL(標(biāo)準(zhǔn)靜態(tài)鏈接MFCDLL)選項(xiàng),以建立MFC擴(kuò)展動(dòng)態(tài)連接庫(kù)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()來(lái)安裝這個(gè)鉤子函數(shù),其原型是:HHOOKSetWindowsHookEx(intidHook,HOOKPROClpfn,HINSTANCEhMod,DWORDdwThreadld);利用鍵盤(pán)鉤子捕獲Windows鍵盤(pán)動(dòng)作(2)2004年12月20日07:51天極yesky文/郎銳其中,第一個(gè)參數(shù)指定鉤子的類(lèi)型,常用的有WH_MOUSE、WH_KEYBOARD、WH_GETMESSAGE等,在此我們只關(guān)心鍵盤(pán)操作所以設(shè)定為WH_KEYBOARD;第二個(gè)參數(shù)標(biāo)識(shí)鉤子函數(shù)的入口地址,當(dāng)鉤子鉤到任何消息后便調(diào)用這個(gè)函數(shù),即當(dāng)不管系統(tǒng)的哪個(gè)窗口有鍵盤(pán)輸入馬上會(huì)引起LauncherHook的動(dòng)作;第三個(gè)參數(shù)是鉤子函數(shù)所在模塊的句柄,我們可以很簡(jiǎn)單的設(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ù)除非絕對(duì)需要阻止其他程序獲取通知。當(dāng)有鍵彈起的時(shí)候就通過(guò)此函數(shù)將剛彈起的鍵保存到記錄文件中從而實(shí)現(xiàn)對(duì)鍵盤(pán)進(jìn)行監(jiān)控記錄的目的。編譯完成便可得到運(yùn)行時(shí)所需的鍵盤(pán)鉤子的動(dòng)態(tài)連接庫(kù)和進(jìn)行靜態(tài)鏈接時(shí)用到的lib庫(kù)。下面開(kāi)始編寫(xiě)調(diào)用此動(dòng)態(tài)連接庫(kù)的主程序,并實(shí)現(xiàn)最后的集成。另外創(chuàng)建一個(gè)單文檔應(yīng)用程序,把所需的動(dòng)態(tài)鏈接庫(kù)頭文件、lib庫(kù)復(fù)制到工程目錄中,將動(dòng)態(tài)鏈接庫(kù)復(fù)制到Debug目錄下。然后鏈接DLL庫(kù):在"Project","Settings…"的"Link"屬性頁(yè)內(nèi),在"Object/librarymodules:"中填入"LaunchDLL.lib"。再通過(guò)"Project","AddToProject","Files…"將LaunchDLL.h添加到工程中來(lái),最后在視類(lèi)的源文件KeyHook.cpp中加入對(duì)其的引用:這樣我們就可以象使用本工程內(nèi)的函數(shù)一樣使用動(dòng)態(tài)連接庫(kù)LaunchDLL.dll中的所有導(dǎo)出函數(shù)了。接下來(lái)在視類(lèi)重載虛函數(shù)OnInitialUpdate(),并添加代碼完成對(duì)鍵盤(pán)鉤子的安裝:到此為止其實(shí)已經(jīng)完成了所有的功能,但由于本程序是作為一個(gè)后臺(tái)監(jiān)控軟件運(yùn)行,因此還應(yīng)當(dāng)采取其他措施以隱藏其程序界面。這只需在應(yīng)用程序類(lèi)CkeyHookApp的Initinstance()函數(shù)中將m_pMainWnd-〉ShowWindow(SW_SHOW)改為m_pMainWnd-〉ShowWindow(SW_HIDE)即可。小結(jié)編譯運(yùn)行程序,運(yùn)行起來(lái)之后并無(wú)什么現(xiàn)象,但通過(guò)Alt+Ctrl+Del在關(guān)閉程序?qū)υ捒騼?nèi)可以找到我們剛編寫(xiě)完畢的程序"KeyHook",隨便在什么程序中通過(guò)鍵盤(pán)輸入字符,然后打開(kāi)記錄文件,我們會(huì)發(fā)現(xiàn):通過(guò)鍵盤(pán)鉤子,我們剛才輸入的字符都被記錄到
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年企業(yè)策劃辦公用品采購(gòu)合同協(xié)議
- 2025年醫(yī)療器械設(shè)備年維護(hù)服務(wù)合同范例
- 2025年泳池水處理設(shè)備項(xiàng)目申請(qǐng)報(bào)告模板
- 2025年銷(xiāo)售合同范例寶典
- 2025年合作銷(xiāo)售利潤(rùn)分配協(xié)議書(shū)模板
- 2025年微波等離子炬光譜儀項(xiàng)目立項(xiàng)申請(qǐng)報(bào)告模范
- 2025年協(xié)同輔導(dǎo)協(xié)議書(shū)
- 2025年個(gè)人信用質(zhì)押合同樣式
- 2025年豪華游輪項(xiàng)目立項(xiàng)申請(qǐng)報(bào)告模板
- 2025年上海市電網(wǎng)建設(shè)與施工安全合作協(xié)議
- 小王子-英文原版
- 北師大版六年級(jí)下冊(cè)書(shū)法練習(xí)指導(dǎo)教案教學(xué)設(shè)計(jì)
- 四百字作文格子稿紙(可打印編輯)
- 新能源材料與器件PPT完整全套教學(xué)課件
- 新概念二冊(cè)課文電子版
- 三筆字講座(完整版)
- 蘇教版數(shù)學(xué)二年級(jí)下冊(cè)《認(rèn)識(shí)時(shí)分》教案(無(wú)錫公開(kāi)課)
- 即興口語(yǔ)(姜燕)-課件-即興口語(yǔ)第四章PPT-中國(guó)傳媒大學(xué)
- 報(bào)批稿20160301-浙江嘉化能源化工股份有限公司年產(chǎn)16萬(wàn)噸多品種脂肪醇(酸)產(chǎn)品項(xiàng)目
- 市政道路改造工程施工組織設(shè)計(jì)(最新)11623
- 疑似預(yù)防接種異常反應(yīng)(AEFI)監(jiān)測(cè)與處理PPT課件
評(píng)論
0/150
提交評(píng)論