亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

Windows的鉤子機制詳解

2020-01-26 15:28:46
字體:
來源:轉載
供稿:網友

一、概述:

了解windows程序設計的人都知道,Windows系統程序的運行是建立在消息傳遞機制的基礎之上的,幾乎所有的程序活動都由消息來驅動。鉤子機制可以看作是一個消息的中轉站,控制系統發出消息的處理和傳遞。利用鉤子,我們可以截獲系統發給應用程序的消息,并且在經過處理后決定是否將消息再發給下一個應用程序。利用鉤子的這一特性,我們可以創建一個監控程序,收集和控制系統發出的消息。

二、Windows鉤子程序的編制

編制Windows的鉤子程序,需要用到幾個SDK中的API函數。下面列出這幾個函數的原型及說明:

HHOOK SetWindowsHookEx( int idHook, HOOK_PROC lpfn, HINSTANCE hMod,DWORD dwThreadID);

參數說明:
idHook :鉤子的類型
lpfn :鉤子處理函數地址
hMod :包含鉤子函數的模塊句柄
dwThreadID :鉤子的監控線程

函數說明:
函數將在系統中掛上一個由idHook指定類型的鉤子,監控并處理相應的特定消息。

BOOL UnhookWindowsHookEx( HHOOK hhk );

函數說明:函數將撤銷由hhk指定的鉤子。

LRESULT CallNextHookEx( HHOOK hhk, int nCode, WPARAM wParam, LPARAM lParam );

函數說明:函數將消息向下傳遞,下一個鉤子處理將截獲這一消息。

由于鉤子的處理涉及到模塊及進程間的數據地址問題,一般處理是把鉤子整合到一個動態鏈接庫(DLL)中,并設立一個全局數據共享數據段,以存貯一些全局變量,保留上次鉤子消息事件發生時的狀態。全局共享數據段可以用如下的格式定義:

#pragma data_seg("PublicData")HHOOK hhook=NULL; //全局共享數據#pragma data_seg()

在本文所附帶的范例程序中,演示了如何編制一個鼠標鉤子(WH_MOUSE)程序。這個程序監視了Windows系統的鼠標消息,在監控期間,程序可以用戶單擊鼠標左鍵的次數。其它類型的鉤子程序的編寫過程與范例程序類似。

三、范例程序的建立與代碼分析

正如上面所說的,建立鉤子程序時需要把鉤子處理整合到動態鏈接庫中,所以例程中需要建立兩個Project。

1、建立鉤子處理動態鏈接庫:

(1)選擇MFC AppWizard(DLL)創建一個新Project,命名為"Spy";

(2)選擇MFC Extension DLL類型

(3)創建一個新的頭文件,命名為"Hook.h",修改它的代碼如下

extern "C" LRESULT CALLBACK MouseProc(int code,WPARAM wParam,LPARAM lParam); //鉤子處理函數extern "C" BOOL WINAPI StartHook(); //啟動鉤子函數extern "C" BOOL WINAPI StopHook(); //撤銷鉤子函數extern "C" int WINAPI GetResult(); //取得鼠標單擊次數的函數

(4)修改Spy.cpp文件代碼如下(黑體部分為添加內容)

#include "stdafx.h"#include <afxdllx.h>#include "spyhook.h"……//省略部分機器生成代碼#pragma data_seg("PublicData") //定義全局數據段HHOOK hhook=NULL; //鉤子句柄HINSTANCE pInstance=NULL; //鉤子模塊句柄UINT MouseClick=0; //記錄鼠標單擊次數的變量#pragma data_seg()……//省略部分機器生成代碼extern "C" int APIENTRYDllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved){ if (dwReason == DLL_PROCESS_ATTACH){ ……//省略部分機器生成代碼new CDynLinkLibrary(SpyDLL);pInstance=hInstance; //取得模塊句柄}else if (dwReason == DLL_PROCESS_DETACH){ TRACE0("SPY.DLL Terminating!/n");AfxTermExtensionModule(SpyDLL);}return 1; }extern "C" LRESULT CALLBACK MouseProc(int code,WPARAM wParam,LPARAM lParam) //鉤子處理函數{ if (code < 0) //若code<0,直接調用CallNextHookEx返回return CallNextHookEx(hhook, code, wParam, lParam);if(wParam==WM_LBUTTONDOWN){ MouseClick++; //記錄鼠標單擊次數}return CallNextHookEx(hhook, code, wParam,lParam);}extern "C" BOOL WINAPI StartHook() //啟動鉤子函數{ hhook=SetWindowsHookEx(WH_MOUSE,MouseProc,pInstance,0); //掛上鉤子if(hhook!=NULL)return TRUE;else return FALSE;}extern "C" BOOL WINAPI StopHook() //撤銷鉤子函數{ return UnhookWindowsHookEx(hhook); //撤銷鉤子}extern "C" int WINAPI GetResult() //返回鼠標單擊次數{ return MouseClick;}

(5)修改Spy.def文件如下

LIBRARY "SPY"DEs criptION 'SPY Windows Dynamic Link Library'EXPORTSStartHook @1StopHook @2GetResult @3

(6)編譯Project,生成Spy.dll文件和Spy.Lib文件

2、建立使用鉤子的應用程序

生成一個單文檔的可執行文件(EXE)的Project
修改資源中的主菜單,增加一個菜單項"監控",下有三個子菜單項,分別為"啟動","撤銷","取出"
在Project中加入Spy.Lib文件和Hook.h文件
分別修改"啟動","撤銷","取出"菜單項的Command響應函數如下:

#include "hook.h"……//省略部分機器生成代碼void CMainFrame::OnStartSpy() //"啟動"菜單項的響應函數{ StartHook();}void CMainFrame::OnReleaseSpy() //"撤銷"菜單項的響應函數{ StopHook();}void CMainFrame::OnGet() //"取出"菜單項的響應函數{ int Result=GetResult();char buffer[40];wsprintf(buffer,"在程序運行期間,你共單擊鼠標%d次",Result);::MessageBox(this->m_hWnd,buffer,"Message",MB_OK); }

編譯這個Project,并把Spy.dll放到生成的可執行文件的目錄下,便可運行程序。運行時,選擇"監控"菜單中的"啟動"菜單項,鉤子便開始工作,監視鼠標的活動情況;選擇"撤銷"菜單項,系統便撤銷鉤子;選擇"取出"菜單項,程序便報告在監控期間,用戶單擊鼠標左鍵的次數。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产亚洲精品久久久| 欧美极品少妇xxxxx| 国产精品九九久久久久久久| 久久天天躁夜夜躁狠狠躁2022| 丝袜一区二区三区| 亚洲在线一区二区| 在线视频免费一区二区| 日韩福利视频在线观看| 亚洲www视频| 成人激情黄色网| 日韩有码片在线观看| 国产欧美一区二区三区视频| 国产精品黄视频| 欧美视频一区二区三区…| 亚洲网站在线播放| 国产va免费精品高清在线| 韩国福利视频一区| 91免费观看网站| 亚洲人成网7777777国产| 日韩成人在线免费观看| 欧美俄罗斯性视频| 国产精品久久久久久久久久久不卡| 亚洲成人久久电影| 亚洲剧情一区二区| 国产精品久久久91| 一本色道久久综合亚洲精品小说| 精品视频久久久久久久| 日韩在线播放av| 欧美大人香蕉在线| 亚洲一区二区三区在线免费观看| 国产不卡在线观看| 欧美中文在线字幕| 欧美性生交大片免费| 日韩性生活视频| 国产亚洲精品一区二555| 欧美成人精品影院| 国产精品久久久久久久电影| 欧美理论片在线观看| 久久综合久中文字幕青草| 亚洲精品99999| 亚洲国产精品推荐| 欧美激情成人在线视频| 日韩欧美在线国产| 国产有码一区二区| 国产精品视频26uuu| 国产综合视频在线观看| 一区二区三区视频观看| 亚洲黄色有码视频| 亚洲精品福利视频| 色噜噜久久综合伊人一本| 青青久久aⅴ北条麻妃| 国产精品成人国产乱一区| 亚洲精品456在线播放狼人| 欧美与黑人午夜性猛交久久久| 日韩中文字幕精品| 精品性高朝久久久久久久| 国产情人节一区| 久久久免费观看视频| 欧洲美女免费图片一区| 国产亚洲视频中文字幕视频| 欧美激情二区三区| 日韩欧美亚洲成人| 欧美高清videos高潮hd| 激情亚洲一区二区三区四区| 久久久久久国产精品| 国产婷婷成人久久av免费高清| 国产精品久久久久久久久久东京| 日韩精品福利网站| 国语自产在线不卡| 精品久久在线播放| 亚洲激情视频在线观看| 国产69精品99久久久久久宅男| 最新69国产成人精品视频免费| 国产日韩精品入口| 亚洲国产福利在线| 国产成人精品在线视频| 777精品视频| 亚洲自拍av在线| 中文亚洲视频在线| 日韩精品视频免费专区在线播放| 亚洲xxx视频| 国产日韩精品一区二区| 色噜噜久久综合伊人一本| 欧美在线观看网址综合| 国产一区红桃视频| 亚洲午夜av电影| 国外成人性视频| 在线观看国产成人av片| 美日韩精品免费视频| 国产午夜精品一区理论片飘花| 亚洲黄页视频免费观看| 久久久久久亚洲| 亚洲欧美日韩爽爽影院| 国产精品日韩久久久久| 91在线观看欧美日韩| 日韩国产精品视频| 美女黄色丝袜一区| 黑丝美女久久久| 国产精品成人一区二区三区吃奶| 国产精品成人aaaaa网站| 亚洲国产成人91精品| 性金发美女69hd大尺寸| 亚洲在线视频福利| 久久人人爽亚洲精品天堂| 日韩有码视频在线| 国产成人综合一区二区三区| 国产精品夜色7777狼人| 91免费看视频.| 久久成人18免费网站| 国产午夜精品久久久| 国产精品激情av在线播放| 91精品在线播放| 欧美专区中文字幕| 欧美国产精品人人做人人爱| 国产精品久久久久久久天堂| 欧美性猛交xxxxx水多| 91精品综合视频| 日韩av不卡在线| 欧亚精品在线观看| 中文字幕亚洲情99在线| 亚洲区免费影片| 成人黄色在线观看| 午夜精品久久久久久久白皮肤| 国精产品一区一区三区有限在线| 日韩免费观看网站| 亚洲精品日韩在线| 国产ts人妖一区二区三区| 欧美激情一级精品国产| 亚洲激情视频在线| 福利精品视频在线| 成人网页在线免费观看| 国产精品久久久久久中文字| 欧美第一页在线| 亚洲国产精品电影在线观看| 久久精品国产2020观看福利| 福利一区福利二区微拍刺激| 成人网在线免费看| 97不卡在线视频| 国模私拍一区二区三区| 日韩在线观看免费全集电视剧网站| 国产网站欧美日韩免费精品在线观看| 青青草原成人在线视频| 欧美久久精品一级黑人c片| 精品视频在线播放色网色视频| 中文字幕亚洲综合| 91在线播放国产| 亚洲精品动漫久久久久| 欧美日韩亚洲视频| 久久国产视频网站| 日韩精品在线免费观看视频| 日韩成人免费视频| 高清欧美性猛交xxxx黑人猛交| 精品在线小视频| 亚洲自拍另类欧美丝袜| 成人网址在线观看| 亚洲资源在线看| 亚洲欧美综合区自拍另类| 一区二区三区精品99久久| 人人爽久久涩噜噜噜网站| 日韩亚洲欧美成人| 性欧美激情精品| 国产91露脸中文字幕在线| 亚洲春色另类小说| 久久久久国产一区二区三区|