Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
 Аватар для blbulyan
12 / 10 / 3
Регистрация: 31.10.2017
Сообщений: 126

У всех в HotKey Control печатается Num 8 вместо Up?

27.03.2020, 00:14. Показов 2547. Ответов 12

Студворк — интернет-сервис помощи студентам
Вот такая проблема, когда вводишь стрелку вверх в HotKey Control, то там пишется Up, а когда устанавливаешь горячую клавишу VK_UP(шлёшь сообщение HKM_SETHOTKEY), то пишется Num 8, не зависимо от того, включён ли Num Lock или выключен.
У меня Windows 10 19.09 и Visual Studio 2019
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.03.2020, 00:14
Ответы с готовыми решениями:

Почему в консоли печатается ? вместо символа валюты?
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using...

Postmessage: вместо одного символа печатается два
Здравствуйте. При создании программы на с# возникли две проблемы при использовании Postmessage: 1. Когда я посылаю код в программу, в...

Не могу вызвать hotkey для QTableView из-за аналогичных hotkey в QAction в меню
У меня есть наследник QMainWindow со своим меню. Меню имеет горячие клавиши. У MainWindow есть QDockWidget которые имеет CustomTableView....

12
 Аватар для Argus19
1433 / 450 / 78
Регистрация: 24.09.2017
Сообщений: 2,533
Записей в блоге: 23
27.03.2020, 05:46
Ух ты! Код наверно секретный!
0
 Аватар для blbulyan
12 / 10 / 3
Регистрация: 31.10.2017
Сообщений: 126
27.03.2020, 12:25  [ТС]
Ну я могу выложить весь архив с проектом.
Код-то вовсе не секретный.
Вот как раз тот файл
Это дело живёт в диалоговой процедуре (HotKeySettingsDlgProc).
Если ввести горячую клавишу в этот хоткей контрол(стрелка вверх), то сначала она отображается как Up, потом, после нажатия кнопки ОК и открытия диалогового окна настроек горячих клавиш заново, она уже отображается как Num 8, хотя код виртуальной клавиши явно соответствует VK_UP и назначена как раз будет (стрелка вверх), ну т.е. при включенном Num Lock Num 8 не будет срабатывать, а вот при выключенном, как раз тогда, когда Num 8 является стрелкой вверх - срабатывает. Код виртуальной клавиши проверял в отладчике, уже после применения изменений и закрытия этого диалогового окна
0
Заблокирован
27.03.2020, 14:49
blbulyan, разбираться в каком-то или пиарить скачивая - это для дуракоф.
Мы что на дуракоф похожи.
Здесь только 31337 ( на этом форуме ) - учти!
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
27.03.2020, 14:57
Цитата Сообщение от blbulyan Посмотреть сообщение
Вот такая проблема, когда вводишь стрелку вверх в HotKey Control, то там пишется Up, а когда устанавливаешь горячую клавишу VK_UP(шлёшь сообщение HKM_SETHOTKEY), то пишется Num 8, не зависимо от того, включён ли Num Lock или выключен.
C++
1
SendDlgItemMessageW(IDC_HOTKEY1, HKM_SETHOTKEY, MAKEWPARAM(VK_UP | (HOTKEYF_EXT << 8), 0));
0
 Аватар для blbulyan
12 / 10 / 3
Регистрация: 31.10.2017
Сообщений: 126
27.03.2020, 18:56  [ТС]
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
C++
1
SendDlgItemMessageW(IDC_HOTKEY1, HKM_SETHOTKEY, MAKEWPARAM(VK_UP | (HOTKEYF_EXT << 8), 0));
И так делать для установки любой горячей клавиши или это не универсальный код?
0
 Аватар для Alikberov
131 / 116 / 25
Регистрация: 03.05.2017
Сообщений: 337
Записей в блоге: 1
27.03.2020, 20:12
Здeсь всё уходит в глубину веков с бородатыми DOS, где клавиши управления курсором появились позднее, но для обратной совместимости и споддержки, в частности, игр, которые управлялись именно цифровыми клавишами со стрелками, новые клавиши не получили новых кодов.
Был введён специальный префикс: Старые игры не отличали управления цифрами или стрелками, игнорируя префикс и отлично работая. А новые программы уже могли отличать…

Потому, клавиатуру нужно изучать глубже, чтобы понять из-за чего всё это так и почему…
А дальше - и вопросы сами решатся…

P.S.: И Windows, и Linux - с душком UNIX, CP/M-80 и DOS в таких местах…
1
Заблокирован
27.03.2020, 20:14
Alikberov, да ну первый Кармагедон на Серой клавиатуре видео-магнитофон был.
И всё. Остальные игры не воспринимал если какие-то Квесты, стратегии для вас игра.
0
27.03.2020, 20:56

Не по теме:

Цитата Сообщение от Толион Посмотреть сообщение
да ну первый Кармагедон на Серой клавиатуре видео-магнитофон был.
Шутитe?
Я до сих пор играю в это! :p

0
 Аватар для blbulyan
12 / 10 / 3
Регистрация: 31.10.2017
Сообщений: 126
27.03.2020, 21:09  [ТС]
Цитата Сообщение от Alikberov Посмотреть сообщение
Здeсь всё уходит в глубину веков с бородатыми DOS, где клавиши управления курсором появились позднее, но для обратной совместимости и споддержки, в частности, игр, которые управлялись именно цифровыми клавишами со стрелками, новые клавиши не получили новых кодов.
Был введён специальный префикс: Старые игры не отличали управления цифрами или стрелками, игнорируя префикс и отлично работая. А новые программы уже могли отличать…

Потому, клавиатуру нужно изучать глубже, чтобы понять из-за чего всё это так и почему…
А дальше - и вопросы сами решатся…

P.S.: И Windows, и Linux - с душком UNIX, CP/M-80 и DOS в таких местах…
Этот префикс и есть HOTKEYF_EXT ?
0
 Аватар для Alikberov
131 / 116 / 25
Регистрация: 03.05.2017
Сообщений: 337
Записей в блоге: 1
27.03.2020, 22:18
Лучший ответ Сообщение было отмечено blbulyan как решение

Решение

Цитата Сообщение от blbulyan Посмотреть сообщение
Этот префикс и есть HOTKEYF_EXT ?
Страница 354
1
 Аватар для blbulyan
12 / 10 / 3
Регистрация: 31.10.2017
Сообщений: 126
28.03.2020, 11:44  [ТС]
Alikberov, А обычные стрелки, не на нумпаде являются клавишами перемещения курсора??? Т.е. обычные стрелки появились позже? Или всё таки клавиши со стрелками и цифрами появились позже? Я просто всегда считал что сам нумпад появился позднее, ну т.е. что обычные стрелки(без цифр) были раньше, возможно я ошибался.

Добавлено через 1 час 21 минуту
Итак, я провёл эксперимент. Выяснилось, что флаг HOTKEYF_EXT устанавливается как раз для стрелок БЕЗ ЦИФР. Если сначала выключить Num Lock, затем нажать на клавишу (Восемь/стрелка вверх) то нам придёт код 0x00000026, если же нажать на стрелку вверх, то получаемый код 0x00000826, что как раз и говорит о том, что флаг HOTKEYF_EXT был установлен.
полный код проверки:
C++
1
2
3
4
...
LRESULT EnteredHotKey = SendMessage(hEnterHotKey, HKM_GETHOTKEY, NULL, NULL);;
if ((HIBYTE(LOWORD(EnteredHotKey)) & HOTKEYF_EXT) == HOTKEYF_EXT)__debugbreak();
...
При нажатии стрелки вверх(не на нумпаде) срабатывает точка останова здесь, вызовом __debugbreak().
Что свидетельствует о том, что флаг HOTKEYF_EXT был установлен.
Если же нажать стрелку вверх на нумпаде то точка останова не срабатывает в данном месте.
Получается, помимо этого флага, мне нужно ещё проверять включен ли Num Lock, чтобы стрелки на Num Lock играли такую же роль в моей программе как и обычные стрелки, но это конечно если оно мне надо будет.
0
 Аватар для Alikberov
131 / 116 / 25
Регистрация: 03.05.2017
Сообщений: 337
Записей в блоге: 1
28.03.2020, 14:34
Лучший ответ Сообщение было отмечено blbulyan как решение

Решение

Цитата Сообщение от blbulyan Посмотреть сообщение
Т.е. обычные стрелки появились позже?
B точку!
У многих разных ЭВМ так было: Графика/мышка есть, курсорных клавиш - нет

P.S.: Даже поверхностные странствия по википедии с историей ПК снимают многие вопросы по устройству костылей современных систем…
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.03.2020, 14:34
Помогаю со студенческими работами здесь

Выполнение последовательности запросов вида ADD num, PRESENT num и COUNT (без параметра)
Напишите программу, которая будет выполнять последовательность запросов вида ADD num, PRESENT num и COUNT (без параметра). Программу...

Объясните что делает эта строка кода - num = (ushort) (num & 0xFFFE) ?
Вся программа: Using System; class MakeEven { static void Main() { ushort num; ushort i; for(i = 1; i &lt;= 10;...

Выполнение последовательности запросов вида ADD num, PRESENT num и COUNT (без параметра)
Напишите программу, которая будет выполнять последовательность запросов вида ADD num, PRESENT num и COUNT (без параметра). Программу...

Почему Для num = 999999999, num * 10 = 2147483647 ?
Кто-нибудь объясните , пожалуйста. Почему при VAR num: integer; Для num = 999999999; num * 10 = 1410065398 ?


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru