【问题标题】:Using java Robot when an another app is active当另一个应用程序处于活动状态时使用 java Robot
【发布时间】:2018-02-05 02:15:06
【问题描述】:

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

            }

【问题讨论】:

  • 看到这个帖子:stackoverflow.com/questions/800747
  • " 但是,即使我专注于另一个应用程序,也必须这样做" 听起来像是键盘记录器。为什么在其他应用程序中输入的文本应该是这个(你的)应用程序的任何业务?
  • @AndrewThompson 听起来更像是游戏助手。多年前,我编写了一个程序,使用 Robot 发送击键来扭曲我在黑暗时代卡米洛特的圣骑士的圣歌。

标签: java swing awtrobot


【解决方案1】:

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

附:使用的类的文档在您要下载的 jnativehook 文件中

【讨论】:

  • 仅供参考,>=JNativeHook-2.0.0 也支持回发原生事件,因此您无需转换为 Robots 类可以理解的内容。
猜你喜欢
  • 2011-09-19
  • 1970-01-01
  • 1970-01-01
  • 2011-06-11
  • 1970-01-01
  • 2019-07-04
  • 2016-02-04
  • 1970-01-01
  • 2021-10-02
相关资源
最近更新 更多