java/c++如何获取windows平台上的全局键盘焦点 20C

我想实现一个输入法,那么我必须获取到屏幕上获取到焦点的控件,并且获取到光标的位置。光标的坐标位置用来显示输入法的选项窗口。其次是我如何获取到键盘到控件之间的数据流。因为我要获取键盘按下的字母数据,再根据算法转换成中文,然后再写到控件里去。这样就实现了输入法的一个过程。就这个过程我找了很久也没找到如何实现。 我是搞java的,在java里面的api中我没找得到。如果有懂的请指点,如果是c++才能实现,或需要外调,也希望指点一二。

3个回答

获取键盘按下的字母,OnKeyLstener

获取到屏幕上获取到焦点 getCursor

Esc_Tab_End
喜欢原味奶茶 这个只是针对java自己的组件有效啊。非java组件呢?比如你要在csdn上进行评论,那么网页上就有一个输入框,该输入框的光标的坐标,如何获取
大约 2 年之前 回复

首先 很遗憾的告诉你,java 原生不支持获取窗口句柄 鼠标位置 监听按键 等。需要借助 jni 来调用 C 语言完成。 输入法使用java 来实现一定是非常糟糕的。
IME (Input Method Editor) 输入法是正规路线。想用java 那应该就是浮窗了。 问题在于 触发调用的时候。 通过C 语言可以实现 获取当前 焦点的窗口。也可以获取鼠标的位置,也可以通过 按键钩子 来获取键盘上每一个按键事件。 但是你不知何时调用。

Drizzly_
Drizzly_ 回复喜欢原味奶茶: 多多输入法就是个IME的例子,其中你说小众语法,仅仅是他算法的问题。他有在实现云输入与拼音输入等智能输入方面
大约 2 年之前 回复
Esc_Tab_End
喜欢原味奶茶 回复Drizzly_: 多多旨在做一些小语种的输入法,通过文字与编码。但是我不是做那种,我想做的是智能输入法,当然还有其他功能。算法这个东西,网上可以找到参考。但是如何获取信道,如何获取光标位置,找了很久没找到。有没有兴趣一起研究一下输入法呢?
大约 2 年之前 回复
Drizzly_
Drizzly_ 回复喜欢原味奶茶: 如你所说,键盘钩子是不区分是否是输入状态的。还是需要用IME 接口才可以,做输入法推荐一个 “多多输入法生成器” 这个人做输入法生成器做了 8-9年了 百度可以找到官网
大约 2 年之前 回复
Esc_Tab_End
喜欢原味奶茶 回复Drizzly_: 感谢您提供的链接,我先看看。希望能有帮助
大约 2 年之前 回复
Esc_Tab_End
喜欢原味奶茶 我已经研究过了,全局键盘钩子。早期的输入法是使用键盘是就调用,比如在玩游戏的时候,明明是操作游戏,但是竟然打字了。现在的输入法比较智能,只有在有光标的时候才会输入。也就是想问如何操作的,我看了IME的一些文章,写得太抽象了,一点都没有头绪。而且我不是太懂c++。现在java这边有一个jna的api,可以调用windos底层的动态库。但是我不知道具体哪个接口。如果您清楚一二,望指点
大约 2 年之前 回复
Drizzly_
Drizzly_ 输入法可以参考 https://www.zhihu.com/question/20720365,java用jna调用C语言绑定键盘钩子还是比较容易的。
大约 2 年之前 回复

GetGUIThreadInfo

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问