Альтернативные раскладки и WM_KEYDOMN/WM_SYSKEYDOWN
От: Vaynamond Россия  
Дата: 15.11.11 07:06
Оценка:
Добрый день, коллеги!
Появилась необходимость поддержки в программе альтернативных клавиатурных раскладок (т.е. тех, которые
позволяют вводить дополнительные символы в сочетании с правым Alt'ом) и столкнулся с такой ситуацией:
Есть диалог с EditBox'ом, в PreTranslateMessage ловлю WM_KEYDOWN/WM_SYSKEYDOWN и с помощью GetKeyState
проверяю статусы клавиш VK_MENU/VK_SHIFT/VK_CONTROL.
Если текущая раскладка английская/русская, то при нажатии в EditBox'е клавиши Alt (левая/правая — без
разницы) в PreTranslateMessage прилетает WM_SYSKEYDOWN со статусом VK_MENU.
Если текущая раскладка альтернативная (для определённости киргизская — KY), то при нажатии на левый Alt
всё происходит аналогично английской/русской раскладке, но если нажать правый Alt, то:
1. Вместо WM_SYSKEYDOWN приходят ДВА сообщения WM_KEYDOWN;
2. В первом сообщении получаем статус VK_CONTROL, во втором — VK_CONTROL и VK_MENU (т.е. нажатие правой
клавиши Alt превращается в комбинацию Ctrl-Alt).

Что сие означает ?
Re: Альтернативные раскладки и WM_KEYDOMN/WM_SYSKEYDOWN
От: Centaur Россия  
Дата: 15.11.11 10:02
Оценка:
Здравствуйте, Vaynamond, Вы писали:

V>1. Вместо WM_SYSKEYDOWN приходят ДВА сообщения WM_KEYDOWN;

V>2. В первом сообщении получаем статус VK_CONTROL, во втором — VK_CONTROL и VK_MENU (т.е. нажатие правой
V>клавиши Alt превращается в комбинацию Ctrl-Alt).

V>Что сие означает ?


Ровно то самое и обозначает. AltGr эквивалентно Ctrl+Alt. Вы можете в этом убедиться, нажав Ctrl+Alt+какую-нибудь буквенную клавишу, на которой есть что-нибудь в AltGr.
Re[2]: Альтернативные раскладки и WM_KEYDOMN/WM_SYSKEYDOWN
От: Vaynamond Россия  
Дата: 15.11.11 12:19
Оценка:
Здравствуйте, Centaur, Вы писали:

C>Ровно то самое и обозначает. AltGr эквивалентно Ctrl+Alt. Вы можете в этом убедиться, нажав Ctrl+Alt+какую-нибудь буквенную клавишу, на которой есть что-нибудь в AltGr.


Тогда такой глупый вопрос: как можно узнать, есть для текущей раскладки что-нибудь в AltGr или нет ?
Re[3]: Альтернативные раскладки и WM_KEYDOMN/WM_SYSKEYDOWN
От: kero Россия  
Дата: 15.11.11 13:18
Оценка:
Здравствуйте, Vaynamond, Вы писали:

V>Здравствуйте, Centaur, Вы писали:


C>>Ровно то самое и обозначает. AltGr эквивалентно Ctrl+Alt. Вы можете в этом убедиться, нажав Ctrl+Alt+какую-нибудь буквенную клавишу, на которой есть что-нибудь в AltGr.


V>Тогда такой глупый вопрос: как можно узнать, есть для текущей раскладки что-нибудь в AltGr или нет ?


GetKeyState(VK_RMENU) ?
По всему, пашиным хозяевам позарез нужна война в Европе
(уверены — к ним не залетит, в предыдущих двух не залетало жеж)
Автор: kero
Дата: 21.07.14
Re[3]: Альтернативные раскладки и WM_KEYDOMN/WM_SYSKEYDOWN
От: Centaur Россия  
Дата: 15.11.11 17:28
Оценка:
Здравствуйте, Vaynamond, Вы писали:

V>Тогда такой глупый вопрос: как можно узнать, есть для текущей раскладки что-нибудь в AltGr или нет ?


Настоящую задачу в студию. Чисто практически, с пользовательской точки зрения — открываем Блокнот, зажимаем правый Alt и вперёд по клавиатуре.
Re[4]: Альтернативные раскладки и WM_KEYDOMN/WM_SYSKEYDOWN
От: Vaynamond Россия  
Дата: 15.11.11 17:32
Оценка:
Здравствуйте, kero, Вы писали:

V>>Тогда такой глупый вопрос: как можно узнать, есть для текущей раскладки что-нибудь в AltGr или нет ?


K>GetKeyState(VK_RMENU) ?


Не, GetKeyState(VK_RMENU) позволяет узнать, был ли нажат правый Alt или нет. Мне же интересно узнать,
откуда Windows знает, что, например, для английской и русской раскладки нет альтернативных символов,
а для киргизской и украинской есть. Соответственно, и поведение различное при нажатом правом Alt'е:
либо одно WM_SYSKEYDOWN, либо два WM_KEYDOWN.
Re[4]: Альтернативные раскладки и WM_KEYDOMN/WM_SYSKEYDOWN
От: Vaynamond Россия  
Дата: 16.11.11 04:54
Оценка:
Здравствуйте, Centaur, Вы писали:

C>Здравствуйте, Vaynamond, Вы писали:


V>>Тогда такой глупый вопрос: как можно узнать, есть для текущей раскладки что-нибудь в AltGr или нет ?


C>Настоящую задачу в студию. Чисто практически, с пользовательской точки зрения — открываем Блокнот, зажимаем правый Alt и вперёд по клавиатуре.


Вот и задача: для русской/английской раскладки комбинации "левый Ctrl + правый Alt + F7" и "правый Alt + F7" являются разными, а для киргизской/украинской — одинаковыми. А нужно, чтобы эти комбинации вели себя одинаково, в независимости от текущей раскладки.
Re[5]: Альтернативные раскладки и WM_KEYDOMN/WM_SYSKEYDOWN
От: Centaur Россия  
Дата: 16.11.11 17:04
Оценка: :)
Здравствуйте, Vaynamond, Вы писали:

C>>Настоящую задачу в студию. Чисто практически, с пользовательской точки зрения — открываем Блокнот, зажимаем правый Alt и вперёд по клавиатуре.


V>Вот и задача: для русской/английской раскладки комбинации "левый Ctrl + правый Alt + F7" и "правый Alt + F7" являются разными, а для киргизской/украинской — одинаковыми. А нужно, чтобы эти комбинации вели себя одинаково, в независимости от текущей раскладки.


Не надо брать таких задач. Нет клавиш «левый Alt» и «правый Alt». Есть клавиша Alt и клавиша AltGr. AltGr не сочетается с функциональными клавишами и используется только с алфавитно-цифровыми.

А ещё не надо назначать шорткаты вида Ctrl+Alt+[буква|цифра]. По той же причине — они будут мешать вводить символы через AltGr.
Re[6]: Альтернативные раскладки и WM_KEYDOMN/WM_SYSKEYDOWN
От: Vaynamond Россия  
Дата: 16.11.11 17:38
Оценка:
Здравствуйте, Centaur, Вы писали:

C>Не надо брать таких задач. Нет клавиш «левый Alt» и «правый Alt». Есть клавиша Alt и клавиша AltGr. AltGr не сочетается с функциональными клавишами и используется только с алфавитно-цифровыми.


C>А ещё не надо назначать шорткаты вида Ctrl+Alt+[буква|цифра]. По той же причине — они будут мешать вводить символы через AltGr.


Учтём-с. Спасибо!

P.S.: Но всё равно интересно — существует-ли легальный способ узнать наличие AltGr-комбинаций для некоторой раскладки...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.