wei_Y 发表于 2016-11-16 12:02:24

屏蔽输入法问题。

想屏蔽某个窗口的输入法。

查了一下

可以用ImmAssociateContext(窗口句柄, NULL)这个函数,

可是我怎么用了之后还是能用输入法在那个窗口里打字。

调用的 C:\\Windows\System下的 imm32.dll,

返回值是0.

或者说,我输入一个字符,然后怎么判断是不是调用了输入法。

@无符号整形 @小甲鱼 @不二如是 @~风介~

小甲鱼 发表于 2016-11-16 12:17:35

DEMO:

HIMC hIMC;

hIMC = ImmAssociateContext(hWnd, NULL);   // It makes IME disable for
                                             // hWnd window.

   // Then you can do whatever you want without IME.

   ImmAssociateContext(hWnd, hIMC); // If you want to enable
                                    // IME again, then you can
                                    // use the previous stored IME
                                    // context(hIMC)
                                    // to restore IME.

wei_Y 发表于 2016-11-16 13:00:52

小甲鱼 发表于 2016-11-16 12:17
DEMO:

{:10_250:}我也是这么用的,小甲鱼老师,
只不过我是在python里。
from ctypes import *

imm32 = windll.LoadLibrary(r'c:\\Windows\System32\imm32.dll')

imc = imm32.ImmAssociateContent(一个记事本的窗口句柄, None);

然后我还是能在那个记事本里打字。。

查看imc的值是0。

然后又试了试imc = imm32.ImmAssociateContent(一个记事本的窗口句柄, 0);

还是0.

然后我想可能是要先激活输入法才会捕获,
time.sleep(3)
imc = imm32.ImmAssociateContent(一个记事本的窗口句柄, None);

结果还是0.

之后查到另一种获取输入法布局的。
user32.GetKeyboardLayout(记事本线程ID)
然后返回值还是0。

freeparty 发表于 2016-11-18 09:26:24

你需要这个。GetLastError()
页: [1]
查看完整版本: 屏蔽输入法问题。