Об опознавании клавиш-цифр нампада командой mf.waitkey(0,1).
Об опознавании клавиш-цифр нампада командой mf.waitkey(0,1).
Нажатые сами по себе клавиши-цифры нампада при включённом NumLock опознаются как цифры, а при выключенном — согласно другим обозначениям на этих клавишах (Home, End, PgUp, PgDn, Ins, Del, Up, Down, Left, Right), клавиша Num5 опознаётся как Clear.
Раздвоение нажатий нампадовских клавиш несколько напрягает. И поэтому то, что, вне зависимости от включения NumLock, их нажатия в сочетаниях с модификатором Ctrl опознаются однообразно как CtrlNumЦифра (CtrlNum5 — как CtrlClear) воспринимается сугубо положительно. Аналогично и с сочетаниями с CtrlAlt. И также ожидается, что и в других сочетаниях с модификаторами (за исключением особых комбинаций с Alt) будет подобная ситуация. Однако, в других случаях наблюдается следующее.
Шорткаты ShiftNumЦифра, CtrlShiftNumЦифра, AltShiftNumЦифра и CtrlAltShiftNumЦифра при включённом NumLock опознаются как сочетания только соответствующих модификаторов Shift, CtrlShift, AltShift и CtrlAltShift без цифр. А вот при выключенном NumLock — нормально, как модификатор(ы)+NumЦифра (в случаях с Num5 — как модификатор(ы)+Clear).
ОС — Win10 LTSB x64 рус; Far 5036 x86.
Раздвоение нажатий нампадовских клавиш несколько напрягает. И поэтому то, что, вне зависимости от включения NumLock, их нажатия в сочетаниях с модификатором Ctrl опознаются однообразно как CtrlNumЦифра (CtrlNum5 — как CtrlClear) воспринимается сугубо положительно. Аналогично и с сочетаниями с CtrlAlt. И также ожидается, что и в других сочетаниях с модификаторами (за исключением особых комбинаций с Alt) будет подобная ситуация. Однако, в других случаях наблюдается следующее.
Шорткаты ShiftNumЦифра, CtrlShiftNumЦифра, AltShiftNumЦифра и CtrlAltShiftNumЦифра при включённом NumLock опознаются как сочетания только соответствующих модификаторов Shift, CtrlShift, AltShift и CtrlAltShift без цифр. А вот при выключенном NumLock — нормально, как модификатор(ы)+NumЦифра (в случаях с Num5 — как модификатор(ы)+Clear).
ОС — Win10 LTSB x64 рус; Far 5036 x86.
Last edited by sToLp on Sat 23 Sep, 2017 15:50, edited 1 time in total.
Об опознавании клавиш-цифр нампада командой mf.waitkey(0,1).
Спасибо за внимательность! Поправил.
Кажется, нашёл: The shift key overrides NumLock. Машинный перевод:
Возможно, это не так хорошо известно сегодня, как это было во времена, когда клавиши со стрелками и цифровым клавиатурным разделом - это то, что клавиша сдвига переопределяет NumLock.
Если NumLock включен (как обычно), то нажатие клавиши на цифровой клавиатуре при удерживании клавиши сдвига отменяет NumLock и вместо этого генерирует клавишу со стрелкой (или другую навигационную клавишу), напечатанную мелким шрифтом под большими цифрами.
(Клавиша shift также переопределяет CapsLock. Если вы включите CapsLock, тогда удерживайте клавишу shift во время ввода буквы, эта буква появится в нижнем регистре.)
Возможно, вы могли бы решить, что эта небольшая притворная клавиша абсолютно ничтожна, по крайней мере, пока вы не попытаетесь сделать что-то вроде Shift + Numpad0 как горячую клавишу и задаться вопросом, почему она не работает. Теперь ты знаешь.
Об опознавании клавиш-цифр нампада командой mf.waitkey(0,1).
Кажется, я чуток подзапутался. Ведь то, что Shift "переопределяет NumLock", должно вроде бы означать, что включённый NumLock он выключает, а выключенный — включает (по аналогии с тем, что он делает с CapsLock)?
И при выключенном NumLock картинка вроде бы вполне совпадает — с присутствием среди модификаторов Shift`а NumLock как бы включается. И мы закономерно имеем на выходе просто цифры, вкупе с соответствующими модификаторами.
Но тогда, казалось бы, можно было бы ожидать того, что при применении шорткатов с Shift`ом в условиях включенного NumLock`а он должен был бы как бы выключаться. И на выходе мы вроде бы должны были бы получать Home (Num7), End (Num1), PgUp (Num9), PgDn (Num3), Ins (Num0), Up (Num8), Down (Num2), Left (Num4), Right (Num6) и Clear, вкупе с соответствующими модификаторами. Это не было удобно. Но это и не были бы "пустые" модификаторы. И при желании для удобства их можно было бы переопределить макросами. Или я чего-то недопонимаю?
И при выключенном NumLock картинка вроде бы вполне совпадает — с присутствием среди модификаторов Shift`а NumLock как бы включается. И мы закономерно имеем на выходе просто цифры, вкупе с соответствующими модификаторами.
Но тогда, казалось бы, можно было бы ожидать того, что при применении шорткатов с Shift`ом в условиях включенного NumLock`а он должен был бы как бы выключаться. И на выходе мы вроде бы должны были бы получать Home (Num7), End (Num1), PgUp (Num9), PgDn (Num3), Ins (Num0), Up (Num8), Down (Num2), Left (Num4), Right (Num6) и Clear, вкупе с соответствующими модификаторами. Это не было удобно. Но это и не были бы "пустые" модификаторы. И при желании для удобства их можно было бы переопределить макросами. Или я чего-то недопонимаю?
- zg
- zero-gravity
- Posts: 6035
- Joined: Tue 15 Mar, 2005 17:36
- Location: riga
- Been thanked: 185 times
- Contact:
Об опознавании клавиш-цифр нампада командой mf.waitkey(0,1).
вы нажимаете shift, приходит нажатие shift, вы нажимаете num7, приходит отпускание shift и нажатие home, отпускаете home, приходит, отпускание home и нажатие shift, отпускаете shift - приходит отпускание shift. т.е. реально три нажатия shift, home, shift. вы, видимо видите только последнее.
Об опознавании клавиш-цифр нампада командой mf.waitkey(0,1).
Благодарю Вас за обстоятельное разъяснение! И надеюсь, что я его правильно понял. Т.е в другом случае (при выключенном NumLock) картина существенно иная: нажимаю shift, приходит нажатие shift (и как бы включение NumLock), нажимаю 7, приходит отпускание shift (и как бы выключение NumLock) и вместе с тем нажатие 7, отпускаю 7, приходит 7, и я это последнее и вижу.zg wrote: ↑Sat 23 Sep, 2017 22:46вы нажимаете shift, приходит нажатие shift, вы нажимаете num7, приходит отпускание shift и нажатие home, отпускаете home, приходит, отпускание home и нажатие shift, отпускаете shift - приходит отпускание shift. т.е. реально три нажатия shift, home, shift. вы, видимо видите только последнее.
И тогда, поскольку команда mf.waitkey(0,1) объективно не может полноценно распознать нажатие шорткатов ShiftNumЦифра, CtrlShiftNumЦифра, AltShiftNumЦифра и CtrlAltShiftNumЦифра при включённом NumLock, нет ли другого способа сделать это?
Last edited by sToLp on Sun 24 Sep, 2017 07:12, edited 2 times in total.
- John Doe
- Бюрократ
- Posts: 13860
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 74 times
- Been thanked: 428 times
- Contact:
Об опознавании клавиш-цифр нампада командой mf.waitkey(0,1).
Наоборот, первое, waitkey для модификаторов ловит отпускания.
Code: Select all
lua:far.Show(mf.waitkey(),mf.waitkey(1))
- John Doe
- Бюрократ
- Posts: 13860
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 74 times
- Been thanked: 428 times
- Contact:
Об опознавании клавиш-цифр нампада командой mf.waitkey(0,1).
Нет, в этом случае всё проще, при выключенном NumLock клавиша называется Num7, отпускание Shift приходит именно тогда, когда вы его реально отпускаете (ОС тут не вмешивается), и waitkey возвращает ShiftNum7.sToLp wrote: ↑Sun 24 Sep, 2017 06:50Т.е в другом случае (при выключенном NumLock) картина существенно иная: нажимаю shift, приходит нажатие shift (и как бы включение NumLock), нажимаю 7, приходит отпускание shift (и как бы выключение NumLock) и вместе с тем нажатие 7, отпускаю 7, приходит 7, и я это последнее и вижу.
А при включенном происходит то, что описал zg. Это тоже ловится waitkey, но как два нажатия, см. мой пример.
Об опознавании клавиш-цифр нампада командой mf.waitkey(0,1).
Т.е. правильнее будет понимать это следующим образом:
При выключенном NumLock нажимаю Shift (винда это как бы игнорирует), нажимаю Num7, приходит отпускание Shift (и это отпускание интерпретируется как модификатор) и вместе с тем нажатие Num7 (что в совокупности интерпретируется как ShiftNum7), отпускаю Num7, приходит ShiftNum7, и вот это mf.waitkey(0,1) мне и выдаёт.
?
- John Doe
- Бюрократ
- Posts: 13860
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 74 times
- Been thanked: 428 times
- Contact:
Об опознавании клавиш-цифр нампада командой mf.waitkey(0,1).
Неправильно.
Всё максимально прямолинейно.
Всё максимально прямолинейно.
- Нажимаю Shift
Приходит нажатие, но оно никак не интерпретируется фаром. - Нажимаю Num7.
Приходит Num7, который в совокупности с ControlKeyState интерпретируется фаром как ShiftNum7, который вы и получаете в waitkey.
А если удерживать Num7, то получим автоповтор. - Отпускаю Num7.
Приходит, но никак не интерпретируется. - Отпускаю Shift.
Приходит, но никак не интерпретируется.
Если бы между нажатием Shift и его отпусканием не было бы других событий, то интепретировалось бы фаром как одиночный Shift.
Об опознавании клавиш-цифр нампада командой mf.waitkey(0,1).
Большое спасибо за подробное объяснение! Для осознания того, почему получается именно такой результат это очень полезно.
И за пример большая Вам благодарность! Такие примеры очень помогают осваивать макросы.John Doe wrote: ↑Sun 24 Sep, 2017 08:05waitkey для модификаторов ловит отпусканияCode: Select all
lua:far.Show(mf.waitkey(),mf.waitkey(1))
А поскольку вопрос полноценного распознания шорткатов ShiftNumЦифра, CtrlShiftNumЦифра, AltShiftNumЦифра и CtrlAltShiftNumЦифра макросом при включённом NumLock остаётся открытым, нельзя ли поднять его на багтрекере? Спрашиваю потому, что, в вопросах программирования фактически являюсь дилетантом начального уровня, перспективу решения вопроса самостоятельно оценить не могу, и не хотел бы обременять специалистов заведомо бесперспективной просьбой.
- John Doe
- Бюрократ
- Posts: 13860
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 74 times
- Been thanked: 428 times
- Contact:
Об опознавании клавиш-цифр нампада командой mf.waitkey(0,1).
Полноценного распознавания не получится, только эвристическое.
Когда-то оно было, но от него отказались, т.к. в определённых случаях мешало.
Можно попробовать самостоятельно "вычислять" клавишу, используя дополнительную информацию от win.GetKeyState.
Возможно также, что модуль xmod поможет с этим справится, я не смотрел.
Edit
Проверил, win.GetKeyState тут не поможет
Когда-то оно было, но от него отказались, т.к. в определённых случаях мешало.
Можно попробовать самостоятельно "вычислять" клавишу, используя дополнительную информацию от win.GetKeyState.
Возможно также, что модуль xmod поможет с этим справится, я не смотрел.
Edit
Проверил, win.GetKeyState тут не поможет
Last edited by John Doe on Sun 24 Sep, 2017 15:50, edited 1 time in total.
Об опознавании клавиш-цифр нампада командой mf.waitkey(0,1).
Кажется, я догадался как можно при включённом NumLock макросом показать шорткаты, набиваемые нампадовскими цифрами с модификаторами, в составе которых модификатор Shift. На эту догадку меня натолкнул приведённый Вами пример с двумя ключами.
Code: Select all
lua:mf.waitkey() local res=(mf.waitkey(1)) local bnd=mf.replace(res,"Num","ShiftNum") msgbox("Правильный ключ:",bnd,0x00010000)
С ключом "Clear" аналогичная замена на "ShiftClear".
Если этот вариант допустим, то надо будет ещё правильные условия в condition подобрать.