vb.net - InputLanguage 无法正常工作
问题描述
我想自动更改键盘布局,并在 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
附加材料
推荐阅读
- c# - 从另一个程序接收 JSON 编码信息到我的 GUI
- javascript - Google Firebase,注册和登录错误警报
- php - 使用 sqlsrv 调用具有多个结果集的存储过程 - 没有错误接收
- javascript - 如何禁止在移动设备上使用网站
- sed - 如何删除 sed 地址范围最后一行中的逗号?
- batch-file - 批处理:使用特定的管道分隔符将值拆分为单独的行
- django - Django 子查询每家公司的平均员工工资
- sql - 将删除的记录移动到 SQL 中的另一个表
- flutter - 无法在 StatefulWidget 中进行排序
- python - 贪心算法无法正常运行