有没有人知道类似于Java Robot的Python类?
具体来说,我想在Ubuntu中执行屏幕抓取,并最终跟踪鼠标点击和键盘按下(尽管这是一个稍微不同的问题).
如何在Python中控制鼠标和键盘?
我们的想法与Java中的Robot()类相同.能够说:将鼠标从这里移动到这里,点击那里,写出屏幕上的任何内容.
对于Windows,有win32api,但我主要使用的是Linux.
对于Linux有Xlib,但它也适用于键盘吗?(仅发现鼠标的参考)
有跨平台的解决方案吗?(Linux,Windows甚至OS X都会很棒.)
使用Java机器人时,发送斜杠或反斜杠会引发异常.
例如:
public void slash() throws AWTException {
Robot rob = new Robot();
rob.keyPress(KeyEvent.VK_SLASH);
rob.keyRelease(KeyEvent.VK_SLASH);
}
public void backSlash() throws AWTException {
Robot rob = new Robot();
rob.keyPress(KeyEvent.VK_BACK_SLASH);
rob.keyRelease(KeyEvent.VK_BACK_SLASH);
}
Run Code Online (Sandbox Code Playgroud)
然后,当我想输入那些时,我使用:
public void type() {
try {
slash();
} catch (AWTException e) { System.out.println("Exception when typing slash."); }
try {
backSlash();
} catch (AWTException e) { System.out.println("Exception when typing back slash."); }
}
Run Code Online (Sandbox Code Playgroud)
我在控制台中收到两条错误消息.顺便说一句,我试图发送的所有其他击键工作正常.
我得到了斜线的foltrawow堆栈跟踪:
Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: Invalid key code
at sun.awt.windows.WRobotPeer.keyPress(Native Method)
at java.awt.Robot.keyPress(Unknown Source)
at …
Run Code Online (Sandbox Code Playgroud) 根据前面的链接(如何发送键盘输出),Java可以模拟使用Robot类按下的键.但是,如何模拟按键的组合?如果我想发送组合"alt-123"这可能使用机器人吗?
我正在使用java.awt.Robot
我的Swing应用程序的集成测试,但是我无法以正确的顺序运行我的操作.robot.mousePressed(...)
在Swing完成调度该事件之前,如何告诉调用阻塞的线程?显然,robot.setAutoWaitForIdle(true)
没有好处.
这是我的演示.我期待"机器人完成!" 消息总是在"动作完成阻止"之后出现,但相反,它经常发生得太快.
import java.awt.AWTException;
import java.awt.GraphicsConfiguration;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import java.sql.Date;
import java.text.DateFormat;
import java.util.logging.ConsoleHandler;
import java.util.logging.Formatter;
import java.util.logging.LogManager;
import java.util.logging.LogRecord;
import java.util.logging.Logger;
import javax.swing.GroupLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
public class RobotWaitForIdleDemo {
/**
* Create the device that contains the given point in screen coordinates.
* Robot has to be constructed differently for each monitor. …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Robot
类在我的JavaFX应用程序中捕获屏幕截图,
这是我在我的应用程序中使用的代码:
Rectangle screenBounds = new Rectangle(Screen.getPrimary().getBounds().getWidth(),
Screen.getPrimary().getBounds().getHeight());
Robot robot = new Robot();
BufferedImage img = robot.createScreenCapture(new java.awt.Rectangle(
(int) screenBounds.getX(), (int) screenBounds.getY(), (int)
screenBounds.getWidth(), (int) screenBounds.getHeight()));
Run Code Online (Sandbox Code Playgroud)
它在Windows操作系统中运行良好,但headless environment
在MAC OS中显示错误Robot robot = new Robot();
我正在尝试使用打印屏幕图像区域来获得2个显示器,但仅适用于一个显示器.你能告诉我如何获得2号显示器吗?
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) 你如何从一个字母的字母中获取VK代码?看起来你应该能够做类似的事情javax.swing.KeyStroke.getKeyStroke('c').getKeyCode()
,但这不起作用(结果为零).如果您已经拥有KeyEvent,每个人都知道如何获取密钥代码,但如果您只想将字符转换为VK整数,该怎么办?我对获取奇怪字符的FK代码不感兴趣,只有[AZ],[az],[0-9].
这个问题的背景--------我见过的所有机器人教程都假设程序员喜欢通过发送带有VK代码的按键来拼出单词:
Run Code Online (Sandbox Code Playgroud)int keyInput[] = { KeyEvent.VK_D, KeyEvent.VK_O, KeyEvent.VK_N, KeyEvent.VK_E };//end keyInput array
叫我懒惰,但即使使用Eclipse,也无法在GUI上使用TDD.如果有人碰巧知道一个类似于机器人的类,它接受字符串,然后模拟这些字符串的用户输入(我正在使用FEST),我很想知道.
我想:
用Java Robot 打字.但是,我得到了一个IllegalArgumentException
.我的代码是:
robot.keyPress(KeyEvent.VK_SHIFT);
robot.keyPress(KeyEvent.VK_COLON);
robot.keyRelease(KeyEvent.VK_COLON);
robot.keyRelease(KeyEvent.VK_SHIFT);
Run Code Online (Sandbox Code Playgroud)
例外是:
java.lang.IllegalArgumentException: Invalid key code.].
Run Code Online (Sandbox Code Playgroud)
我也尝试过:
robot.keyPress(KeyEvent.VK_SHIFT);
robot.keyPress(KeyEvent.VK_SEMICOLON);
robot.keyRelease(KeyEvent.VK_SEMICOLON);
robot.keyRelease(KeyEvent.VK_SHIFT);
Run Code Online (Sandbox Code Playgroud)
我怎么解决这个问题?
我正在尝试使用Java Robot 启动alt+tab菜单.当我调用alt_tab()方法时,我想调出alt+tab菜单并保持菜单.我知道这可以用alt+ ctrl+tab来实现.
到目前为止,我已经尝试了下面的代码,并且只是alt+tab没有控制键.我不知道为什么它没有提出菜单.它只需按下alt键即可模拟.
public void alt_tab() {
Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_ALT);
robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_TAB);
robot.delay(100);
robot.keyRelease(KeyEvent.VK_TAB);
robot.keyRelease(KeyEvent.VK_CONTROL);
robot.keyRelease(KeyEvent.VK_ALT);
}
Run Code Online (Sandbox Code Playgroud)
我正在使用Windows 8 Pro和JDK 7.任何帮助表示赞赏!
awtrobot ×10
java ×8
awt ×3
linux ×2
python ×2
alt ×1
automation ×1
fest ×1
headless ×1
javafx-2 ×1
keyboard ×1
keypress ×1
macos ×1
printscreen ×1
screenshot ×1
swing ×1
tabs ×1
unit-testing ×1