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;

    }

  • 相关阅读:
    Vue + better-scroll 入门教程
    Vue + Vant 实现顶部关键字搜索栏
    JS实现函数节流方法
    AngularJS服务及注入--Provider
    入门Webpack,看这篇就够了
    Vue.js中ref ($refs)用法举例总结
    从0开始做一个的Vue图片/ 文件选择(上传)组件[基础向]
    gulp自动化部署:gulp发布express项目(二)
    webstorm添加调试nodejs
    web window pixel等笔记
  • 原文地址:https://www.cnblogs.com/duyy/p/3701067.html
Copyright © 2011-2022 走看看