How do I check if the caps lock key is pressed?

前端 未结 3 1799
终归单人心
终归单人心 2020-12-07 01:24

Alright, before this gets flagged as a possible duplicate, I\'ve already tried the following code:

Toolkit.getDefaultToolkit().getLockingKeyState(KeyEvent.VK         


        
3条回答
  •  孤城傲影
    2020-12-07 02:14

    Looks like this was always broken or at least since Java 1.3 (see Bug 4414164).

    Not sure for other platforms, but for Windows I can say this: State change of Caps Lock can be detected, but only if your awt client has the focus. However, there is this workaround which works for me:

    boolean isCapsLockOn() {
        java.awt.Robot robot = new java.awt.Robot();
        robot.keyPress(KeyEvent.VK_CONTROL);
        robot.keyRelease(KeyEvent.VK_CONTROL);
        return Toolkit.getDefaultToolkit().getLockingKeyState(KeyEvent.VK_CAPS_LOCK);  
    }
    

    Contraint: Your awt app must have the focus before calling isCapsLockOn.

    Note: Your robot might press any other key which is not harmful to your app. Might depend on your use case.

提交回复
热议问题