我正在尝试从我的Java程序向游戏模拟器发送键盘命令,我知道如何设置process
从processbuilder
并运行该过程.
但是,我仍然无法从我的发送过程键盘命令Robot
.
一个InputStream
不会有太大的帮助,因为我需要发送keyEvents
,如按"Y"键,并相应地具有模拟器响应.
我正在使用Java来使用Robot类生成鼠标按下:
robot.mousePress(InputEvent.BUTTON1_MASK);
robot.mouseRelease(InputEvent.BUTTON1_MASK);
Run Code Online (Sandbox Code Playgroud)
但是,我希望机器人按下按钮一段时间.我怎样才能做到这一点?
我正在尝试捕获屏幕,然后在缩放图像时递归地将图像绘制到JFrame(以创建当您在镜像中查看镜像时获得的效果).
我的代码有问题 - 它不会绘制任何图形.我究竟做错了什么?
import java.awt.AWTException;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.HeadlessException;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.image.BufferedImage;
import javax.swing.JFrame;
public class ScreenCapture extends JFrame {
BufferedImage screenCapture;
Graphics screenCaptureGraphics;
private static int recurseCount = 0;
private static float $scale = 0.9f;
private static float scale = 1.0f;
private static int height;
private static int width;
ScreenCapture() {
try {
screenCapture = new Robot().createScreenCapture(
new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()) );
height = screenCapture.getHeight(); …
Run Code Online (Sandbox Code Playgroud) 我有一小段代码用于跟踪时间 - 很简单,它每隔四分钟拍摄一次我的桌面照片,以便稍后我可以回过头来看看我白天做的事情 - 它很棒,除非我连接到外接显示器 - 这个代码只需要我的笔记本电脑屏幕的屏幕截图,而不是我正在使用的更大的外部显示器 - 任何想法如何更改代码?我正在运行OSX,以防相关......
import java.awt.AWTException;
import java.awt.Robot;
import java.awt.Rectangle;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.*;
import javax.imageio.ImageIO;
class ScreenCapture {
public static void main(String args[]) throws
AWTException, IOException {
// capture the whole screen
int i=1000;
while(true){
i++;
BufferedImage screencapture = new Robot().createScreenCapture(
new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()) );
// Save as JPEG
File file = new File("screencapture"+i+".jpg");
ImageIO.write(screencapture, "jpg", file);
try{
Thread.sleep(60*4*1000);
}
catch(Exception e){
e.printStackTrace();
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
根据给出的解决方案,我做了一些改进,感兴趣的代码在https://codereview.stackexchange.com/questions/10783/java-screengrab进行代码审查.
我知道我们可以使用以下代码模拟打印屏幕:
robot.keyPress(KeyEvent.VK_PRINTSCREEN);
Run Code Online (Sandbox Code Playgroud)
..但那么如何归还一些BufferedImage
?
我在Google上找到了一些调用方法,getClipboard()
但Netbeans在这个方法上给我一些错误(找不到符号).
我很遗憾地问这个,但是有人可以告诉我一个关于如何从这个按键返回的工作代码,BufferedImage
然后我可以保存吗?
我刚刚发现了awt.Robot库,我很高兴能够使用它.我以为我会对我的朋友玩一个小恶作剧,并有机器人按下控制,alt,删除按下锁定电脑按钮但我无法让程序调出控制alt删除屏幕.
这是我的代码:
import java.awt.*;
import java.awt.event.KeyEvent;
public class Bot {
public static void main(String[] args)
{
try {
Robot bot = new Robot();
bot.delay(4000);
bot.keyPress(KeyEvent.VK_CONTROL);
bot.delay(100);
bot.keyPress(KeyEvent.VK_ALT);
bot.delay(100);
bot.keyPress(KeyEvent.VK_DELETE);
bot.delay(500);
bot.keyRelease(KeyEvent.VK_CONTROL);
bot.keyRelease(KeyEvent.VK_ALT);
bot.keyRelease(KeyEvent.VK_DELETE);
} catch (AWTException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void pressEnter(Robot bot)
{
bot.keyPress(KeyEvent.VK_ENTER);
bot.delay(40);
bot.keyRelease(KeyEvent.VK_ENTER);
}
}
Run Code Online (Sandbox Code Playgroud) Java Robot类允许您移动鼠标,就像移动实际的物理鼠标一样。
但是,如何以人性化的方式(因此不是即时的)将鼠标从Point1移到Point2?又名,如何设置运动速度?
如果用Robot类无法达到这样的速度,那么如果鼠标只能瞬时移动,那么应该使用哪种“算法”来模仿人类的鼠标运动?是否应该以一定的增量逐像素移动鼠标?
Robot类的方法getPixelColor(int x,int y)
究竟是如何工作的?我试过这个代码片段:
try
{
Robot robos = new Robot();
}
catch (AWTException e)
{
}
for (int i = 0; i < 100; i++)
robos.getPixelColor(0, 0);
System.out.println("fsadf");
Run Code Online (Sandbox Code Playgroud)
在我的PC上,这是一个核心的2人组合,并且花了一秒或更少的时间来执行print语句.但是,当我在我的笔记本电脑上运行相同的代码时,这是一个核心i3,它花费了更多的时间(大约2-3秒).
这背后的原因是什么?它是否与屏幕质量或类似的东西有关?我怎么解决这个问题?
在java中是否还有像Robot类一样的其他类,或者我们可以在android中使用Robot类吗?
我正在尝试编写一个小程序,每当我收到电子邮件/文本/其他类型的消息时,它都会使我的笔记本电脑键盘的背光闪烁。我正在尝试使用 Java 的 Robot 类来执行此操作。
到目前为止,我的问题是我似乎找不到“Fn”键的键码。