如何在Java中检查启动时按下的键
题
我正在尝试编写一个在程序首次启动时弹出的分辨率选择对话框。为了防止用户厌烦,我想实现相当标准的功能,您可以使用复选框关闭该对话框,但在启动时按住alt键将其取回。
不幸的是,没有明显的方法可以询问java当前是否按下了 。您只能通过KeyListener注册以通知新的按键操作,但如果按键在应用程序启动之前启动,则无效。
解决方案
public class LockingKeyDemo {
static Toolkit kit = Toolkit.getDefaultToolkit();
public static void main(String[] args) {
System.out.println("caps lock2 = "
+ kit.getLockingKeyState(KeyEvent.VK_CAPS_LOCK));
}
}
其他提示
import java.awt.*;
import java.awt.event.*;
import javax.swing.JFrame;
public class LockingKeyDemo {
static Toolkit kit = Toolkit.getDefaultToolkit();
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.addWindowListener(new WindowAdapter() {
public void windowActivated(WindowEvent e) {
System.out.println("caps lock1 = "
+ kit.getLockingKeyState(KeyEvent.VK_CAPS_LOCK));
try {
Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyRelease(KeyEvent.VK_CONTROL);
} catch (Exception e2) {
System.out.println(e2);
}
System.out.println("caps lock2 = "
+ kit.getLockingKeyState(KeyEvent.VK_CAPS_LOCK));
}
});
frame.addKeyListener(new KeyAdapter() {
public void keyReleased(KeyEvent e) {
System.out.println("caps lock3 = "
+ kit.getLockingKeyState(KeyEvent.VK_CAPS_LOCK));
}
});
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(200, 200);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
有两种类型的按键检测:基于事件和轮询。如果您在启动时轮询键盘以获取 KEY_PRESSED
(通过带有 sleep.thread(timeInMs)
的循环,不断检查您的密钥是否已关闭),那么您可以检测它是否是已经在启动时按下了。
最初的问题似乎没有得到解答。建议的方法确定锁定键状态,如CapsLock,ScrollLock等。因此它不适用于 Alt 按下状态。
请考虑以下代码:
<代码> com.sun.jna.platform.KeyboardUtils.isPressed(java.awt.event.KeyEvent.VK_ALT); 代码>
唯一的问题是这个类是Sun的内部JDK类,并且不太可能在任何其他JVM中可用。取决于您的项目,它可能是也可能是不可接受的。
在内部,它调用Windows上的User32.DLL:
<代码> User32.INSTANCE.GetAsyncKeyState(...)代码>
我对Java(主要是C#中的代码)知之甚少,但是如果用C语言编写一个小的加载程序,然后用一些参数启动你的Java应用程序(比如某个键是否关闭)怎么样? ?
所以看来你可以做到这一点,但仅限于封锁等。因此,为了这个目的,我已经转而使用大写锁定。不完美,但还行。
不隶属于 StackOverflow