青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

S.l.e!ep.¢%

像打了激速一樣,以四倍的速度運(yùn)轉(zhuǎn),開(kāi)心的工作
簡(jiǎn)單、開(kāi)放、平等的公司文化;尊重個(gè)性、自由與個(gè)人價(jià)值;
posts - 1098, comments - 335, trackbacks - 0, articles - 1
  C++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

我們知道,Windows系統(tǒng)是建立在消息傳遞機(jī)制基礎(chǔ)上的,幾乎所有的程序活動(dòng)都由消息來(lái)驅(qū)動(dòng)。Windows的鉤子機(jī)制可以看作是一個(gè)消息中轉(zhuǎn)站,控制系統(tǒng)發(fā)出消息的處理和傳遞,利用鉤子,我們可以截獲系統(tǒng)發(fā)給應(yīng)用程序的消息,經(jīng)過(guò)處理后決定是否將消息再發(fā)給下一個(gè)應(yīng)用程序。

利用鉤子的這一特性,我們可以創(chuàng)建一個(gè)監(jiān)控程序,用來(lái)收集和控制系統(tǒng)發(fā)出的消息。

 

■編制Windows鉤子程序

 


■編制Windows鉤子程序

 

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

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

參數(shù)說(shuō)明如下:

idHook:鉤子的類型

lpfn:鉤子處理函數(shù)地址

hMod:包含鉤子函數(shù)的模塊句柄

dwThreadID:鉤子的監(jiān)控線程

函數(shù)說(shuō)明:函數(shù)將在系統(tǒng)中掛上一個(gè)由idHook指定類型的鉤子,監(jiān)控并處理相應(yīng)的特定消息。

BOOL UnhookWindowsHookEx(HHOOK hhk);

函數(shù)說(shuō)明:函數(shù)將撤銷由hhk指定的鉤子。

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

函數(shù)說(shuō)明:函數(shù)將消息向下傳遞,下一個(gè)鉤子處理將截獲這一消息。

由于鉤子的處理涉及到模塊及進(jìn)程間的數(shù)據(jù)地址問(wèn)題,一般情況是把鉤子整合到一個(gè)動(dòng)態(tài)鏈接庫(kù)(DLL)中,并設(shè)立一個(gè)全局?jǐn)?shù)據(jù)共享數(shù)據(jù)段,以存貯一些全局變量,保留上次鉤子消息事件發(fā)生時(shí)的狀態(tài)。全局共享數(shù)據(jù)段可以用如下的格式定義:

#pragma data_seg("PublicData")

HHOOK hhook=NULL;

//全局共享數(shù)據(jù)

#pragma data_seg()

本文的范例程序演示了如何編制一個(gè)鼠標(biāo)鉤子(WH_MOUSE)程序,其它類型的鉤子程序的編寫過(guò)程與范例程序類似。

 

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

 


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

 

建立鉤子程序時(shí)需要把鉤子處理整合到動(dòng)態(tài)鏈接庫(kù)中,所以例程中需要建立兩個(gè)Project。

1.建立鉤子處理動(dòng)態(tài)鏈接庫(kù)

(1) 選擇MFC AppWizard(DLL)創(chuàng)建一個(gè)新Project,命名為“Spy”。

(2) 選擇MFC Extension DLL類型。

(3)創(chuàng)建一個(gè)新的頭文件,命名為“Hook.h”,修改它的代碼如下:

extern "C" LRESULT CALLBACK MouseProc(int code,

WPARAM wParam,LPARAM lParam); //鉤子處理函數(shù)

extern "C" BOOL WINAPI StartHook();

//啟動(dòng)鉤子函數(shù)

extern "C" BOOL WINAPI StopHook();

//撤銷鉤子函數(shù)

extern "C" int WINAPI GetResult();

//取得鼠標(biāo)單擊次數(shù)的函數(shù)

(4)修改Spy.cpp程序代碼如下:

#include "stdafx.h"

#include 〈afxdllx.h〉

#include "spyhook.h"

……

//省略部分機(jī)器生成代碼

#pragma data_seg("PublicData")

//定義全局?jǐn)?shù)據(jù)段

HHOOK hhook=NULL;

//鉤子句柄

HINSTANCE pInstance=NULL;

//鉤子模塊句柄

UINT MouseClick=0;

//記錄鼠標(biāo)單擊次數(shù)的變量

#pragma data_seg()

……

//省略部分機(jī)器生成代碼

extern "C" int APIENTRY

DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)

{

if (dwReason = = DLL_PROCESS_ATTACH)

{……

//省略部分機(jī)器生成代碼

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)

//鉤子處理函數(shù)

{

if (code 〈 0)

//若code〈0,則直接調(diào)用CallNextHookEx返回

return CallNextHookEx(hhook, code, wParam, lParam);

if(wParam= =WM_LBUTTONDOWN)

{MouseClick++;

//記錄鼠標(biāo)單擊次數(shù)

}

return CallNextHookEx(hhook, code, wParam,lParam);

}

extern "C" BOOL WINAPI StartHook()

//啟動(dòng)鉤子函數(shù)

{

hhook=SetWindowsHookEx(WH_MOUSE,MouseProc,pInstance,0);

//掛上鉤子

if(hhook!=NULL)

return TRUE;

else return FALSE;

}

extern "C" BOOL WINAPI StopHook()

//撤銷鉤子函數(shù)

{

return UnhookWindowsHookEx(hhook);

//撤銷鉤子

}

extern "C" int WINAPI GetResult()

//返回鼠標(biāo)單擊次數(shù)

{

return MouseClick;

}

(5)修改Spy.def程序代碼如下:

LIBRARY "SPY"

DESCRIPTION 'SPY Windows Dynamic Link Library'

EXPORTS

StartHookb @1

StopHook @2

GetResult @3

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

2.建立使用鉤子的應(yīng)用程序

(1) 生成一個(gè)單文檔的可執(zhí)行文件(EXE)的Project。

(2) 修改資源中的主選單,增加一個(gè)選單項(xiàng)“監(jiān)控”,下有三個(gè)子選單項(xiàng),分別為“啟動(dòng)”、“撤銷”和“取出”。

(3) 在Project中加入Spy.Lib文件和Hook.h文件。

(4) 分別修改“啟動(dòng)”、“撤銷”和“取出”選單項(xiàng)的Command響應(yīng)函數(shù)如下:

#include "hook.h"

……//省略部分機(jī)器生成代碼

void CMainFrame::OnStartSpy()

//“啟動(dòng)”選單項(xiàng)的響應(yīng)函數(shù)

{

StartHook();

}

void CMainFrame::OnReleaseSpy()

//“撤銷”選單項(xiàng)的響應(yīng)函數(shù)

{

StopHook();

}

void CMainFrame::OnGet()

//“取出”選單項(xiàng)的響應(yīng)函數(shù)

{

int Result=GetResult();

char buffer[40];

wsprintf(buffer,"在程序運(yùn)行期間,你共單擊鼠標(biāo)%d次",Result);

::MessageBox(this-〉m_hWnd,buffer,"Message",MB_OK);

}

編譯這個(gè)Project,并把Spy.dll放到生成的可執(zhí)行文件目錄下,便可運(yùn)行程序。

運(yùn)行時(shí),選擇“監(jiān)控”選單中的“啟動(dòng)”選單項(xiàng),鉤子便開(kāi)始工作,監(jiān)視鼠標(biāo)的活動(dòng)情況;選擇“撤銷”選單項(xiàng),系統(tǒng)便撤銷鉤子;選擇“取出”選單項(xiàng),程序便報(bào)告在監(jiān)控期間,用戶單擊鼠標(biāo)左鍵的次數(shù)。

以上程序在Windows 98,Visual C++ 4.0環(huán)境下成功運(yùn)行。


本文來(lái)自CSDN博客,轉(zhuǎn)載請(qǐng)標(biāo)明出處:http://blog.csdn.net/i_like_cpp/archive/2005/05/03/371297.aspx

Feedback

# re: 利用鉤子機(jī)制取得Windows的消息監(jiān)控權(quán)[未登錄](méi)  回復(fù)  更多評(píng)論   

2010-01-09 18:57 by C++
招聘:C++程序員

職位描述:

1、技術(shù)人員職位,在上級(jí)的領(lǐng)導(dǎo)和監(jiān)督下定期完成量化的工作要求;
2、參與公司軟件項(xiàng)目平臺(tái)程序的設(shè)計(jì)和開(kāi)發(fā)
3、根據(jù)開(kāi)發(fā)進(jìn)度和任務(wù)分配,完成平臺(tái)相應(yīng)模塊的設(shè)計(jì)、開(kāi)發(fā)、編程任務(wù);
4、進(jìn)行程序單元、功能的測(cè)試,查出軟件存在的缺陷并保證其質(zhì)量;

要求:

1、熟悉Windows C++/MFC編程;
2、熟悉一種大型關(guān)系型數(shù)據(jù)庫(kù)如Sql Server或Oracle的應(yīng)用。
3、掌握TCP/IP、多線程開(kāi)發(fā)等;
4、遵守職業(yè)道德,嚴(yán)守工作紀(jì)律,勤于鉆研,勇于進(jìn)取,具有良好的團(tuán)隊(duì)合作精神;
5、兩年以上軟件開(kāi)發(fā)經(jīng)驗(yàn);
熟悉休閑、棋牌類游戲開(kāi)發(fā)經(jīng)驗(yàn)者優(yōu)先。
6、注意:待遇是根據(jù)能力浮動(dòng)面議詳談。

應(yīng)屆畢業(yè)生或無(wú)相關(guān)經(jīng)驗(yàn)者,請(qǐng)勿擾,謝謝!

工作地點(diǎn):廣東湛江

備注:為了提高您的面試機(jī)會(huì),請(qǐng)不要直接在網(wǎng)上應(yīng)聘,請(qǐng)把簡(jiǎn)歷發(fā)送至linhang518@163.com,謝謝!#~
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美极品影院| 亚洲成在人线av| 激情五月综合色婷婷一区二区| 激情综合亚洲| 一区二区三区精品国产| 久久久福利视频| 亚洲精品久久久久久久久| 中文在线不卡| 噜噜噜躁狠狠躁狠狠精品视频| 欧美体内she精视频| 红桃视频成人| 亚洲综合第一页| 欧美成人性生活| 亚洲一区二区精品视频| 蜜桃av一区二区| 国产欧美日韩亚洲精品| 日韩视频专区| 乱码第一页成人| 在线中文字幕不卡| 欧美成人午夜影院| 国产丝袜一区二区| 亚洲午夜免费视频| 欧美激情一区二区三区| 小黄鸭精品aⅴ导航网站入口| 欧美日本二区| 在线免费日韩片| 久久国产精品免费一区| 99精品欧美一区二区三区| 久久免费视频观看| 国产欧美一区二区色老头| 在线视频精品一| 欧美成人一品| 久久精品亚洲精品| 国产精品亚洲视频| 在线性视频日韩欧美| 欧美黄色一区| 久久久久99| 国产伪娘ts一区| 亚洲一区国产| 亚洲精品日韩在线| 欧美v亚洲v综合ⅴ国产v| 国内精品久久久久影院优| 亚洲欧美激情诱惑| 99xxxx成人网| 欧美日韩不卡视频| 亚洲人成绝费网站色www| 久久一区亚洲| 久久狠狠久久综合桃花| 国产日韩欧美黄色| 性做久久久久久久免费看| av成人老司机| 欧美日韩裸体免费视频| 亚洲美女av网站| 亚洲国产欧美一区| 牛牛影视久久网| 亚洲黄色性网站| 欧美激情二区三区| 久久亚洲不卡| 亚洲国产精品一区| 欧美国产日韩免费| 免费毛片一区二区三区久久久| 在线观看欧美| 欧美成人日本| 免费一区视频| 亚洲日本中文字幕| 亚洲国产美国国产综合一区二区| 男男成人高潮片免费网站| 亚洲人成高清| 亚洲精品久久久久久下一站 | 国产精品一区二区三区免费观看 | 亚洲一级黄色| 国产精品午夜av在线| 欧美夜福利tv在线| 午夜精品一区二区三区在线视| 国产日韩专区在线| 久久综合色综合88| 美女91精品| 99re6这里只有精品| 日韩一本二本av| 国产精品国产三级国产专区53| 新67194成人永久网站| 性xx色xx综合久久久xx| 国模精品一区二区三区色天香| 麻豆久久久9性大片| 免费成人黄色av| 99精品视频免费| 亚洲一区二区免费看| 国产一区二区三区久久 | 久久中文字幕一区| 巨胸喷奶水www久久久免费动漫| 亚洲国内自拍| 亚洲最新在线| 国产伪娘ts一区| 欧美福利网址| 欧美日韩国产美女| 欧美一区观看| 久久综合电影| 亚洲小视频在线| 午夜精品久久久久久久99水蜜桃| 一区一区视频| 99亚洲一区二区| 国产欧美一区二区三区久久| 免费高清在线视频一区·| 欧美精品在线一区| 欧美一级理论片| 美日韩在线观看| 亚洲欧美国产制服动漫| 久久久91精品| 亚洲午夜电影网| 久久高清一区| 在线综合亚洲| 久久av一区二区三区漫画| 亚洲精品欧洲| 欧美一区二区三区另类 | 99热在线精品观看| 国产一区二区成人| 亚洲精品视频一区| 国产一区二区三区电影在线观看| 亚洲电影免费观看高清完整版| 国产精品成人一区二区三区吃奶 | 欧美肥婆bbw| 国产精品视频一区二区高潮| 欧美国产在线电影| 国产精品一区久久久| 亚洲国产精品久久久久婷婷老年| 国产精品嫩草99a| 欧美国产亚洲另类动漫| 国产精品亚洲成人| 亚洲欧洲在线观看| 国内精品一区二区三区| 一区二区免费在线播放| 亚洲电影在线| 亚洲欧美中文字幕| 一本色道久久88综合亚洲精品ⅰ| 欧美在线看片a免费观看| 亚洲视频久久| 蜜桃久久av一区| 久久久久久电影| 国产精品看片你懂得| 亚洲国产精品精华液2区45 | 久久一区国产| 欧美一区日本一区韩国一区| 欧美高清不卡在线| 裸体歌舞表演一区二区 | 免费不卡视频| 国产精品视频yy9099| 亚洲精品美女免费| 亚洲狠狠婷婷| 久久香蕉国产线看观看av| 欧美一区激情| 国产精品久久二区| 亚洲九九爱视频| 亚洲精品乱码久久久久久蜜桃91 | 亚洲日本成人在线观看| 久久久999| 久久精品国亚洲| 国产精品一区一区三区| 亚洲美女毛片| 亚洲免费高清| 欧美成人三级在线| 欧美国产日产韩国视频| 一区二区三区在线观看国产| 性色av一区二区三区在线观看| 亚洲免费视频成人| 欧美日韩在线直播| 亚洲免费电影在线| 一本色道久久综合狠狠躁的推荐| 欧美a级片网| 欧美激情乱人伦| 亚洲激情在线| 欧美激情精品久久久久久黑人| 欧美激情五月| 亚洲欧洲一区二区在线播放| 美女亚洲精品| 亚洲国产91精品在线观看| 亚洲激情视频网站| 免费亚洲一区| 91久久久亚洲精品| 亚洲最新在线| 欧美午夜精品久久久久久人妖 | 国产精品视频网站| 亚洲一区日韩在线| 久久狠狠婷婷| 国产综合久久久久久| 久久精品视频va| 欧美成人午夜视频| 亚洲精品国产欧美| 欧美日韩一二三区| 亚洲图片欧美日产| 欧美在线视频日韩| 国产主播精品在线| 久久免费高清视频| 亚洲电影欧美电影有声小说| 亚洲伦理一区| 欧美午夜一区| 香蕉尹人综合在线观看| 久久一日本道色综合久久| 亚洲电影免费观看高清完整版| 欧美成人官网二区| 99re国产精品|