400分!!!!vb 关于获取输入法的问题

来源:百度知道 编辑:UC知道 时间:2024/05/22 15:37:23
我要获取系统活动窗口的输入法,但下面代码只能获取本程序的,请帮改下,有劳了。。问题原址:http://zhidao.baidu.com/question/122102430.html
回答好了400分

'′以下的API函数用于输入法操作
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 Declare Function GetKeyboardLayoutName Lib "us

我的信箱发给你了请回复,好发给 你,

楼主很厉害啊~~~~~~
说这个问题:问题就是Windows本身就允许不同的程序同时有不同的输入法。比如记事本中用搜狗,又打开一个Word,换成智能ABC(此时记事本在后台)。只要活动窗口切换回记事本,输入法就会变成搜狗拼音;再切换到Word,输入法就会变成智能ABC……
所以我想应该先让被探测的程序成为活动窗口,再调用GetKeyboardLayout。那么在Command1_Click之后应该有个延时什么的,便于切换窗口。因为在点击Command1时,活动窗口就变成了VB程序。
不知对你有没有帮助?

已经帮你解决了

很简单,先用GetForegroundWindow获取当前活动窗口的句柄,再用GetWindowThreadProcessID获得当前窗口的线程ID,把它传递给GetKeyboardLayout就可以获得当前窗口的输入法ID,然后再转换成字符串就可以了。

在一个新form上放置一个Timer和一个List控件,然后使用下面的代码即可每2秒钟获得一次当前窗口标题和当前窗口的输入法:

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 GetKeyboardLayout Lib "user32" (ByVal dwLayout As Long) As Long
Private Declare Function GetKeyboardLayoutName Lib "user32" Alias "GetKe