Как программно запретить изменение раскладки клавиатуры
От: Melamed Россия  
Дата: 09.06.21 21:23
Оценка:
Как программно запретить/разрешить изменение раскладки клавиатуры?
Желательно, что бы пользователь мог ввести в некоторые строки ввода только латинские символы, и пока фокус вода стоит на этих строках ввода не мог переключить раскладку на другую, например, на русскую.

Проект пишется на WINAPI C++
Re: Как программно запретить изменение раскладки клавиатуры
От: Maniacal Россия  
Дата: 10.06.21 06:34
Оценка: 1 (1)
Здравствуйте, Melamed, Вы писали:

M>Как программно запретить/разрешить изменение раскладки клавиатуры?

M>Желательно, что бы пользователь мог ввести в некоторые строки ввода только латинские символы, и пока фокус вода стоит на этих строках ввода не мог переключить раскладку на другую, например, на русскую.

M>Проект пишется на WINAPI C++


Ловить notification EN_UPDATE, читать содержимое edit'а и нещадно убивать не латинские символы.
Re: Как программно запретить изменение раскладки клавиатуры
От: alpha21264 СССР  
Дата: 10.06.21 10:29
Оценка: +2
Здравствуйте, Melamed, Вы писали:

M>Как программно запретить/разрешить изменение раскладки клавиатуры?

M>Желательно, что бы пользователь мог ввести в некоторые строки ввода только латинские символы, и пока фокус вода стоит на этих строках ввода не мог переключить раскладку на другую, например, на русскую.

Может не делать такой ужас, а использовать обычный чек вводимых данных?
Оно и гибче будет.
http://s19.rimg.info/0871fde0709f1bd37b3b012eb22a4583.gif
Течёт вода Кубань-реки куда велят большевики.
Re: Как программно запретить изменение раскладки клавиатуры
От: ononim  
Дата: 10.06.21 11:07
Оценка:
M>Проект пишется на WINAPI C++
С помощью VkKeyScanExA&Co переводить текст в нужную раскладку?
Как много веселых ребят, и все делают велосипед...
Re[2]: Как программно запретить изменение раскладки клавиатуры
От: Melamed Россия  
Дата: 10.06.21 11:23
Оценка:
Здравствуйте, Maniacal, Вы писали:

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


M>>Как программно запретить/разрешить изменение раскладки клавиатуры?

M>>Желательно, что бы пользователь мог ввести в некоторые строки ввода только латинские символы, и пока фокус вода стоит на этих строках ввода не мог переключить раскладку на другую, например, на русскую.

M>>Проект пишется на WINAPI C++


M>Ловить notification EN_UPDATE, читать содержимое edit'а и нещадно убивать не латинские символы.


Такое решение простое, но имеет один существенный недостаток. Если текущая раскладка не английская, то символы не будут вводится в строку ввода, что может ввести пользователя в ступор. А это может не хорошо отразится на вашей программы.

Конечно, можно при получении фокуса проверить и при необходимости поменять раскладку клавиатуры, но это частичное решение проблемы, так как пользователь может сам поменять раскладку клавиатуры, когда фокус имеет эта строка ввода и соответственно пропадет в нем возможность вводить символы, если сделать, как Вы говорите. А это не желательно
Re[3]: Как программно запретить изменение раскладки клавиатуры
От: Maniacal Россия  
Дата: 10.06.21 11:52
Оценка: +2
Здравствуйте, Melamed, Вы писали:

M>Такое решение простое, но имеет один существенный недостаток. Если текущая раскладка не английская, то символы не будут вводится в строку ввода, что может ввести пользователя в ступор. А это может не хорошо отразится на вашей программы.

Часто такое встречаю на сайтах в полях ввода, иногда в программах. Можно Tooltip высветить с подсказкой о неправильной раскладке. Можно разрешать вводить и toopltip высвечивать, как винда делает при логине, если CapsLock включён.
Re[3]: Как программно запретить изменение раскладки клавиатуры
От: qaz77  
Дата: 10.06.21 14:50
Оценка:
Здравствуйте, Melamed, Вы писали:
M>Такое решение простое, но имеет один существенный недостаток. Если текущая раскладка не английская, то символы не будут вводится в строку ввода, что может ввести пользователя в ступор. А это может не хорошо отразится на вашей программы.

M>Конечно, можно при получении фокуса проверить и при необходимости поменять раскладку клавиатуры, но это частичное решение проблемы, так как пользователь может сам поменять раскладку клавиатуры, когда фокус имеет эта строка ввода и соответственно пропадет в нем возможность вводить символы, если сделать, как Вы говорите. А это не желательно


Насколько я понял, нужно при включенной не английской раскладке в edit пропускать английские буквы.
Например, при русской раскладке нажимается клавиша (S/Ы), но вместо Ы печатается S.

Я бы перекодировал пришедший символ(WCHAR) в код виртуальной клавиши, а потом виртуальную клавишу — в символ по английской раскладке.

Есть два пути вставки символов в edit — WM_CHAR и вставка из буфера обмена.
Undo и Clear не предполагает появления новых символов.

При вставке из буфера обмена и наличии нежелательных символов можно делать MessageBeep или балонный тултип показывать и блокировать вставку.

Для WM_CHAR можно запросто перекодировать WCHAR (wch) из текущей раскладки какой-бы она ни была в английскую:
1. SHORT vk = VkKeyScanExW(wch, hklCur);
2. UINT scan_code = MapVirtualKeyExW(LOBYTE(vk), MAPVK_VK_TOVSC, hklEng);
3. WCHAR buf[2] = { 0 }; ToUnicodeEx(LOBYTE(vk), scan_code, key_state, buf, 2, 0, hklEng);
4. посылаем edit'у WM_CHAR с символом buf[0]
Re[3]: Как программно запретить изменение раскладки клавиатуры
От: Carc Россия AmlPages.com — http://www.amlpages.com/home.php
Дата: 10.06.21 18:32
Оценка: +1
Здравствуйте, Melamed, Вы писали:

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


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


M>>>Как программно запретить/разрешить изменение раскладки клавиатуры?

M>>>Желательно, что бы пользователь мог ввести в некоторые строки ввода только латинские символы, и пока фокус вода стоит на этих строках ввода не мог переключить раскладку на другую, например, на русскую.

M>>Ловить notification EN_UPDATE, читать содержимое edit'а и нещадно убивать не латинские символы.


M>Такое решение простое, но имеет один существенный недостаток. Если текущая раскладка не английская, то символы не будут вводится в строку ввода, что может ввести пользователя в ступор. А это может не хорошо отразится на вашей программы.


Дык надо при этом — удалении нелатинских символов — демонстрировать что происходит: бибикать и показывать какой-нить тултип рядом с полем ввода с текстом что-нить вроде "Только латинские символы".
Aml Pages Home
Re: Как программно запретить изменение раскладки клавиатуры
От: Mr.Delphist  
Дата: 16.06.21 15:44
Оценка: -1
Здравствуйте, Melamed, Вы писали:

M>Как программно запретить/разрешить изменение раскладки клавиатуры?


Приложение НЕ ДОЛЖНО запрещать вещи, входящие в прерогативу ОС. Особенно радуют идеи "окно нельзя сделать больше чем X*Y пикселей". Владельцы современных hi-res мониторов рады такой заботе.

M>Желательно, что бы пользователь мог ввести в некоторые строки ввода только латинские символы, и пока фокус вода стоит на этих строках ввода не мог переключить раскладку на другую, например, на русскую.


А если он перешёл в другую программу, там сделал переключение раскладки и вернулся? "Это не та принцесса, Марио." (ц)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.