我想自动更改键盘布局,并在 Visual Basic 中创建一个简单的控制台应用程序,添加以下内容:
InputLanguage.CurrentInputLanguage = InputLanguage.FromCulture(New CultureInfo("ru"))
但是当我编译这段代码时,它不会改变键盘布局,所以它仍然是编译前的样子。我究竟做错了什么?
我想自动更改键盘布局,并在 Visual Basic 中创建一个简单的控制台应用程序,添加以下内容:
InputLanguage.CurrentInputLanguage = InputLanguage.FromCulture(New CultureInfo("ru"))
但是当我编译这段代码时,它不会改变键盘布局,所以它仍然是编译前的样子。我究竟做错了什么?
更改键盘语言的三种方法:
使用属性.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
附加材料