Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562

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

13.06.2012, 10:04. Показов 2621. Ответов 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. Как это сделать? И где брать коды клавиш? В тех, что есть я не нашёл даже кнопку с точкой и знаком > (на которой русская "Ю").
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.06.2012, 10:04
Ответы с готовыми решениями:

Графы: найти все состояния, которые являются достижимыми из заданного состояния
Помогите написать программу: Модель работы некоторой системы представлена ориентированным графом, где вершины – это состояния системы,...

Работа с клавиатурой, сочетания клавиш, блокировка клавиш
Здравствуйте! Есть такая вот задачка: Разработать программу обработки прерывания от клавиатуры, которая должна: распознавать...

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

5
 Аватар для kazak
3601 / 2742 / 355
Регистрация: 11.03.2009
Сообщений: 6,300
13.06.2012, 12:38
Цитата Сообщение от 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, и включение его обратно программно.
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
13.06.2012, 13:18  [ТС]
Цитата Сообщение от kazak Посмотреть сообщение
Так в общем задумано.
при наборе. Но в игре мне бы не зотелось зависеть от намлока. Или это не возможно?

Добавлено через 55 секунд
Цитата Сообщение от kazak Посмотреть сообщение
На ум приходит только отслеживание нажатия NumLock, и включение его обратно программно.
Отследить не проблема. 0x90. А Как включить?
0
 Аватар для kazak
3601 / 2742 / 355
Регистрация: 11.03.2009
Сообщений: 6,300
13.06.2012, 13:52
Цитата Сообщение от taras atavin Посмотреть сообщение
А Как включить?
http://msdn.microsoft.com/en-u... s.85).aspx
как раз с нужным примером.
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
13.06.2012, 16:52  [ТС]
Синтезирует нажатия клавиши. Система может использовать такие синтезированные клавиши для создания WM_KEYUP или WM_KEYDOWN сообщения. Обработчик прерываний клавиатуры водителя называет keybd_event функции.
И что? А как реально включить NumLock?
0
 Аватар для kazak
3601 / 2742 / 355
Регистрация: 11.03.2009
Сообщений: 6,300
15.06.2012, 18:40
Пример смотрел на той странице?
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 );
   }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.06.2012, 18:40
Помогаю со студенческими работами здесь

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

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

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

Программа мониторинга состояния охранных датчиков
“Разработка программного комплекса для мониторинга энергосистемы компании”. 1. Исходные данные Охранные датчики(на движение, открытие,...

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


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Ниже машинный перевод статьи The Thinkpad X220 Tablet is the best budget school laptop period . Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы,. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru