С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 39, средняя оценка - 4.87
MaD1
#1

Как отследить нажатия клавиш? - C++

04.02.2011, 14:14. Просмотров 5576. Ответов 9
Метки нет (Все метки)

Здорово перцы!

Все действие происходит на WinAPI в VC6.
У меня такая проблема:
Я создаю таймер и отслеживаю нажатия клавиш Ctrl+V:
C++
1
2
3
4
if(GetAsyncKeyState(VK_CONTROL) && GetAsyncKeyState('V'))
{
    MessageBox(0,'Нажато Ctrl+V!','',0);
}
Да, работает. Но! MessageBox показывается и тогда, когда я
нажмму Ctrl, отпущу Ctrl, потом нажму V, отпущу V. А иногда
и просто когда нажму Ctrl, выводится мессага (по-видимому раньше
Ctrl был нажатa V).
Но мне надо, чтобы реагировало только тогда, когда обе клавиши
нажаты.

Как сделать, чтобы реагировало только на одновременное нажатие
двух клавиш???
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.02.2011, 14:14
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как отследить нажатия клавиш? (C++):

Как создать сообщение нажатия клавиш клавиатуры? - C++
Мне надо что бы при каждом нажатии на клавишу клавиатуры у меня выполнялись определенные действия... Я думаю что надо сделать примерно...

Как лучше отлавливать нажатия клавиш на клавиатуре при активном окне - C++
Здравствуйте.Делается проект Win32 на C++ с WinAPI.Подскажите пожалуйста (желательно с примерами) как лучше отлавливать нажатия на...

Отследить нажатие определенных клавиш - C++
Доброй ночи Не получается решить такую проблему Через getch() получаю код клавиши и рядом вывожу соответствующий символ Но по заданию...

Нажатия клавиш - C++
В mfc нужно чтобы при нажатии клавиш, происходило действие. С помощью WM_KEYDOWN, пытался сделать, чтобы при нажатии клавиш программа...

Имитация нажатия клавиш - C++
как только и не пытался всё выводит одну и туже ошибку, помогите начинающему c++ юзеру #include <iostream> #include <Windows.h> ...

Отслеживание нажатия клавиш. - C++
#include <iostream> #include <string> #define FOR(i,a,b) for (int i(a), _n(b); i < _n; ++i) using namespace std; int...

9
man_of_ring
4 / 4 / 0
Регистрация: 09.12.2010
Сообщений: 278
04.02.2011, 18:54 #2
гы-гы
как в билдере все просто ))
OnKeyDown и оляляя все готово

гы-гы

ЗЫ.
1. если хочешь заколебаться в программировании програмируй на VC MS C++
2. если хочешь заколебаться с сотовым купи Моторолу

))
0
boombastik
7 / 7 / 0
Регистрация: 13.02.2007
Сообщений: 1,255
05.02.2011, 00:10 #3
гы-гы-гы, в VS тоже нет проблем!

человек же сказал ему нужно с WinAPI, а в этом случае нужно отслеживать события в процедуре обработчика окна и делать все ручками. Но помоему MaD1 что-то мудрит, там вроде как проще было, смотришь когда нажата клавиша V, реагировать на WM_KEYDOWN, клавиша V, и если это произошло, то проверить состояние клавиши Ctrl, если нажато, то выбрасываешь MessageBox.

А использование GetAsyncKeyState что-то мне вообще не нравится в этом примере.


P.S.

3. если хочешь заколебаться вести работу над крупным проектом, веди его на билдере.
0
MaD1
05.02.2011, 09:53 #4
я же сказал, что на чистом WinAPI!!!!
Окон в программе нет. Нужно глобально отслеживать нажатие Ctrl+V

КАК?
MaD1
05.02.2011, 20:23 #5
в MSDN написано:

SHORT GetAsyncKeyState(
int vKey // virtual-key code
);
Return Values
If the most significant bit is set, the key is down, and if the
least significant bit is set, the key was pressed after the
previous call to GetAsyncKeyState.

Т.е. за то, нажата кнопка или отпущена отвечают 'most significant'
и 'least significant' биты. Так как определить, что, например, установлен
'most significant' бит?

Теперь вроде я понял: чтобы были нажаты Ctrl и V нужно определить,
установлен ли 'most significant' бит. Как это сделать?
Вроде HIWORD() или LOWORD()? Или как-то с >> или <<.
Объясните пожалуста!
man_of_ring
4 / 4 / 0
Регистрация: 09.12.2010
Сообщений: 278
05.02.2011, 23:27 #6
Такой умный малчик а английский не знает !

Return Values
If the most significant bit is set, the key is down, and if the
least significant bit is set, the key was pressed after the
previous call to GetAsyncKeyState.

Вовзращаеммые значения

Если most significant бит установлен то была нажата клавиша, а если least significant бит устанвлен то это значит клавиша была 'нажата' (он ж не нажималась... а виртуално типа) так вот она была нажата предыдушим вызовом функции GetAsyncKeyState.

прим. переводчика
most significant - более значимый, приоритетный и тд
least significant - менее значимый, менее приоритетный.

нус про битовые опреации ... вопрос )
гы-гы
ну скажем операции побитового сдвига зачем....
типичное решение....
операции AND
скажем примерчики такие
1.)
int i=1; // 0001 - это в 2-ой системе счисления
int x=2; // 0010
int z=i&x; // i AND x = 0
почему так как 1*0=0
2.)
int i=1; // 0010 - это в 2-ой системе счисления
int x=2; // 0010
int z=i&x; // i AND x = 1
1*1=1

понял ?
узнай что за позиции у тебя занимают эти биты в байте и создай битовую маску.
но запомни !!! (пауза господа ))
биты считаються наоборот тоесть начало начинаеться с права
погляди на таблицу и поймешь
0000 - 0
0001 - 1
0010 - 2
0011 - 3
....
1111 - 16 (2 в 4 степени = 16)
да следует учесть сколько на число целое резервируеться байт,
вообщем это зависит от компилятора и платформы.
я думаю unsigned short int занимает 2 байта
......

ЗЫ. слушай ты не знаешь кто это заслал мне трояна на мыло ?
))
1
man_of_ring
4 / 4 / 0
Регистрация: 09.12.2010
Сообщений: 278
05.02.2011, 23:28 #7
Такой умный малчик а английский не знает !

Return Values
If the most significant bit is set, the key is down, and if the
least significant bit is set, the key was pressed after the
previous call to GetAsyncKeyState.

Вовзращаеммые значения

Если most significant бит установлен то была нажата клавиша, а если least significant бит устанвлен то это значит клавиша была 'нажата' (он ж не нажималась... а виртуално типа) так вот она была нажата предыдушим вызовом функции GetAsyncKeyState.

прим. переводчика
most significant - более значимый, приоритетный и тд
least significant - менее значимый, менее приоритетный.

нус про битовые опреации ... вопрос )
гы-гы
ну скажем операции побитового сдвига зачем....
типичное решение....
операции AND
скажем примерчики такие
1.)
int i=1; // 0001 - это в 2-ой системе счисления
int x=2; // 0010
int z=i&x; // i AND x = 0
почему так как 1*0=0
2.)
int i=1; // 0010 - это в 2-ой системе счисления
int x=2; // 0010
int z=i&x; // i AND x = 1
1*1=1

понял ?
узнай что за позиции у тебя занимают эти биты в байте и создай битовую маску.
но запомни !!! (пауза господа ))
биты считаються наоборот тоесть начало начинаеться с права
погляди на таблицу и поймешь
0000 - 0
0001 - 1
0010 - 2
0011 - 3
....
1111 - 16 (2 в 4 степени = 16)
да следует учесть сколько на число целое резервируеться байт,
вообщем это зависит от компилятора и платформы.
я думаю unsigned short int занимает 2 байта
......

ЗЫ. слушай ты не знаешь кто это заслал мне трояна на мыло ?
))
1
MaD1
06.02.2011, 15:36 #8
Нифига, не лыбься это нея!
man_of_ring
4 / 4 / 0
Регистрация: 09.12.2010
Сообщений: 278
06.02.2011, 20:17 #9
ты че обиделся перец ?
((

ЗЫ. какая то б...дь заслала троян, GSM locator какой то,
прошмыгнул сволочь через Norton AV
но NAV его ловил когда винда делала стартап. Просканировал, засел в какой то каб, и каждый раз выдавал себя в систем32 из этого то каба.

я уж хотел порадоваться 'дружеской' поссылке, ну вот дкмаю бета-тестером сделали ))

а это не ты ((

эхххх, а жаль.
1
MaD1
07.02.2011, 12:28 #10
Нихуя я не обиделся )) ты че?

А почему-то если поменять местами и сделать так:
if( GetAsyncKeyState('V') && GetAsyncKeyState(VK_CONTROL) )
все работает без сбоев!!!!! почему?
07.02.2011, 12:28
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.02.2011, 12:28
Привет! Вот еще темы с ответами:

Обработчик нажатия клавиш - C++
Хочу написать обработчик нажатия клавиш. А именно чтобы после запуска приложения консольное окно сворачивалось и программа считывала все...

Нереагирование на нажатия клавиш - C++
Как можно сделать чтобы после запуска файла, нельзя было ничего нажимать на клавиатуре, двигать мышкой.

Распознавание нажатия клавиш - C++
Народ всем привет... Как осуществить на с++ такую вот прикалюху: при нажатии клавиши, например стрелочки в строковую переменную...

Обработка нажатия клавиш - C++
Здравствуйте! Необходимо решить следующую задачу: Есть консольное приложение, которое разрабатывается с использованием C++, с...


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

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

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