IME.bas
上传用户:hyb6888
上传日期:2016-01-24
资源大小:5186k
文件大小:3k
源码类别:

输入法编程

开发平台:

Visual C++

  1. Attribute VB_Name = "IME"
  2. Private kln As String
  3. Public hKBAstr(24) As String, hCurKBDLayout As Long
  4. Public hKBA(24) As Long
  5. Sub setIME(ListIndex As Long)
  6.     Dim tt As Long
  7.     
  8.     If ListIndex = -1 Then '如果用户尚未选择输入法,显示出错信息
  9.     MsgBox "请先选择一个输入法"
  10.     Exit Sub
  11.     End If
  12.     '改变输入法顺序
  13.     kln = String(8, 0)
  14.     tt = hKBA(ListIndex)
  15.     If (tt = 0) Then
  16.         tt = LoadKeyboardLayout("00000409", KLF_REORDER)
  17.         ActivateKeyboardLayout tt, 0
  18.     Else
  19.         ActivateKeyboardLayout tt, 0 '则处如果TT为0就切换输入
  20.     End If
  21.     res = GetKeyboardLayoutName(kln)
  22.     res = LoadKeyboardLayout(kln, KLF_REORDER)
  23. End Sub
  24.     
  25.  Sub StartmyIME()
  26.     Dim Buff As String, BuffLen As Long
  27.     Dim RetStr As String, hKB(24) As Long
  28.     Dim RetCount As Long
  29.     Dim NoOfKBDLayout As Long, i As Long, j As Long
  30.     Dim tt
  31.     tt = 0
  32.     Buff = String(255, 0)
  33.     hCurKBDLayout = GetKeyboardLayout(0)  '取得目前的输入法
  34.     NoOfKBDLayout = GetKeyboardLayoutList(25, hKB(0)) '取得所有输入法
  35.     
  36.     For i = 1 To NoOfKBDLayout
  37.     If ImmIsIME(hKB(i)) = 1 Then  '中文输入法
  38.         BuffLen = 255
  39.         RetCount = ImmGetDescription(hKB(i), Buff, BuffLen)
  40.         RetStr = Left(Buff, RetCount)
  41.         If (Len(RetStr)) Then
  42.            hKBA(tt) = hKB(i)
  43.            hKBAstr(tt) = RetStr
  44.            tt = tt + 1
  45.         End If
  46.     Else
  47.         RetStr = "English (American)" '英文输入法
  48.         hKBAstr(tt) = RetStr
  49.     End If
  50.    Next
  51.     
  52.     ActivateKeyboardLayout hCurKBDLayout, 0 '恢复原来的输入法
  53. End Sub
  54. Function MyCutStr(CutString As String, CutChar As String) As String
  55. '用给定的字符串把字符串切成两半,并半部返回,后半部放入第一个参数中
  56. Dim mypos As Integer
  57. If Len(CutString) > 2 Then
  58. mypos = InStr(1, CutString, CutChar, 1)
  59. If mypos = 0 Then
  60. CutString = "1"
  61. Else
  62. MyCutStr = Left(CutString, mypos - 1)
  63. CutString = Right(CutString, Len(CutString) - mypos)
  64. End If
  65. Else
  66. CutString = "1"
  67. End If
  68. If CutString = "" Then
  69. CutString = "1"
  70. End If
  71. End Function
  72. Function CodeToChinese(KeyAscii As Integer)
  73. Dim bb(10) As Byte
  74. Dim ret As String
  75.     If (KeyAscii >= 0) Then
  76.        ret = Chr(KeyAscii)
  77.     Else
  78.         f = Hex(KeyAscii)
  79.         If Len(f) = 4 Then
  80.                 bb(0) = CInt("&H" + Mid(f, 1, 2))
  81.                 bb(1) = CInt("&H" + Mid(f, 3, 2))
  82.                 
  83.                 ret = StrConv(bb, vbUnicode)
  84.                 ret = Mid(ret, 1, 1)
  85.         End If
  86.         ret = ret
  87.     End If
  88.     
  89. CodeToChinese = ret
  90.     
  91. End Function