键盘钩子实现

该程序先通过nhook生成dll与lib文件后,使用Hacker.cpp来安装并使用钩子。

nhook.h

#include<Windows.h>

HHOOK g_hook;
//安装钩子

extern "C" __declspec(dllexport) BOOL InstallHook();
//卸载钩子

extern "C" __declspec(dllexport) BOOL UninstallHook();
LRESULT CALLBACK KeyboardProc(int nCode,WPARAM wParam, LPARAM lParam);

nhook.cpp

#include"nhook.h"

//安装钩子
BOOL InstallHook()
{

    g_hook = SetWindowsHookEx(WH_KEYBOARD, KeyboardProc, GetModuleHandle(L"nhook"), 0);
    if (g_hook == NULL)
        return FALSE;
    return TRUE;

}

//卸载钩子
BOOL UninstallHook()
{

    return UnhookWindowsHookEx(g_hook);

}

//钩子处理函数
LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{

    MessageBox(NULL, L"弹框",L"提示",MB_OK);
    return CallNextHookEx(g_hook,nCode,wParam,lParam);

}

Hacker.cpp

#include<stdio.h>
#include<Windows.h>
#pragma comment(lib,"nhook.lib")

//窗口处理函数
LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);

//安装钩子
extern "C" __declspec(dllimport) BOOL InstallHook();

//卸载钩子
extern "C" __declspec(dllimport) BOOL UninstallHook();

int WinMain(HINSTANCE hInstance, HINSTANCE hPreInstance, LPSTR lpCmdLine, int nCmdShow)
{

    //弹出一个消息提示框
    //MessageBox(NULL, L"键盘记录器",L"提示", MB_OK);
    //做一个窗口
    //1.设计窗口类

    TCHAR szAppClassName[] = TEXT("HookClass");
    WNDCLASS wndClass;
    wndClass.cbClsExtra = 0;
    wndClass.cbWndExtra = 0;
    wndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
    wndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
    wndClass.hIcon = NULL;
    wndClass.hInstance = hInstance;
    wndClass.lpfnWndProc = WindowProc;
    wndClass.lpszClassName = szAppClassName;
    wndClass.lpszMenuName = NULL;
    wndClass.style = CS_HREDRAW | CS_VREDRAW;

    //2.注册窗口
    RegisterClass(&wndClass);

    //3.创建窗口
    HWND hWnd = CreateWindow(szAppClassName, TEXT("Hook编程"), WS_OVERLAPPEDWINDOW, 200, 100, 800, 600, NULL, NULL, hInstance, NULL);
    ShowWindow(hWnd,SW_SHOW);
    UpdateWindow(hWnd);

    //4.消息循环
    MSG msg;
    while (GetMessage(&msg,NULL,0,0))
    {

        //将虚拟键消息转化为字符消息
        TranslateMessage(&msg);

        //将消息分发给窗口处理函数
        DispatchMessage(&msg);

    }
    return 0;//退出

}

//窗口处理函数
LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{

    switch (uMsg)
    {
        case WM_CLOSE:
            DestroyWindow(hWnd);   //销毁界面
            break;

        case WM_DESTROY:           //销毁消息
            PostQuitMessage(0);    //退出
            break;

        case WM_CREATE:            //窗口创建消息
            InstallHook();        
            break;

    }
    return DefWindowProc(hWnd, uMsg, wParam, lParam);

}

结果:

没按键盘前:

 按了键盘后:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值