java - 如何在 Java 中生成没有键码的键盘事件?

标签 java keyevent utf

我正在使用 Robot 类和 KeyEvent 键码来生成所有其他键事件并且它们工作正常,但我还需要 Hangul 键(切换韩语键盘)。显然 KeyEvent 没有这个键的键码,所以我被卡住了:(有没有办法生成这个韩语键事件? 有没有办法使用像 VK_HANGUL (0x15) 这样的 Windows 键码来代替 KeyEvent 键码?如果可能的话,改变所有的键码就不是问题了……或者以某种方式获取一次键事件并将其永久存储在某个地方并永远使用它……???

我想做的是创建一个包含数字、字母和韩语的屏幕键盘。点击一个图标,它会产生相应字母的按键事件,从而输入该字母。 (除了切换到韩语外,一切正常。)

能够生成 Hangul 键事件会很好,但如果这不可能,是否有关于如何实现此目标的任何建议? 也许我可以将每个韩文字母与键盘上相应的字母表绑定(bind)(例如,在既有英语又有韩语的传统键盘上,g 是 ㅎ)之类的,但是我该如何将它发送到其他应用程序?

抱歉,如果这个问题到处都是。我真的迷路了。

最佳答案

我找到了解决问题的方法。我使用 JNA 来生成键盘事件。

这里有一些代码,以备不时之需。

使用 JNA 和 User32.dll 中的 keybd_event 方法的基本内容:

import com.sun.jna.*;    
import com.sun.jna.Native;    
import com.sun.jna.platform.win32.User32;
import com.sun.jna.win32.StdCallLibrary;    
public interface User32jna extends User32 {
 User32jna INSTANCE = (User32jna) Native.loadLibrary("user32.dll",User32jna.class);
 public void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo);
}
User32jna u32 = User32jna.INSTANCE;

然后在需要生成按键事件的地方插入:

u32.keybd_event((byte) 0x15,(byte)0xF2,0,0);

0x15 和 0xF2 是我一直在寻找的韩语/英语切换键的虚拟键码和键盘扫描码,但是查找代码以找到您需要的任何键,然后替换它们,您几乎可以生成任何键事件。

你需要 jna.jar 和 platform.jar 才能工作。

关于java - 如何在 Java 中生成没有键码的键盘事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27407920/

相关文章:

JavaFX 8 - 如何在 HTMLEditor 上按下退格键?

utf-8 - UTF-16 有什么意义?

java - IntelliJ - 输入未转义的 UTF-8 非 ASCII 字符

android - 对于 Emacs,在 Android 中使用 CTRL 键的漫长旅程

java结果集和语句问题

Java 8 不兼容的类型

Java double 错误转换为 int

java - 需要有关关键事件的帮助

java - UTF 到 ASCII 的转换

java - 多行循环体什么时候不需要花括号?