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

标签 java swing awtrobot

我想使用一个简单的 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);

            }

最佳答案

你应该尝试jnativehook

使用示例

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 的 native 方法,但好处是,它很容易被 java 程序员阅读,而不是 c#、c++、c 等程序员。这个类库将监听任何应用程序上按下的按键(它是全局键盘监听器),如果按下某个键则执行 Robot 类方法(例如 mousePress() 等)。

附注所使用的类的文档位于您要下载的 jnativehook 文件中

关于java - 当另一个应用程序处于 Activity 状态时使用 java Robot,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45908333/

相关文章:

PC 锁定时 Java 机器人不工作

java - 为什么它总是给出调用整数参数方法而不是短参数方法

java - 如何将参数传递给 ScheduledMethodRunnable 方法

java - Android 6.0 : java.net.UnknownHostException : Unable to resolve host. 在 Android 7.0 中工作正常

Java JLabel 不会更新

java - 更改 JFrame 窗口按钮

java - 如何在 JFrame 内的 JPanel 中正确重画

Java - 突破 JPanel 的限制

java - 通过循环列表从 JPA 元模型获取 SingularAttribute

java - 用于移动鼠标光标(数字键盘)的键盘快捷键,即 a、6、2、8... 不适用于 java 机器人类