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

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

Войти
Регистрация
Восстановить пароль
 
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
#1

Состояния клавиш - C++

13.06.2012, 10:04. Просмотров 683. Ответов 5
Метки нет (Все метки)

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
 Statuses.Forward  =((GetAsyncKeyState(Keys.Forward  )&0x8000)==0x8000);
 Statuses.Back     =((GetAsyncKeyState(Keys.Back     )&0x8000)==0x8000);
 Statuses.RightTurn=((GetAsyncKeyState(Keys.RightTurn)&0x8000)==0x8000);
 Statuses.LeftTurn =((GetAsyncKeyState(Keys.LeftTurn )&0x8000)==0x8000);
 Statuses.RightStep=((GetAsyncKeyState(Keys.RightStep)&0x8000)==0x8000);
 Statuses.LeftStep =((GetAsyncKeyState(Keys.LeftStep )&0x8000)==0x8000);
 Statuses.Quick    =((GetAsyncKeyState(Keys.Quick    )&0x8000)==0x8000);
 Statuses.Slow     =((GetAsyncKeyState(Keys.Slow     )&0x8000)==0x8000);
 if ((!Statuses.Quick)&&(!Statuses.Slow))
 {
  Speed=1.0;
 }
 if ((Statuses.Quick)&&(!Statuses.Slow))
 {
  Speed=2.0;
 }
 if ((!Statuses.Quick)&&(Statuses.Slow))
 {
  Speed=0.5;
 }
 if ((Statuses.Quick)&&(Statuses.Slow))
 {
  Speed=1.5;
 }
 if ((GetAsyncKeyState(Keys.Exit)&0x8000)==0x8000)
 {
  Statuses.ExitQuery=true;
 }
 if (Statuses.ExitQuery)
 {
  if ((GetAsyncKeyState(Keys.Yes)&0x8000)==0x8000)
  {
   Statuses.Exit=true;
  }
  if ((GetAsyncKeyState(Keys.No)&0x8000)==0x8000)
  {
   Statuses.ExitQuery=false;
  }
 }
В принципе, работает, отличает левый shift от правого, но при выключенном NumLock принимает цифры цифрового блока за кнопки управления кареткой. А мне надо во-первых различать при любом состоянии NumLock, а во-вторых цифры должны распознаваться одинаково не зависимо от состояния NumLock. Как это исправить? Левые shift, ctrl и alt надо отличать от правых. Цифры и точка в цифровом блоке должны опознаваться как таковые, не зависимо от состояния NumLock и ни когда не приниматься за кнопки управления кареткой и inset, home, page up, delete, end, page down. Как это сделать? И где брать коды клавиш? В тех, что есть я не нашёл даже кнопку с точкой и знаком > (на которой русская "Ю").
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.06.2012, 10:04     Состояния клавиш
Посмотрите здесь:

Отлов состояния радиокнопки - C++
Нагуглил такое: isDown isChecked С 1 вообще не понял ничего, 2 сделал, но не работает. Глобальный массив: HWND hButChec; ...

Восстановления состояния программы - C++
Добрый вечер, есть реальные рабочие примеры восстановления программы до состояния перед багом/крашем ? Стоит ли вообще таким...

Как создавать панель состояния? - C++
Пытаюсь вспомнить С++ начал по шагам с этого сайта http://www.firststeps.ru/ застопорился на 5 шаге...

Востановление состояния программы после завершения - C++
Здорова господа!!! Пишу прогу которая работает можно сказать в фоновом режиме (непрерывно) и от нужно например при непредвиденных...

Функция отслеживающая изменение состояния переменной - C++
Ребята, помогите пожалуйста написать в теме указанную функцию. Поясню. Есть неподвластная мне переменная из приложения к которой я пишу...

Сброс состояния буфера cin.clear - C++
Всем привет. Пытаюсь контролировать ввод пользователя. Вопрос в следующем: почему очерёдность операций принципиальна : #include...

Как сделать ровный вывод состояния регистров - C++
Всем исключительно доброго времени дня или ночи. Я начинающий, так что прошу сильно меня не пинать. В общем, вот в чём дело: По...

Разработать битовое поле, описывающее состояния элементов прибора - C++
Задание: Разработать битовое поле, описывающее состояния элементов прибора. Ввести с консоли число в 16-ричной системе счисления,...

Функция проверки состояния в классе, класс автомобилей, избежать ДТП - C++
Здравствуйте, хочу вас всех поздравить с Новым Годом) А теперь по теме: У меня есть класс "автомобиль" который имеет: координаты...

Возникло переполнение буфера, что привело к повреждению внутреннего состояния программы - C++
Возникло переполнение буфера, помогите найти ошибку и, по возможности, исправить #include "stdafx.h" #include "stdafx.h" #include...

Windows-приложение для мониторинга состояния SMART регистров жесткого диска - C++
Доброго времени суток дорогие ребята! Возможно кто-то уже сталкивался с такой задачей.Не составить ли вам труда помочь студенту. Буду...

Как создать класс для запуска процесса и отслеживания его дальнейшего состояния - C++
Есть задание: Create class to launch and monitor win32 process. Class constructor accepts command line path and arguments. Class instance...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kazak
3034 / 2355 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
13.06.2012, 12:38     Состояния клавиш #2
Цитата Сообщение от taras atavin Посмотреть сообщение
Левые shift, ctrl и alt надо отличать от правых.
Можно различать по виртуальным кодам
VK_RSHIFT/VK_LSHIFT, VK_RCONTROL/VK_LCONTROL, VK_RMENU/VK_LMENU

Цитата Сообщение от taras atavin Посмотреть сообщение
но при выключенном NumLock принимает цифры цифрового блока за кнопки управления кареткой.
Так в общем задумано.


Цитата Сообщение от taras atavin Посмотреть сообщение
мне надо во-первых различать при любом состоянии NumLock, а во-вторых цифры должны распознаваться одинаково не зависимо от состояния NumLock.
На ум приходит только отслеживание нажатия NumLock, и включение его обратно программно.
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
13.06.2012, 13:18  [ТС]     Состояния клавиш #3
Цитата Сообщение от kazak Посмотреть сообщение
Так в общем задумано.
при наборе. Но в игре мне бы не зотелось зависеть от намлока. Или это не возможно?

Добавлено через 55 секунд
Цитата Сообщение от kazak Посмотреть сообщение
На ум приходит только отслеживание нажатия NumLock, и включение его обратно программно.
Отследить не проблема. 0x90. А Как включить?
kazak
3034 / 2355 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
13.06.2012, 13:52     Состояния клавиш #4
Цитата Сообщение от taras atavin Посмотреть сообщение
А Как включить?
http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
как раз с нужным примером.
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
13.06.2012, 16:52  [ТС]     Состояния клавиш #5
Синтезирует нажатия клавиши. Система может использовать такие синтезированные клавиши для создания WM_KEYUP или WM_KEYDOWN сообщения. Обработчик прерываний клавиатуры водителя называет keybd_event функции.
И что? А как реально включить NumLock?
kazak
3034 / 2355 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
15.06.2012, 18:40     Состояния клавиш #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
#include <windows.h>
 
   void SetNumLock( BOOL bState )
   {
      BYTE keyState[256];
 
      GetKeyboardState((LPBYTE)&keyState);
      if( (bState && !(keyState[VK_NUMLOCK] & 1)) ||
          (!bState && (keyState[VK_NUMLOCK] & 1)) )
      {
      // Simulate a key press
         keybd_event( VK_NUMLOCK,
                      0x45,
                      KEYEVENTF_EXTENDEDKEY | 0,
                      0 );
 
      // Simulate a key release
         keybd_event( VK_NUMLOCK,
                      0x45,
                      KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,
                      0);
      }
   }
 
   void main()
   {
      SetNumLock( TRUE );
   }
Yandex
Объявления
15.06.2012, 18:40     Состояния клавиш
Ответ Создать тему
Опции темы

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