标签: awtrobot

在Java中跟踪OS级窗口事件

我需要能够跟踪用户与其计算机上运行的不同应用程序进行交互的程度.对我来说似乎合情合理的是用时间戳记录窗口焦点事件的日志,这些时间戳会告诉你在一天中关注的应用程序是什么.

我们在这个应用程序中还有一些其他的事情可以在Java中直接进行.但是我没有在Java中进行任何GUI编程,因此我不确定是否可以通过awt API获取有关OS级窗口的信息.这甚至可能吗?是否有其他方法可以通过JNI执行此操作,还是需要本机应用程序才能执行此操作?

PS:我知道这个要求听起来有点邪恶,但我只是在这里确定这是否在技术上是可行的.请不要拍信使,这不是我的主意.:)

java user-interface awtrobot

2
推荐指数
2
解决办法
1323
查看次数

如何在屏幕捕获程序中使用 Java 获得超过 30FPS?

我目前正在使用 Java 中的 Robot 类来记录屏幕。但是,它没有达到每秒 30 帧的最小值。我不是重新创建对象,而是尽可能高效,但我平均每秒只有 15 帧左右。机器人根本不切割它。

我可以用什么来捕获屏幕?我试过 Xuggle,但我似乎也无法足够快地捕捉它。

java screen capture recording awtrobot

2
推荐指数
2
解决办法
5045
查看次数

为什么这段代码运行如此缓慢?

我正在尝试使用这些方法在屏幕的矩形区域中查找颜色。但是有时屏幕上有数百万个像素,而我现在仅每秒实现约35次getColor迭代。我的代码中一定有某些东西导致它运行非常缓慢。

我怎么能比这更快地扫描屏幕?理想情况下,我想在不到一秒钟的时间内扫描整个屏幕以获取一种颜色,而不是现在的8个小时:P

这是我的两种方法。

public static int getColor(int x, int y){
    try{
        return(robot.getPixelColor(x, y).getRGB() * -1);
    }catch(Exception e){
        System.out.println("getColor ERROR");
        return 0;
    }
}

//returns first instance of color,
//Begins top left, works way down to bottom right
public static Point findColor(Box searchArea, int color){
    System.out.println("Test");
    if(searchArea.x1 > searchArea.x2){
        int temp = searchArea.x1;
        searchArea.x1 = searchArea.x2;
        searchArea.x2 = temp;
    }
    if(searchArea.y1 > searchArea.y2){
        int temp = searchArea.y1;
        searchArea.y1 = searchArea.y2;
        searchArea.y2 = temp;
    }
    for(int i = searchArea.x1;i <=searchArea.x2; i++){
        for(int …
Run Code Online (Sandbox Code Playgroud)

java performance awt awtrobot

2
推荐指数
1
解决办法
156
查看次数

拍摄完整 JFrame 和仅 Jframe 的快照

大家好,我已经开发了一个代码来截取整个屏幕的屏幕截图,但我希望它只截取 Jframe 内内容的屏幕截图。顺便说一下,我稍后会用它来打印图像。主要问题之一是,鼠标也出现在快照中。我不需要鼠标或底部的两个按钮。我可以更改按钮的visi,但是对于鼠标和仅在Jframe 内拍摄应该做什么?这是我的代码,它截取整个屏幕的屏幕截图。

                try{
                Thread.sleep(1000);
                Toolkit tk = Toolkit.getDefaultToolkit(); //Toolkit class                         returns the default toolkit
                Dimension d = tk.getScreenSize();

//Dimension class object stores width & height of the toolkit screen
// toolkit.getScreenSize() determines the size of the screen

                Rectangle rec = new Rectangle(0, 0, d.width, d.height);  
//Creates a Rectangle with screen dimensions,         

                Robot ro = new Robot(); //to capture the screen image
                BufferedImage img = ro.createScreenCapture(rec);



                File f;
                f = new File("myimage.jpg"); // File class is used to write …
Run Code Online (Sandbox Code Playgroud)

java swing awt awtrobot

2
推荐指数
1
解决办法
4072
查看次数

Java打印屏幕程序

我试图Robot在Java中使用来制作打印屏幕的图像文件.到目前为止,我有:

 Robot robot = new Robot();
 Rectangle screenRect = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize());
 BufferedImage capture = new Robot().createScreenCapture(screenRect);
 ImageIO.write(capture, "bmp", new File("printscreen.bmp"));
Run Code Online (Sandbox Code Playgroud)

但我似乎无法创建该文件.

java printscreen awtrobot

1
推荐指数
1
解决办法
5775
查看次数

机器人类 - 未处理的异常类型AWTException

所以,我正在修补Java中的Robot类.我是一个非常新的Java程序员,但我在其他语言中有更深的根源.这是我的代码:

import java.awt.*;

public class Main {

    public static void main(String[] args) {
        Robot bot = new Robot();
        bot.mouseMove(50, 50);  
    }
}
Run Code Online (Sandbox Code Playgroud)

我试图做的只是看看我是否可以控制鼠标,就像将它移动到50,50一样.但是,在Eclipse中它会将红色X放在旁边

Robot bot = new Robot();
Run Code Online (Sandbox Code Playgroud)

..saying ..

Unhandled exception type AWTException
Run Code Online (Sandbox Code Playgroud)

并且不会让我运行它.任何人都可以帮我弄清楚为什么会这样吗?

java compiler-errors awt awtrobot

1
推荐指数
1
解决办法
6938
查看次数

使用Java的Robot来按住一个键

目前我正在尝试让 java 按住如下键:

Robot rob;

rob.keyPress(KeyEvent.VK_ENTER);
Thread.sleep(3000);
rob.keyRelease(KeyEvent.VK_ENTER);
Run Code Online (Sandbox Code Playgroud)

这应该按住 Enter 键 3 秒,在一秒左右后导致重复效果。换句话说,如果您手动按住“r”键,它会首先键入 r,然后大约一秒钟后它会像 rrrrrrrr 一样。我想要机器人的这种效果。我也尝试过:

curTime = System.currentTimeMillis();

while(System.currentTimeMillis() - curTime < duration)
{
rob.keyPress(whatever);
}
rob.keyRelease(whatever);
Run Code Online (Sandbox Code Playgroud)

然而,这是极其敏感的,持续时间为 1 秒的输出……好吧,你的计算机在 1 秒内可以输出尽可能多的内容。价值数千行。这不是我的本意。有任何想法吗?谢谢!

PS 我想要这种行为的原因是因为我编写了一些脚本语言来自动化游戏。如果我想像正常人一样按住向上箭头键,我认为我需要我正在谈论的行为。

编辑:

由于似乎有些混乱,我表示歉意。让我详细说明一下。在我的第一个代码中,如果我选择“r”作为字符,那么无论持续时间如何,它都只会打印一个 r 。如果您在键盘上按“r”5 秒钟,它将进入 -> r...rrrrrrrrrrrrrrrr 其中 ... 意味着一秒钟的时间。这就是我想要的行为,但我不会得到它。第二个代码是我尝试垃圾邮件单击“按”的地方,但这实际上每次执行时都会键入“r”。因此,如果我处于定时循环一段时间,则每次循环迭代时都会发送“r”按钮。那不是我想要的。我再次想要的是与按下键盘上的 r 3 秒所发生的结果相同的结果。首先它只是一个 r,然后 rrrrrrrrrrrrrrrrrrrrr。我什至不确定release()方法的作用...我想如果你把它留在按下而不释放,它只会在循环中垃圾邮件屏幕!为什么不呢,按键已按下?这就是让我困惑的地方。显然,当按下某个键时,它不会保持按下状态。

java awt awtrobot

1
推荐指数
1
解决办法
9434
查看次数

如何在Java中捕获鼠标光标?

好吧,大多数人会认为它是重复的,因为它已经写在任何地方,它不是真的可行,唯一的选择是使用awt机器人做截图.

但是......问题是鼠标光标甚至没有出现在AWT机器人生成的图片中......我尝试gnome-screeshots,在那里我可以看到鼠标光标.但是从java截图来看,什么都没有.整个图片,但不是鼠标光标.这就像它在拍照前隐藏它一样.我搜索像setIncludeMouseCursor这样的参数或类似的东西没有运气.

我可以捕获鼠标位置,这很好.但是,如果我捕获这个区域,再没有光标.

知道如何强制执行robot.createScreenCapture来捕获鼠标光标吗?

java mouse awt awtrobot

1
推荐指数
1
解决办法
2303
查看次数

使用awt包中的Robot类双击事件

我已经看到很多关于使用双击事件的线程MouseEvent。但这不是我想要的。我最近开始使用Robot类,并遇到了一些鼠标功能,例如mouseMove(x,y), mouseRelease(int buttons)

RobotmousePress(int button);类也提供函数。我已经尝试过了。

Robot robot = new Robot();
robot.mouseMove(305, 450);
robot.mousePress(InputEvent.BUTTON1_DOWN_MASK);
robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
Run Code Online (Sandbox Code Playgroud)

但这是一个单击事件。我想要实现的是使用Robot类的双击事件。有可能实现吗?如果是这样。那怎么办?

java awt awtrobot

1
推荐指数
1
解决办法
4199
查看次数

无效的密钥代码@ java

我正在研究一个用java自动输入内容的系统.这是我写它的方式:

public void typeMessage(String message) {
    for (char c : message.toCharArray()) {
        int code = c;
        if (code > 96 && code < 123) 
            code = code - 32;
        if (c == '@') {
            robot.keyPress(VK_SHIFT);
            robot.keyPress(VK_AT);
            robot.keyRelease(VK_SHIFT);
            robot.keyRelease(VK_AT);
        } else {
            type(code);
        }
    }
    type(VK_ENTER);
}
Run Code Online (Sandbox Code Playgroud)

但是我收到了这个错误:

    Exception in thread "Thread-2" java.lang.IllegalArgumentException: Invalid key code
Run Code Online (Sandbox Code Playgroud)

    robot.keyPress(VK_AT);
Run Code Online (Sandbox Code Playgroud)

java keyboard awtrobot

0
推荐指数
1
解决办法
5820
查看次数

Java Robot类有什么作用?

Java中的Robot类到底有什么功能?是按键还是什么键?

java awtrobot

-2
推荐指数
1
解决办法
500
查看次数