Получение текущей раскладки в Windows 10
-
- Posts: 436
- Joined: Mon 12 Jun, 2006 14:58
- Has thanked: 1 time
- Been thanked: 27 times
- Contact:
Получение текущей раскладки в Windows 10
Ф-ция kbdLayoutFunc() в macro.cpp возвращает 0 на десятке.
Недокументенная функа GetConsoleKeyboardLayoutNameW возвращает ошибку на 10ке, так что дополнительные проверки не требуются. Просто в console.cpp функцию console::GetKeyboardLayoutName(string &strName) чуть переделать и вместо return false добавить дополнительный if с вызовом GetKeyboardLayoutName (у них с уже использованной формат вывода подходящий). А уж если эта не удалась - тогда return false
Недокументенная функа GetConsoleKeyboardLayoutNameW возвращает ошибку на 10ке, так что дополнительные проверки не требуются. Просто в console.cpp функцию console::GetKeyboardLayoutName(string &strName) чуть переделать и вместо return false добавить дополнительный if с вызовом GetKeyboardLayoutName (у них с уже использованной формат вывода подходящий). А уж если эта не удалась - тогда return false
- DrKnS
- Posts: 6114
- Joined: Thu 04 Aug, 2005 06:44
- Location: Kyiv
- Has thanked: 12 times
- Been thanked: 426 times
Глюки и баги, появившиеся в «ночных сборках»
А смысл этого?
GetKeyboardLayoutName всегда возвращает тот layout, который был в момент запуска консоли, и нет, в 10 это не починили.
Именно поэтому в Far используется недокументированная альтернатива.
Лучше уж фейл, чем возвращать шопопало.
- DrKnS
- Posts: 6114
- Joined: Thu 04 Aug, 2005 06:44
- Location: Kyiv
- Has thanked: 12 times
- Been thanked: 426 times
Глюки и баги, появившиеся в «ночных сборках»
Нашел у них открытый issue на эту тему: https://github.com/microsoft/terminal/issues/83
Вы знаете, что делать.
Вы знаете, что делать.
Глюки и баги, появившиеся в «ночных сборках»
Вроде как ф-я сама по себе работает, просто для консоли нет нормального способа найти нужный аргумент.
Нарылся такой проект на гитхабе -- https://github.com/Elfy/getconkbl,
не проверял, даже если работает - это просто некоторая эвристика, никаких гарантий, ну и слишком много приседаний.
Глюки и баги, появившиеся в «ночных сборках»
Проверил. Код можно сильно упростить, оставив только 2 toolhelp снимка (процессы и потоки) и пробег по ним.
Среди потоков conhost.exe, владельцем которого является фар, дейтвительно есть такой с которым GetKeyboardLayout(thread_id) отдаёт текущий (а не тот что был при старте) KbdLayout. Но у меня на Win10 это третий поток из 5 (а не второй из 4 как в гитхабовских сорсах).
Как вытаскивать правильный может знать только M$.
Получение текущей раскладки в Windows 10
Можно, конечно, выбирать отличающийся (если есть). Для макроса приемлемый вариант, для far сомнительный.
Last edited by 2useven10 on Fri 23 Aug, 2019 15:01, edited 1 time in total.
Получение текущей раскладки в Windows 10
Старшая половина почему-то через GetKeyboardLayout() и GetkeyboardLayoutName() при переключении на русский отличается.
И 16 бит вполне хватает для выяснения факта переключения, поэтому обрезано.
PS: в скрипте была глобальная переменная - исправил. Может и ещё есть косяки - сообщайте...
И 16 бит вполне хватает для выяснения факта переключения, поэтому обрезано.
PS: в скрипте была глобальная переменная - исправил. Может и ещё есть косяки - сообщайте...
-
- Posts: 6840
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 530 times
Получение текущей раскладки в Windows 10
2useven10, это функция определения текущей раскладки. А как обстоят дела в Windows 10 с переключением раскладки (Far.KbdLayout(1), Far.KbdLayout(-1)) - это работает из коробки?
- John Doe
- Бюрократ
- Posts: 13867
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 74 times
- Been thanked: 428 times
- Contact:
- John Doe
- Бюрократ
- Posts: 13867
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 74 times
- Been thanked: 428 times
- Contact:
Получение текущей раскладки в Windows 10
У меня при любой из 2х раскладок выдаёт
0x04090409
.Update
После перезапуска фара заработало.
Last edited by John Doe on Sun 25 Aug, 2019 12:59, edited 1 time in total.