使用vb.net代码选择键盘布局

时间:2012-02-26 16:32:41

标签: vb.net

我已经为乌尔都语安装了Phoenetic Key board,我可以从控制面板中选择>语言>键盘 我可以使用我的vb.net代码添加语言和选择键盘吗?

由于

2 个答案:

答案 0 :(得分:1)

InputLanguage.CurrentInputLanguage属性可让您切换键盘布局。不太确定它可以处理单一语言的多种布局,但我真的不知道“Phoenetic Key board”究竟意味着什么。底层的Windows api函数是LoadKeyboardLayout()和ActivateKeyboardLayout(),你可以对它们进行异或。 GetKeyboardLayoutList()获取已安装布局的列表,您可能需要使用GetKeyboardLayoutName()来获取布局的描述。还包含InputLanguage类。

您通常会将其留给用户选择键盘布局,强制您的偏好对可用性非常不利。语言栏很容易。

答案 1 :(得分:0)

您可以通过以下方式更改应用程序输入语言:

InputLanguage.CurrentInputLanguage = InputLanguage.FromCulture(New System.Globalization.CultureInfo("ZH-CN"))

但如果您没有安装所需的InputLanguage,则可以使用windows api从代码临时安装您的文化输入语言:

<DllImport("user32.dll")> _
Private Shared Function UnloadKeyboardLayout(hkl As IntPtr) As Boolean
End Function
<DllImport("user32.dll")> _
Private Shared Function LoadKeyboardLayout(pwszKLID As String, Flags As UInteger) As IntPtr
End Function

Public Class KeyboardHolder
    Implements IDisposable
    Private ReadOnly pointer As IntPtr
    Public Sub New(klid As Integer)
        pointer = LoadKeyboardLayout(klid.ToString("X8"), 1)
    End Sub
    Public Sub New(culture As CultureInfo)
        Me.New(culture.KeyboardLayoutId)
    End Sub
    Public Sub Dispose()
        UnloadKeyboardLayout(pointer)
        GC.SuppressFinalize(Me)
    End Sub
    Protected Overrides Sub Finalize()
        Try
            UnloadKeyboardLayout(pointer)
        Finally
            MyBase.Finalize()
        End Try
    End Sub
End Class

并以这种方式使用它:

' install keyboard layout temporary
Dim keyboard As New KeyboardHolder(New System.Globalization.CultureInfo("ZH-CN"))

' after finishing what you want remove temporary added keyboard layout:
keyboard.Dispose()