VB.net - Программная смена раскладки
В этой статье я расскажу о программном способе смены раскладки.
--
Основным языком в компьютерной технологии является английский. Поэтому пользователям других языков приходится, кроме английского, использовать еще и родной.
Допустим, вам необходимо заполнить простую анкету - фио, город, страна и тд.
Все ответы на эти вопросы вам необходимо вводить кириллицей, а в системе по умолчанию стоит английский. Вы вводите слово, а то и целые предложения, и замечаете, что пишите совсем не то что хочется. Приходится все стирать и набирать заново.
Конечно есть специальные программы для переключения раскладок, но они не идеальны, да, и создавая свой софт, предугадывать установленные программы сложно.
Сделаем программу, которая при запуске, будет переключать раскладку на русскую.
Создаем новый проект.
На форму помещаем текстовое поле.
В проект добавляем модуль. Даем ему следующее имя - basKeyboardLayout , а в тело помещаем следующий код.
Module basKeyboardLayout
Declare Function ActivateKeyboardLayout Lib "user32" _
(ByVal HKL As Long, ByVal flags As Long) As Long
Const Ru_RU As Long = &H4190419
Const En_US As Long = &H4090409
Public Sub RussianKeyboard()
ActivateKeyboardLayout(Ru_RU, 0)
End Sub 'RussianKeyboard
Public Sub EnglishKeyboard()
ActivateKeyboardLayout(En_US, 0)
End Sub 'EnglishKeyboard
End Module
Теперь двойным кликом по форме, переходим к коду загрузки программы.
Для выбора языка используются следующие числа -
Для АНГ r = 1033
для РУС r = 1049
Для УКР r = 1058
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim myCurrentLanguage As InputLanguage = InputLanguage.CurrentInputLanguage
Dim r = myCurrentLanguage.Culture.LCID
If r <> 1049 Then
basKeyboardLayout.RussianKeyboard()
End If
End Sub
Как вариант, вам может понадобится ввод в некоторые поля(фио, адрес...) кириллицей, а некоторые (почта) - латиницей.
Такое можно достичь следующим кодом.
Во второе текстовое поле вводим слова на латинице. В данном коде, если вводим Р, У, Д или Щ - данная буква заменяется на H, E, L, O - соответственно.
Private Sub TextBox2_TextChanged(sender As Object, e As EventArgs) Handles TextBox2.TextChanged
Dim myCurrentLanguage As InputLanguage = InputLanguage.CurrentInputLanguage
Dim r = myCurrentLanguage.Culture.LCID
If r <> 1033 Then
basKeyboardLayout.EnglishKeyboard()
Select Case TextBox2.Text
Case "р"
TextBox2.Text = "h"
Case "у"
TextBox2.Text = "e"
Case "д"
TextBox2.Text = "l"
Case "щ"
TextBox2.Text = "o"
Case Else
TextBox2.Text = ""
End Select
'---перевод курсора на нужную позицию
TextBox2.SelectionStart = 1
End If
End Sub
Для третьего текстового поля, которое назовем txtOtvets, будет следующие правило. Любая буква из англ раскладки будет заменена на соответствующую из русской.
Private Sub TextBox3_TextChanged(sender As Object, e As EventArgs) Handles txtOtvets.TextChanged
Dim myCurrentLanguage As InputLanguage = InputLanguage.CurrentInputLanguage
Dim r = myCurrentLanguage.Culture.LCID
If r <> 1049 Then
basKeyboardLayout.RussianKeyboard()
Select Case txtOtvets.Text
Case "q"
txtOtvets.Text = "й"
Case "w"
txtOtvets.Text = "ц"
Case "e"
txtOtvets.Text = "у"
Case "r"
txtOtvets.Text = "к"
Case "t"
txtOtvets.Text = "е"
Case "y"
txtOtvets.Text = "н"
Case "u"
txtOtvets.Text = "г"
Case "i"
txtOtvets.Text = "ш"
Case "o"
txtOtvets.Text = "щ"
Case "p"
txtOtvets.Text = "з"
Case "["
txtOtvets.Text = "х"
Case "]"
txtOtvets.Text = "ъ"
Case "a"
txtOtvets.Text = "ф"
Case "s"
txtOtvets.Text = "ы"
Case "d"
txtOtvets.Text = "в"
Case "f"
txtOtvets.Text = "а"
Case "g"
txtOtvets.Text = "п"
Case "h"
txtOtvets.Text = "р"
Case "j"
txtOtvets.Text = "о"
Case "k"
txtOtvets.Text = "л"
Case "l"
txtOtvets.Text = "д"
Case ";"
txtOtvets.Text = "ж"
Case "'"
txtOtvets.Text = "э"
Case "z"
txtOtvets.Text = "я"
Case "x"
txtOtvets.Text = "ч"
Case "c"
txtOtvets.Text = "с"
Case "v"
txtOtvets.Text = "м"
Case "b"
txtOtvets.Text = "и"
Case "n"
txtOtvets.Text = "т"
Case "m"
txtOtvets.Text = "ь"
Case ","
txtOtvets.Text = "б"
Case "."
txtOtvets.Text = "ю"
Case Else
txtOtvets.Text = ""
End Select
'---перевод курсора на нужную позицию
txtOtvets.SelectionStart = 1
End If
End Sub
Каждую введенную букву меняем на букву из другой раскладки, а за тем переносим каретку ввода после замененной буквы.
На сегодня это все, если у вас остались вопросы, смело задавайте их в комментариях.
Смотреть видео
В начало
|