当另一个应用程序处于活动状态时使用java Robot

当另一个应用程序处于活动状态时使用java Robot,java,swing,awtrobot,Java,Swing,Awtrobot,我想使用一个简单的java机器人,当我点击Ctrl+Q时,它会键入一个文本。但是,即使我专注于另一个应用程序(例如游戏),也必须这样做。我的代码运行得很好,但它只有在JFrame处于焦点时才能运行 button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { Robot robot = null;

我想使用一个简单的java机器人,当我点击Ctrl+Q时,它会键入一个文本。但是,即使我专注于另一个应用程序(例如游戏),也必须这样做。我的代码运行得很好,但它只有在JFrame处于焦点时才能运行

button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                Robot robot = null;
                try {
                    robot = new Robot();
                } catch (AWTException e) {
                    e.printStackTrace();
                }

                robot.mouseMove(350, 150);
                robot.mousePress(InputEvent.BUTTON1_MASK);
                robot.mouseRelease(InputEvent.BUTTON1_MASK);


                robot.keyPress(KeyEvent.VK_T);
                robot.keyRelease(KeyEvent.VK_T);

                // Solution for different keyboard layouts (ALT values)
                try {
                    alt(KeyEvent.VK_NUMPAD0, KeyEvent.VK_NUMPAD0, KeyEvent.VK_NUMPAD4, KeyEvent.VK_NUMPAD7);
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

                robot.keyPress(KeyEvent.VK_Q);
                robot.keyRelease(KeyEvent.VK_Q);

            }
你应该试试这个

示例用法

import org.jnativehook.GlobalScreen;
import org.jnativehook.NativeHookException;
import org.jnativehook.keyboard.NativeKeyEvent;
import org.jnativehook.keyboard.NativeKeyListener;
import java.util.logging.*;
import java.awt.Robot;
import java.awt.event.KeyEvent;
import java.awt.event.InputEvent;
    public class Example implements NativeKeyListener
    {
       public void nativeKeyPressed(NativeKeyEvent e)
       {
           if(NativeKeyEvent.getKeyText(e.getKeyCode()).equals("A"))
           {
            Robot bot = new Robot();
            bot.keyPress(KeyEvent.VK_A);
           }
       }
       public void nativeKeyReleased(NativeKeyEvent e)
       {


       }
        public void nativeKeyTyped(NativeKeyEvent e)
        {

        }
        public static void main(String[] args)
        {
           Example ex = new Example();
            try
            {
               GlobalScreen.registerNativeHook();
               Logger logger = 
               Logger.getLogger(GlobalScreen.class.getPackage().getName());
               logger.setLevel(Level.OFF);
            }
            catch(NativeHookException eb)
            {
             System.out.println(eb.getMessage());

             }
             GlobalScreen.addNativeKeyListener(ex);
}

    }
<>这个代码使用Windows的原生方法,但它是一个java程序员容易读的,不是C++、C++、C等程序员的。这个类库将侦听任何应用程序上按下的键(它是一个全局键盘监听器),如果某个键被按下,然后执行机器人类方法(例如MouSpress())。
另外,你将要下载的jnativehook文件中包含了所使用的类的文档。参见这篇文章:“但即使我专注于另一个应用程序,也必须这样做”听起来像是一个键盘记录者的素质。为什么在其他应用程序中键入的文本与此(您的)应用程序有任何关系?@AndrewThompson听起来更像一个游戏助手。几年前,我编写了一个程序,使用
Robot
在黑暗时代的Camelot.FYI,>=JNativeHook-2.0.0也支持发回本地事件,因此您不需要转换为Robots类可以理解的内容。