码迷,mamicode.com
首页 > 其他好文 > 详细

HOOK技术演示

时间:2014-05-01 01:00:28      阅读:364      评论:0      收藏:0      [点我收藏+]

标签:com   style   code   c   t   sp   ext   strong   get   color   int   

一、首先创建一个dll工程,取名为KeyboardHookDll,代码如下:

// KeyboardHookDll.cpp : 定义 DLL 应用程序的导出函数。
//

#include "stdafx.h"
#include <iostream>
using namespace std;

#define MYAPI extern "C" _declspec(dllexport)  //导出函数声明

HHOOK hHook = NULL;

LRESULT CALLBACK KeyboardProc(int code, WPARAM wParam, LPARAM lParam)

{

if (code >= 0)

return 1;                              //消息不再传递个下一个HOOK子程,也不会再发送给目的窗口

else

return CallNextHookEx(hHook, HC_ACTION, wParam, lParam);

}

MYAPI int SetHook()

{

hHook = SetWindowsHookEx(WH_KEYBOARD, KeyboardProc, GetModuleHandleA("KeyboardHookDll.dll"), 0);

if (hHook == NULL)

{

printf("SetWindowsHookEx() error :%d\n", GetLastError());

return -1;

}

return 0;

}

MYAPI int StopHook()

{

if (UnhookWindowsHookEx(hHook) == FALSE)

{

printf("UnhookWindowsHookEx() error :%d\n");

return -1;

}

return 0;

}
二、新建一个控制台程序,用来启用HOOK,代码如下:


#include "stdafx.h"
#include "windows.h"
#include <iostream>

#pragma comment(lib,"KeyboardHookDll.lib")

using namespace std;



extern "C" _declspec(dllimport) void SetHook();
extern "C" _declspec(dllimport) void StopHook();

int _tmain(int argc, _TCHAR* argv[])

{

    char YesNo;

printf("这是一个关于全局键盘钩子的测试...\n");

printf("安装全局键盘钩子...\n");

SetHook();

printf("是否卸载键盘钩子: (Y or N)\n"); //当然了,下面的语句根本无法执行

YesNo = getchar();

if (YesNo == ‘Y‘ || YesNo == ‘y‘)

{

printf("开始卸载钩子...\n\n");

StopHook();

printf("钩子已经卸载...\n");

}
    

    system("pause");

    return 0;

}

HOOK技术演示,码迷,mamicode.com

HOOK技术演示

标签:com   style   code   c   t   sp   ext   strong   get   color   int   

原文地址:http://www.cnblogs.com/duyy/p/3701067.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!