在Windows上我希望得到我在Windows上的语言栏中看到的代码。我需要在任何给定的时间获得当前的键盘布局。
如果我在一个帖子中使用它:
InputContext is = InputContext.getInstance();
System.out.println(is.getLocale());
我将获得程序启动时处于活动状态的布局。但是当我按下win +空格键或alt + shift并将布局更改为其他内容时,该主题将继续输出以前的语言。
我没有找到任何反映系统属性键盘布局的参数。
线程示例:
Thread t = new Thread() {
@Override
public void run() {
while(true) {
InputContext is = InputContext.getInstance();
System.out.println(is.getLocale());
Properties p = System.getProperties();
System.out.println(System.getProperty("user.language"));
try {
sleep(1000);
} catch (InterruptedException ex) {
Logger.getLogger(InputContextTest.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
};
t.run();
答案 0 :(得分:0)
AFAIK你必须写一些JNI才能得到它。 Windows API中有两个感兴趣的功能:
GetKeyboardLayout
:会给出一个DWORD,其下限标识语言和子语言 - >如果您只是在有限的已知布局列表之间切换,则使用 GetKeyboardLayoutName
:将(几乎)直接给你一个空终止的字符串 - 从文档中提取:
语法
BOOL GetKeyboardLayoutName(LPTSTR pwszKLID);
参数
pwszKLID
[out]指向缓冲区(长度至少为KL_NAMELENGTH
个字符)的指针,它接收输入语言环境标识符的名称,包括终止空字符...