Korzystanie poniższy kod:Odzyskiwanie aktualny stan CapsLock w Javie
Toolkit.getDefaultToolkit().getLockingKeyState(KeyEvent.VK_CAPS_LOCK)
Niestety, tylko zwraca false.
Zgodnie docs, to powinno działać: http://docs.oracle.com/javase/8/docs/api/java/awt/Toolkit.html#getLockingKeyState-int-
Runnable przykład:
import java.awt.Toolkit;
import java.awt.event.KeyEvent;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class Foo {
public static void main(String[] args) {
ExecutorService executorService = Executors.newFixedThreadPool(1);
executorService.execute(new Runnable() {
public void run() {
while(true) {
try{ Thread.sleep(250); }catch(Exception ignored) { }
System.out.println("Capslock state: " + Toolkit.getDefaultToolkit().getLockingKeyState(KeyEvent.VK_CAPS_LOCK));
}
}
});
executorService.shutdown();
}
}
Należy dodać, że używam Java SE 1.8 na Windows i że mój klucz Caplock działa dobrze
Zrzut ekranu wyjścia konsoli:
Jest [raport bug] (http://bugs.java.com/bugdatabase/view_bug.do?bug_id=4414164) w tej sprawie, który wyjaśnia, że w systemie Windows, gdy aplikacja ma ramkę ze skupieniem, ta metoda zadziała; w przeciwnym razie zwróci tylko tę wartość, która była podczas wykonywania programu. – Vulcan
@Vulcan, w tym przypadku jest to niepoprawne - ponieważ zwraca błąd, niezależnie od stanu początkowego. To również nie odpowiada na pytanie, ponieważ (isPressed) z JNA KeyUtils nie jest rozwiązaniem do sprawdzania zablokowanego klucza. – Hobbyist