如何在Java中捕获鼠标光标?
好的,你们大多数人会认为这是一个复制品,因为它已经被写在了所有地方,它不是真正可行的,唯一的选择是使用awt机器人做一个屏幕截图 但是。。。问题是,鼠标光标甚至没有出现在AWT机器人制作的图片中。。。我尝试gnome屏幕快照,在那里我可以看到鼠标光标。但是从java截图上看,什么都没有。整个图片,但不是鼠标光标。就像是在拍照前把它藏起来。我搜索像SetIncludeUseCursor之类的参数,但运气不好 我可以捕捉鼠标的位置,这很好。但是如果我只捕捉这个区域,同样没有光标如何在Java中捕获鼠标光标?,java,awt,mouse,awtrobot,Java,Awt,Mouse,Awtrobot,好的,你们大多数人会认为这是一个复制品,因为它已经被写在了所有地方,它不是真正可行的,唯一的选择是使用awt机器人做一个屏幕截图 但是。。。问题是,鼠标光标甚至没有出现在AWT机器人制作的图片中。。。我尝试gnome屏幕快照,在那里我可以看到鼠标光标。但是从java截图上看,什么都没有。整个图片,但不是鼠标光标。就像是在拍照前把它藏起来。我搜索像SetIncludeUseCursor之类的参数,但运气不好 我可以捕捉鼠标的位置,这很好。但是如果我只捕捉这个区域,同样没有光标 知道如何强制robo
知道如何强制robot.createScreenCapture同时捕获鼠标光标吗?您可以扩展
robot
并覆盖createScreenCapture
,以(给定光标位置)在捕获中绘制光标
大概是这样的:
@Override
public BufferedImage createScreenCapture(){
BufferedImage img = Super.createScreenCapture();
return drawCursor(x,y,img);
}
显然
drawCursor
返回一个BuffereImage
您可以扩展Robot
并覆盖CreateScreateScreenCapture
,以(给定光标位置)在捕获中绘制光标
大概是这样的:
@Override
public BufferedImage createScreenCapture(){
BufferedImage img = Super.createScreenCapture();
return drawCursor(x,y,img);
}
显然
drawCursor
返回一个buffereImage
您需要使用MouseInfo
类并使用其方法staticgetPointerInfo()
获取一个指针
对象来表示光标在屏幕上的位置
获得位置后,您可以使用Robot
将屏幕截图作为buffereImage
并在其上绘制光标。简单
SSCCE
package stack;
import java.awt.AWTException;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.MouseInfo;
import java.awt.PointerInfo;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
public class GetMousePointer {
public static void main(String[] args) {
final String USER_HOME = System.getProperty("user.home");
GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
int width = gd.getDisplayMode().getWidth();
int height = gd.getDisplayMode().getHeight();
BufferedImage blackSquare = new BufferedImage(50, 50, BufferedImage.TYPE_3BYTE_BGR);
for(int i = 0; i < blackSquare.getHeight(); i++){
for(int j = 0; j < blackSquare.getWidth(); j++){
blackSquare.setRGB(j, i, 128);
}
}
try {
Robot robot = new Robot();
BufferedImage screenshot = robot.createScreenCapture(new Rectangle(0,0,width,height));
PointerInfo pointer = MouseInfo.getPointerInfo();
int x = (int) pointer.getLocation().getX();
int y = (int) pointer.getLocation().getY();
screenshot.getGraphics().drawImage(blackSquare, x, y, null);
ImageIO.write(screenshot, "PNG", new File(USER_HOME, "screenshot.PNG"));
} catch (Exception e) {
e.printStackTrace();
}
}
}
包栈;
导入java.awt.AWTException;
导入java.awt.GraphicsDevice;
导入java.awt.GraphicsEnvironment;
导入java.awt.MouseInfo;
导入java.awt.PointerInfo;
导入java.awt.Rectangle;
导入java.awt.Robot;
导入java.awt.image.buffereImage;
导入java.io.File;
导入javax.imageio.imageio;
公共类GetMousePointer{
公共静态void main(字符串[]args){
最终字符串USER_HOME=System.getProperty(“USER.HOME”);
GraphicsDevice gd=GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
int width=gd.getDisplayMode().getWidth();
int height=gd.getDisplayMode().getHeight();
BuffereImage blackSquare=新的BuffereImage(50,50,BuffereImage.TYPE_3BYTE_BGR);
对于(int i=0;i
输出蓝色方框的左上角是我的光标的位置。您需要使用
MouseInfo
类,并使用其方法staticgetPointerInfo()
获取一个指针
对象,以表示光标在屏幕上的位置
获得位置后,您可以使用Robot
将屏幕截图作为buffereImage
并在其上绘制光标。简单
SSCCE
package stack;
import java.awt.AWTException;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.MouseInfo;
import java.awt.PointerInfo;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
public class GetMousePointer {
public static void main(String[] args) {
final String USER_HOME = System.getProperty("user.home");
GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
int width = gd.getDisplayMode().getWidth();
int height = gd.getDisplayMode().getHeight();
BufferedImage blackSquare = new BufferedImage(50, 50, BufferedImage.TYPE_3BYTE_BGR);
for(int i = 0; i < blackSquare.getHeight(); i++){
for(int j = 0; j < blackSquare.getWidth(); j++){
blackSquare.setRGB(j, i, 128);
}
}
try {
Robot robot = new Robot();
BufferedImage screenshot = robot.createScreenCapture(new Rectangle(0,0,width,height));
PointerInfo pointer = MouseInfo.getPointerInfo();
int x = (int) pointer.getLocation().getX();
int y = (int) pointer.getLocation().getY();
screenshot.getGraphics().drawImage(blackSquare, x, y, null);
ImageIO.write(screenshot, "PNG", new File(USER_HOME, "screenshot.PNG"));
} catch (Exception e) {
e.printStackTrace();
}
}
}
包栈;
导入java.awt.AWTException;
导入java.awt.GraphicsDevice;
导入java.awt.GraphicsEnvironment;
导入java.awt.MouseInfo;
导入java.awt.PointerInfo;
导入java.awt.Rectangle;
导入java.awt.Robot;
导入java.awt.image.buffereImage;
导入java.io.File;
导入javax.imageio.imageio;
公共类GetMousePointer{
公共静态void main(字符串[]args){
最终字符串USER_HOME=System.getProperty(“USER.HOME”);
GraphicsDevice gd=GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
int width=gd.getDisplayMode().getWidth();
int height=gd.getDisplayMode().getHeight();
BuffereImage blackSquare=新的BuffereImage(50,50,BuffereImage.TYPE_3BYTE_BGR);
对于(int i=0;i
输出蓝色正方形的左上角是我的光标位置。好吧,见鬼!我本来打算这么说的。但既然你不仅说了,还提供了代码+1:)@andrewhompson你不能控制meee!!问题是,我想要的是光标图片。我想知道它是箭头还是双箭头等。我需要根据光标的形式采取行动:(@jmspaggi我不相信你可以用纯Java获得这些信息。你需要一个较低级别的API通过JNI/JNA与你的Java程序进行接口。好吧,见鬼!我想说的是。但是既然你不仅说了,而且还提供了代码..+1:)@andrewhompson你不能用troll meee!!XD问题是,我想要什么