Здравствуйте!
1) Вопрос по AltGr. В инетах пишут, что AltGr работает как Ctrl+Alt. Но у меня что-то не работает
Ковыряю DLL-rb раскладок. Вот есть у меня US International раскладка
В заголовке есть описание режимов (всего 7, два из них — какие-то заглушки, ничего не делающие, похоже), и набор каких кнопок каким битам режима соответствует:
| Скрытый текст |
| Layout: 00020409 - United States-International
0x0409 - Английский (США)
/* Modifier Keys */
pCharModifiers->pVkToBit[0]: Vk: VK_SHIFT (0x10), ModBits: 0x01 (KBDSHIFT)
pCharModifiers->pVkToBit[1]: Vk: VK_CONTROL (0x11), ModBits: 0x02 (KBDCTRL)
pCharModifiers->pVkToBit[2]: Vk: VK_MENU (0x12), ModBits: 0x04 (KBDALT)
pCharModifiers->wMaxModBits: 7
pCharModifiers->ModNumber[0]: <none>
pCharModifiers->ModNumber[1]: 0x01 (KBDSHIFT)
pCharModifiers->ModNumber[2]: 0x04 (KBDALT)
pCharModifiers->ModNumber[3]: 0x05 (KBDSHIFT|KBDALT)
pCharModifiers->ModNumber[4]: SHFT_INVALID - no characters produced with this shift state
pCharModifiers->ModNumber[5]: SHFT_INVALID - no characters produced with this shift state
pCharModifiers->ModNumber[6]: 0x02 (KBDCTRL)
|
| |
Далее. Есть таблица соответствия кодов виртуальных клавиш:
| Скрытый текст |
| /* Characters */
--------- NONE KBDSHIFT KBDALT KBDSHIFT|KBDALT KBDCTRL
VirtualKey: 0x33 ( 3), Attributes: 0x00, wch: 0x0033 '3' , 0x0023 '#' , 0x00B3 '³' ,
VirtualKey: 0x35 ( 5), Attributes: 0x00, wch: 0x0035 '5' , 0x0025 '%' , 0x20AC '€' ,
VirtualKey: 0x37 ( 7), Attributes: 0x00, wch: 0x0037 '7' , 0x0026 '&' , 0x00BD '½' ,
VirtualKey: 0x38 ( 8), Attributes: 0x00, wch: 0x0038 '8' , 0x002A '*' , 0x00BE '¾' ,
VirtualKey: 0x39 ( 9), Attributes: 0x00, wch: 0x0039 '9' , 0x0028 '(' , 0x2018 '‘' ,
VirtualKey: 0x30 ( 0), Attributes: 0x00, wch: 0x0030 '0' , 0x0029 ')' , 0x2019 '’' ,
VirtualKey: 0x52 ( R), Attributes: 0x01, wch: 0x0072 'r' , 0x0052 'R' , 0x00AE '®' , attrs as names: CAPLOK
VirtualKey: 0x4D ( M), Attributes: 0x01, wch: 0x006D 'm' , 0x004D 'M' , 0x00B5 'µ' , attrs as names: CAPLOK
VirtualKey: 0xBF ( Slash), Attributes: 0x00, wch: 0x002F '/' , 0x003F '?' , 0x00BF '¿' ,
|
| |
Окей. Нажимаю тройку — просто, с шифтом, с альтом: "3#" — с альтом ничего не вводится. Окей, смотрю, что у раскладки стоит флаг KLLF_ALTGR — видимо, надо нажимать AltGr. Окей, пробую, вводится: "3#³". Работает, ура.
Итого, получается, что флаг KBDALT — на самом деле KBDALTGREY (но такого флага самого по себе нету). Вспоминаю, что AltGr работает как Ctrl+Alt — нажимаю Ctrl+Alt+3 — "³". Хм, внезапно — работает. Хотя я накануне ковырялся — не работало. Правда, воспроизвести не смогу, и не записал, но вроде на чешской 405 раскладке ковырялся. Ну, окей, стока понаписал, стирать жалко — пусть будет, может, кому пригодится
2) Флаг CAPLOKALTGR, который устанавливается (может быть установлен) для каждой VK — CapsLock toggles the SHIFT state only if both Ctrl and Alt are down.
Вот это вообще не понятно. Потыкал, потыкал — как работает, не понял. Раскладка, опять же — 00020409 — United States-International.
Судя по описанию, которое я нашел — Caps Lock режим включается по нажатию клавиши "Caps Lock" только если при этом нажат AltGr.
Там CAPLOKALTGR появляется так:
| Скрытый текст |
| VirtualKey: 0x41 ( A), Attributes: 0x05, wch: 0x0061 'a' , 0x0041 'A' , 0x00E1 'á' , 0x00C1 'Á' , attrs as names: CAPLOK|CAPLOKALTGR
VirtualKey: 0x53 ( S), Attributes: 0x01, wch: 0x0073 's' , 0x0053 'S' , 0x00DF 'ß' , 0x00A7 '§' , attrs as names: CAPLOK
VirtualKey: 0x44 ( D), Attributes: 0x05, wch: 0x0064 'd' , 0x0044 'D' , 0x00F0 'ð' , 0x00D0 'Ð' , attrs as names: CAPLOK|CAPLOKALTGR
VirtualKey: 0x4C ( L), Attributes: 0x05, wch: 0x006C 'l' , 0x004C 'L' , 0x00F8 'ø' , 0x00D8 'Ø' , attrs as names: CAPLOK|CAPLOKALTGR
VirtualKey: 0xBA ( Colon), Attributes: 0x00, wch: 0x003B ';' , 0x003A ':' , 0x00B6 '¶' , 0x00B0 '°' ,
|
| |
С "Colon" и остальными клавишами с флагом CAPLOK — понятно, CAPLOK сдвигает регистр символа, а для точки с запятой нет пары строчный/прописной. А вот что тут значит флаг CAPLOKALTGR, и почему он не установлен для клавиши "S"? Я вот не вижу отличий в описании (да и в поведении тоже) клавиши "S" от клавиш "D" и "L"
ЗЫ В десятке вроде сделали поудобнее, чем раньше. А может, я как-то по-другому настроил. Но сейчас Alt+Shift переключает по кругу только две основные раскладки EN/RU, а все дополнительные игнорит. Чтобы переключится на экзотику, надо либо мышкой тыкать, либо Win+Space нажимать. А раньше в семерке Alt+Shift всё по кругу переключал, из-за этого я заводил отдельного пользователя с кучей установленных раскладок, чтобы из-под него экспериментировать с ними.
ЗЗЫ Кстати, обнаружилось, что очень часто не важно, в какой последовательности нажимать CTRL+ALT+SHIFT. Так, Shift+Alt переключает раскладки аналогично Alt+Shift, только триггероv переключения работает Alt, а не Shift