用Java获取当前的Windows键盘布局

时间:2015-01-30 07:49:42

标签: java windows locale keyboard-layout

在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();

1 个答案:

答案 0 :(得分:0)

AFAIK你必须写一些JNI才能得到它。 Windows API中有两个感兴趣的功能:

  • GetKeyboardLayout:会给出一个DWORD,其下限标识语言和子语言 - >如果您只是在有限的已知布局列表之间切换,则使用
  • GetKeyboardLayoutName:将(几乎)直接给你一个空终止的字符串 - 从文档中提取:

    语法

    BOOL GetKeyboardLayoutName(LPTSTR pwszKLID);
    

    参数

pwszKLID [out]指向缓冲区(长度至少为KL_NAMELENGTH个字符)的指针,它接收输入语言环境标识符的名称,包括终止空字符...