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

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

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

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

04.02.2011, 14:14. Просмотров 4986. Ответов 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).
Но мне надо, чтобы реагировало только тогда, когда обе клавиши
нажаты.

Как сделать, чтобы реагировало только на одновременное нажатие
двух клавиш???
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
man_of_ring
4 / 4 / 0
Регистрация: 09.12.2010
Сообщений: 278
04.02.2011, 18:54     Как отследить нажатия клавиш? #2
гы-гы
как в билдере все просто ))
OnKeyDown и оляляя все готово

гы-гы

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

))
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. если хочешь заколебаться вести работу над крупным проектом, веди его на билдере.
MaD1
Сообщений: n/a
05.02.2011, 09:53     Как отследить нажатия клавиш? #4
я же сказал, что на чистом WinAPI!!!!
Окон в программе нет. Нужно глобально отслеживать нажатие Ctrl+V

КАК?
MaD1
Сообщений: n/a
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 байта
......

ЗЫ. слушай ты не знаешь кто это заслал мне трояна на мыло ?
))
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 байта
......

ЗЫ. слушай ты не знаешь кто это заслал мне трояна на мыло ?
))
MaD1
Сообщений: n/a
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 из этого то каба.

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

а это не ты ((

эхххх, а жаль.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.02.2011, 12:28     Как отследить нажатия клавиш?
Еще ссылки по теме:

Как создать сообщение нажатия клавиш клавиатуры? C++
Как лучше отлавливать нажатия клавиш на клавиатуре при активном окне C++
C++ Отлов нажатия клавиш
Имитация нажатия клавиш C++
C++ Обработка нажатия клавиш

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

Или воспользуйтесь поиском по форуму:
MaD1
Сообщений: n/a
07.02.2011, 12:28     Как отследить нажатия клавиш? #10
Нихуя я не обиделся )) ты че?

А почему-то если поменять местами и сделать так:
if( GetAsyncKeyState('V') && GetAsyncKeyState(VK_CONTROL) )
все работает без сбоев!!!!! почему?
Yandex
Объявления
07.02.2011, 12:28     Как отследить нажатия клавиш?
Ответ Создать тему
Опции темы

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