Есть виндовый лаптоп с 10кой. Как это принято у производителей лаптопов, в центре правой части стандартный numpad. Регулярно возникает ситуация типа нажимаешь Shift+PgUp - получаешь 9. Клавиши стрелочного блока есть, кроме Insert (злобный хьюлетт не сделал её даже как Fn+Del, хотя что им стоило), но расположены неудобно и непривычно. Диверсанты однако.
Поставил вопрос: хочу устранить логику "при NumLock=off, Shift+клавиша даёт цифру" (включая точку для Del).
Смотрел на Keyboard Layout Creator от MS - numpad там вообще не задействован. Смотрю в утёкшие файлы конфигурации стандартных раскладок - там эта часть вообще не настраивается. Похоже, логика стандартизована где-то в общем коде, не зависящем от раскладки :(
Попытался подвеситься на WH_KEYBOARD_LL. И тут оказалось, что не всё просто. Home стрелочного блока и Home цифрового блока даёт одинаково 36 (VK_HOME) при numlock=off. Home цифрового блока даёт 103 (VK_NUMPAD7) при numlock=on. Во flags таки младший бит даёт различие между двумя клавишами. Итого вариант, который вроде работает (проверил вживую): если вижу одну из 10 клавиш (центральная 5 не в счёт) и flags&1==0, ставлю 1 в младший бит flags и передаю дальше. Похоже на правду.
В Linux реализация заняла несколько строчек в конфиге, а тут - извращаться. Но победил.
Попутный вопрос: почему эта центральная 5 - VK_CLEAR в Windows и KP_Begin в XFree86? Откуда это и что должно было значить?
Поставил вопрос: хочу устранить логику "при NumLock=off, Shift+клавиша даёт цифру" (включая точку для Del).
Смотрел на Keyboard Layout Creator от MS - numpad там вообще не задействован. Смотрю в утёкшие файлы конфигурации стандартных раскладок - там эта часть вообще не настраивается. Похоже, логика стандартизована где-то в общем коде, не зависящем от раскладки :(
Попытался подвеситься на WH_KEYBOARD_LL. И тут оказалось, что не всё просто. Home стрелочного блока и Home цифрового блока даёт одинаково 36 (VK_HOME) при numlock=off. Home цифрового блока даёт 103 (VK_NUMPAD7) при numlock=on. Во flags таки младший бит даёт различие между двумя клавишами. Итого вариант, который вроде работает (проверил вживую): если вижу одну из 10 клавиш (центральная 5 не в счёт) и flags&1==0, ставлю 1 в младший бит flags и передаю дальше. Похоже на правду.
В Linux реализация заняла несколько строчек в конфиге, а тут - извращаться. Но победил.
Попутный вопрос: почему эта центральная 5 - VK_CLEAR в Windows и KP_Begin в XFree86? Откуда это и что должно было значить?
no subject
Date: 2021-12-04 06:10 pm (UTC)KP_Begin это одна из множества клавиш набора KP_*:
keycode 0x3F = KP_Multiply
keycode 0x4F = KP_Home
keycode 0x50 = KP_Up
keycode 0x51 = KP_Prior (PageUp)
keycode 0x52 = KP_Subtract
keycode 0x53 = KP_Left
keycode 0x54 = KP_Begin
keycode 0x55 = KP_Right
keycode 0x56 = KP_Add
keycode 0x57 = KP_End
keycode 0x58 = KP_Down
keycode 0x59 = KP_Next (PageDown)
keycode 0x5A = KP_Insert
keycode 0x5B = KP_Delete
keycode 0x6C = KP_Enter
keycode 0x70 = KP_Divide
KP_Begin сидит аккурат между KP_Left и KP_Right.
no subject
Date: 2021-12-04 06:21 pm (UTC)no subject
Date: 2021-12-04 06:45 pm (UTC)no subject
Date: 2021-12-04 06:57 pm (UTC)no subject
Date: 2021-12-04 07:03 pm (UTC)Ещё "CLEAR Key" упоминается тут: http://index-of.es/Programming/Assembly/Windows%20assembly%20language%20and%20systems%20programming%201997.pdf