gpt4 book ai didi

java - 无法捕获全局热键(不是基于窗口的应用程序)

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:41:58 25 4
gpt4 key购买 nike

我试图在不使用像 JFrame 这样的任何窗口的情况下全局捕获一些键盘事件,它应该是控制台应用程序或服务(恶魔)。这是我的代码:

class Main extends Thread {
public void run() {
AWTEventListener listener = new AWTEventListener() {
@Override
public void eventDispatched(AWTEvent event) {
try {
if (event instanceof KeyEvent) {
KeyEvent evt = (KeyEvent) event;
if (evt.getID() == KeyEvent.KEY_PRESSED &&
evt.getModifiers() == KeyEvent.CTRL_MASK &&
evt.getKeyCode() == KeyEvent.VK_F) {
System.out.println("Ctrl+F is pressed!");
}
}

} catch (Exception e) {
e.printStackTrace();
}
}
};

Toolkit.getDefaultToolkit().addAWTEventListener(listener, AWTEvent.KEY_EVENT_MASK);
System.out.println("Listening to hotkeys...");
while (true) {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}
}
}

public static void main(String[] args) {
Main b = new Main();
b.start();
}
}

但是,当我启动它时,它除了在我按下 Ctrl+F 时打印“Listening to hotkeys...”之外什么都不做。即使我将焦点放在其他应用程序或桌面上,结果仍然相同。

我哪里做错了?

最佳答案

类主要扩展线程{ 公共(public)无效运行(){

    AWTEventListener listener = new AWTEventListener() {
@Override
public void eventDispatched(AWTEvent event) {
try {
if (event instanceof KeyEvent) {
KeyEvent evt = (KeyEvent) event;
if (evt.getID() == KeyEvent.KEY_PRESSED &&
evt.getModifiers() == KeyEvent.CTRL_MASK &&
evt.getKeyCode() == KeyEvent.VK_F) {
System.out.println("Ctrl+F is pressed!");
}
}

} catch (Exception e) {
e.printStackTrace();
}
}
};
Toolkit.getDefaultToolkit().addAWTEventListener(listener, AWTEvent.KEY_EVENT_MASK|AWTEvent.ACTION_EVENT_MASK);


}


public static void main(String[] args) {
new JFrame("").setVisible(true);
Main b = new Main();
b.start();
}

}

这是有效的。您不能像在程序中使用的那样使用 while 循环。

关于java - 无法捕获全局热键(不是基于窗口的应用程序),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20136715/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com