如何在JAVA中最小化应用程序时在后台使用键盘键

时间:2014-03-10 06:09:36

标签: java multithreading background keyboard key

我正在使用JAVA应用程序 - 获取用户在单独的txt文件中按下的所有键。 - 当应用程序最小化时,在后台获取密钥。

我目前不知道如何执行此操作我正在使用以下代码。

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();
    }
}

它在应用程序运行时运行良好但我希望在应用程序在后台运行时运行相同的功能(最小化)。

请帮助我。

提前致谢。

1 个答案:

答案 0 :(得分:0)

要回答这个问题,使用纯Java是不可能的。您必须使用特定于操作系统的API(如Windows上臭名昭着的SetWindowsHookEx)实现与平台相关的键盘和鼠标挂钩,然后将本机平台相关数据转换回Java可以理解的内容。为了简化这个过程,我创建了https://github.com/kwhat/jnativehook作为我毕业论文的一部分,因为我需要以便携的方式为我的本科毕业论文解决这个问题。