2012-02-26 28 views

回答

1

的InputLanguage.CurrentInputLanguage属性,可以切换键盘布局。不太确定它可以处理单一语言的多种布局,但我不知道“Phoenetic Key Board”的真正含义。底层的Windows API函数是LoadKeyboardLayout()和ActivateKeyboardLayout(),你可以把它们串起来。 GetKeyboardLayoutList()获取已安装布局的列表,您可能需要使用GetKeyboardLayoutName()来获取布局的描述。也由InputLanguage类覆盖。

通常情况下,用户可以选择键盘布局,迫使您的偏好对可用性非常不利。易于使用语言栏。

0

你可以改变你的应用程序的输入语言是这样的:

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

,但如果你不使用Windows API具有代码的临时所需InputLanguage安装,你可以安装你的文化输入语言:

<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()