我在 JAVA 应用程序中工作,这需要 - 在单独的 txt 文件中获取用户按下的所有键。 - 在应用程序最小化时在后台获取 key 。
我不知道如何做到这一点,目前我正在按照代码工作。
public class KeyChecker1 extends JFrame
{
public static JLabel keyLabel = new JLabel("Hit any key");
public KeyChecker1()
{
super("Hit a Key");
KeyMonitor1 monitor = new KeyMonitor1(this);
addKeyListener(monitor);
setFocusable(true);
setVisible(true);
}
public static void main(String[] arguments)
{
new KeyChecker1();
}
}
class KeyMonitor1 extends KeyAdapter
{
KeyChecker1 display;
public static Thread t1key, t2;
KeyMonitor1(KeyChecker1 display)
{
this.display = display;
}
public void keyPressed(final KeyEvent event)
{
t1key = new Thread()
{
@Override
public void run()
{
try
{
boolean caps_lock = Toolkit.getDefaultToolkit().getLockingKeyState(KeyEvent.VK_CAPS_LOCK);
switch (event.getKeyCode())
{
case KeyEvent.VK_F1:
System.out.print("[F1]");
break;
case KeyEvent.VK_F2:
System.out.print("[F2]");
break;
case KeyEvent.VK_F3:
System.out.print("[F3]");
break;
case KeyEvent.VK_F4:
System.out.print("[F4]");
break;
case KeyEvent.VK_F5:
System.out.print("[F5]");
break;
case KeyEvent.VK_F6:
System.out.print("[F6]");
break;
case KeyEvent.VK_F7:
System.out.print("[F7]");
break;
case KeyEvent.VK_F8:
System.out.print("[F8]");
break;
case KeyEvent.VK_F9:
System.out.print("[F9]");
break;
case KeyEvent.VK_F10:
System.out.print("[F10]");
break;
.
.
.
}
}
catch (Exception ex)
{
Logger.getLogger(Dashboard.class.getName()).log(Level.SEVERE, null, ex);
}
}
};
t1key.start();
}
}
它在应用程序运行时运行良好,但我想在应用程序在后台(最小化)运行时运行相同的功能。
请帮助我。
提前致谢。
最佳答案
要回答这个问题,使用纯 Java 是不可能的。您必须使用特定于操作系统的 API(例如臭名昭著的 Windows 上的 SetWindowsHookEx)实现平台相关的键盘和鼠标 Hook ,然后将 native 平台相关数据转换回 Java 可以理解的内容。为了简化这个过程,我创建了 https://github.com/kwhat/jnativehook作为我研究生论文的一部分,因为我需要以可移植的方式为我的本科论文解决这个问题。
关于java - JAVA中最小化应用程序时如何在后台使用键盘键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22293175/