zoukankan      html  css  js  c++  java
  • 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;

    }

  • 相关阅读:
    Visual Studio 2010 Preview (cont.)
    Office VBA 进阶(开篇)
    Two cool debugger tips that I learnt today
    Send GMail
    Google Email Uploader
    看看.NET 4.0 都有些什么?
    XML Serializer in .NET
    Timeloc: 一个Adobe AIR程序
    SDC task library 一个MSBuild Task的有益补充。
    不考虑促销活动的百货业态供应商结算设计
  • 原文地址:https://www.cnblogs.com/duyy/p/3701067.html
Copyright © 2011-2022 走看看