鱼C论坛

 找回密码
 立即注册
查看: 3344|回复: 3

[已解决]屏蔽输入法问题。

[复制链接]
发表于 2016-11-16 12:02:24 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

查了一下

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

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

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

返回值是0.

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

@无符号整形 @小甲鱼 @不二如是 @~风介~
最佳答案
2016-11-16 12:17:35
DEMO:

  1. HIMC hIMC;

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

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

  5.    ImmAssociateContext(hWnd, hIMC); // If you want to enable
  6.                                     // IME again, then you can
  7.                                     // use the previous stored IME
  8.                                     // context(hIMC)
  9.                                     // to restore IME.
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-11-16 12:17:35 | 显示全部楼层    本楼为最佳答案   
DEMO:

  1. HIMC hIMC;

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

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

  5.    ImmAssociateContext(hWnd, hIMC); // If you want to enable
  6.                                     // IME again, then you can
  7.                                     // use the previous stored IME
  8.                                     // context(hIMC)
  9.                                     // to restore IME.
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-16 13:00:52 | 显示全部楼层

我也是这么用的,小甲鱼老师,
只不过我是在python里。
  1. from ctypes import *

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

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


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

查看imc的值是0。

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


还是0.

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


结果还是0.

之后查到另一种获取输入法布局的。
  1. user32.GetKeyboardLayout(记事本线程ID)
复制代码

然后返回值还是0。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-18 09:26:24 | 显示全部楼层
你需要这个。GetLastError()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 21:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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