• HOOK技术演示


    前提:64位系统需要用64位编译dll

    一、首先创建一个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)

    {

      LRESULT lResult;

         //(lParam & 0x80000000)为0时表示按下,为1时表示抬起,PS:如果修改为“抬起”则在控制台不输出字母a
      if(wParam == 'A' && !(lParam & 0x80000000)) { //这里的字母必须是大写的A
      lResult=CallNextHookEx(hHook, nCode, wParam, lParam);
      MessageBox(hwnd, L"你按下了A", L"A", MB_OK);
      return lResult;
    }

    return 1;

    }

    MYAPI int SetHook()

    {

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

    if (hHook == NULL)

    {

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

    return -1;

    }

    return 0;

    }

    MYAPI int StopHook()

    {

    if (UnhookWindowsHookEx(hHook) == FALSE)

    {

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

    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("这是一个关于全局键盘钩子的测试... ");

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

    SetHook();

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

    YesNo = getchar();

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

    {

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

    StopHook();

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

    }
        

        system("pause");

        return 0;

    }

  • 相关阅读:
    A Bug's Life POJ 2492
    First Training
    洛谷----P1162 填涂颜色
    软考知识点梳理--软件测试
    软考知识点梳理--面向对象方法
    软考知识点梳理--国家信息化体系六要素
    软考知识点梳理--电子政务
    软考知识点梳理--激励理论
    软考知识点梳理--承建方项目论证
    软考知识点梳理--项目成本类型
  • 原文地址:https://www.cnblogs.com/duyy/p/3701067.html
Copyright © 2020-2023  润新知