ChangeIME -轉換輸入法

Private Declare Function GetKeyboardLayoutList Lib "user32" (ByVal nBuff As Long, lpList As Long) As Long
Private Declare Function ImmGetDescription Lib "imm32.dll" Alias "ImmGetDescriptionA" (ByVal HKL As Long, ByVal lpsz As String, ByVal uBufLen As Long) As Long
Private Declare Function ImmIsIME Lib "imm32.dll" (ByVal HKL As Long) As Long
Private Declare Function ActivateKeyboardLayout Lib "user32" (ByVal HKL As Long, ByVal Flags As Long) As Long

Private Function ChangeIME(ByVal Keyword As String) As Boolean
Dim IMEList() As Long
Dim ret As Long
Dim n As Integer
Dim i As Integer
Dim StrName As String
ChangeIME = False
n = GetKeyboardLayoutList(0, 0)
ReDim IMEList(n - 1) As Long
GetKeyboardLayoutList n, IMEList(0)
For i = 0 To n - 1
  If ImmIsIME(IMEList(i)) <> 0 Then
    StrName = String(255, 0)
    ret = ImmGetDescription(IMEList(i), StrName, 255)
    StrName = Left(StrName, ret)
    If InStr(StrName, Keyword) <> 0 Then
      ActivateKeyboardLayout IMEList(i), 0
      ChangeIME = True
      Exit For
    End If
  End If
Next i
End Function

使用範例:準備二個Command Button,貼上程式碼

Private Sub Command1_Click()
ChangeIME "倉頡" '改變輸入法為倉頡
End Sub

Private Sub Command2_Click()
ChangeIME "速成" '改變輸入法為速成
End Sub


上一頁