InputLanguage не работает должным образом
Я хотел бы автоматически изменить раскладку клавиатуры и создать простое консольное приложение в Visual Basic, добавив следующее:
InputLanguage.CurrentInputLanguage = InputLanguage.FromCulture(New CultureInfo("ru"))
Но когда я компилирую этот код, он не меняет раскладку клавиатуры, поэтому он остается таким, каким он был до компиляции. Что я делаю неправильно?
1 ответ
Есть три способа изменить язык клавиатуры:
Использование свойства
.CurrentInputLanguage
(только если установлен язык ввода)InputLanguage.CurrentInputLanguage = InputLanguage.FromCulture(New CultureInfo("ru-RU"))
Использование свойства
.CurrentCulture
(только если установлен язык ввода)Dim culture = System.Globalization.CultureInfo.GetCultureInfo("ru-RU") Dim lang = InputLanguage.FromCulture(culture) If InputLanguage.InstalledInputLanguages.IndexOf(lang) >= 0 Then InputLanguage.CurrentInputLanguage = InputLanguage.InstalledInputLanguages(InputLanguage.InstalledInputLanguages.IndexOf(lang)) System.Threading.Thread.CurrentThread.CurrentCulture = culture End If
Использование функции winapi
.LoadKeyboardLayout
(медленно работает, даже если язык ввода не установлен)<DllImport("user32.dll")> Private Shared Function LoadKeyboardLayout(ByVal pwszKLID As String, ByVal Flags As UInteger) As IntPtr End Function LoadKeyboardLayout("00000419", 1)
дополнительный
Для проверки текущей культуры:
InputLanguage.CurrentInputLanguage.Culture.Name
Проверьте, установлен ли язык ввода:
InputLanguage.InstalledInputLanguages.IndexOf(InputLanguage.FromCulture(New CultureInfo("ru-RU"))
Переключиться на следующий идентификатор локали (раскладка клавиатуры):
Declare Function ActivateKeyboardLayout Lib "user32" (ByVal HKL As Integer, ByVal flags As Integer) As Integer
'switch keyboard layout to next
Sub SwitchKeyboardLayout()
Dim HKL_NEXT As Integer = 1
Dim dl As Integer = ActivateKeyboardLayout(HKL_NEXT, 0)
If dl = 0 Then MsgBox("Unsuccessful!")
End Sub
Дополнительные материалы