2012-02-26 2 views

답변

1

InputLanguage.CurrentInputLanguage 속성을 사용하면 키보드 레이아웃을 전환 할 수 있습니다. 하나의 언어에 대해 여러 레이아웃을 처리 할 수는 없지만 실제로 "Phoenetic Key board"가 실제로 무엇인지는 알지 못합니다. 기본 Windows API 함수는 LoadKeyboardLayout() 및 ActivateKeyboardLayout()입니다.이 API 함수는 pinvoke 할 수 있습니다. GetKeyboardLayoutList()를 사용하여 설치된 레이아웃 목록을 가져 오려면 GetKeyboardLayoutName()을 사용하여 레이아웃에 대한 설명을 얻습니다. 또한 InputLanguage 클래스에서 다룹니다.

키보드 레이아웃을 선택하려면 일반적으로 사용자에게 맡겨야합니다. 사용자 환경 설정이 사용성에 상당히 적대적입니다. 언어 표시 줄로하기 쉽습니다.

0

당신은이 방법으로 응용 프로그램에 입력 언어를 변경할 수 있습니다

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

을하지만 당신은 윈도우 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() 
관련 문제