找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 4472|回复: 0

[其它源码] 取得目前所有的输入法

[复制链接]

1214

主题

352

回帖

11

精华

管理员

菜鸟

积分
93755

贡献奖关注奖人气王精英奖乐于助人勋章

发表于 2010-8-8 14:58:46 | 显示全部楼层 |阅读模式
取得目前所有的输入法
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 Declare Function GetKeyboardLayout Lib "user32" _
        (ByVal dwLayout As Long) As Long

Private Sub Form_Load()
Dim NoOfKBDLayout As Long, i As Long, j As Long
Dim hKB(24) As Long, BuffLen As Long
Dim Buff As String
Dim RetStr As String
Dim RetCount As Long
Buff = String(255, 0)
hCurKBDLayout = GetKeyboardLayout(0) '取得目前keyboard layout
NoOfKBDLayout = GetKeyboardLayoutList(25, hKB(0)) '取得所有输入法的hkeys
For i = 1 To NoOfKBDLayout
   If ImmIsIME(hKB(i - 1)) = 1 Then '中文输入法
      BuffLen = 255
      RetCount = ImmGetDescription(hKB(i - 1), Buff, BuffLen)
      RetStr = Left(Buff, RetCount)
      Combo1.AddItem RetStr
   Else
      RetStr = "English (American)"   '假设我们的win95非Ime 者只有English
      Combo1.AddItem RetStr           '若有其他者,要去取得keyboardLayout
   End If                             ' Name再去Registry中找其对应的名称
   If hKB(i - 1) = hCurKBDLayout Then
      Combo1.Text = RetStr
   End If
Next
ActivateKeyboardLayout hCurKBDLayout, 0 '恢复原来输入法
End Sub
End Function
【VB】QQ群:1422505加的请打上VB好友
【易语言】QQ群:9531809  或 177048
【FOXPRO】QQ群:6580324  或 33659603
【C/C++/VC】QQ群:3777552
【NiceBasic】QQ群:3703755
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

快速回复 返回顶部 返回列表