`
harry
  • 浏览: 184598 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Java中实现鼠标模拟与键盘映射

    博客分类:
  • Java
阅读更多
Java SDK 1.3以后实现了Robot类。此类用于为测试自动化、自运行演示程序和其他需要控制鼠标和键盘的应用程序生成本机系统输入事件。Robot 的主要目的是便于 Java 平台实现自动测试。
使用该类生成输入事件与将事件发送到 AWT 事件队列或 AWT 组件的区别在于:事件是在平台的本机输入队列中生成的。例如,Robot.mouseMove 将实际移动鼠标光标,而不是只生成鼠标移动事件。
Robot中主要的鼠标和键盘控制方法有:

  • void keyPress(int keycode) 按下给定的键。
  • void keyRelease(int keycode) 释放给定的键。
  • void mouseMove(int x, int y) 将鼠标指针移动到给定屏幕坐标。
  • void mousePress(int buttons) 按下一个或多个鼠标按钮。
  • void mouseRelease(int buttons) 释放一个或多个鼠标按钮。
  • void mouseWheel(int wheelAmt) 在配有滚轮的鼠标上旋转滚轮。

下面就让我们来实战鼠标控制,实现一个简单的鼠标控制程序MouseController。程序功能很简单:随机移动鼠标并点击左键。

代码如下:

import java.awt.AWTException;

import java.awt.Dimension;

import java.awt.Robot;

import java.awt.Toolkit;

import java.awt.event.InputEvent;

import java.util.Random;


/**

*

* @author Xiaofeng Wang

*/

public class MouseController implements Runnable {

private Dimension dim;

private Random rand;

private Robot robot;

private volatile boolean stop = false;

/** Creates a new instance of Main */

public MouseController() {

dim = Toolkit.getDefaultToolkit().getScreenSize();

rand = new Random();

try {

robot = new Robot();

} catch (AWTException ex) {

ex.printStackTrace();

}

}


public void run() {

while(!stop) {

int x = rand.nextInt(dim.width);

int y = rand.nextInt(dim.height);

robot.mouseMove(x, y);

robot.mousePress(InputEvent.BUTTON1_MASK);

try {

Thread.sleep(3000);

} catch (InterruptedException ex) {

ex.printStackTrace();

}

}

}

public synchronized void stop() {

stop = true;

}

/** * @param args the command line arguments */

public static void main(String[] args) {

MouseController mc = new MouseController();

Thread mcThread = new Thread(mc);

System.out.println("Mouse Controller start");

mcThread.start();

try {

Thread.sleep(60000);

} catch (InterruptedException ex) {

ex.printStackTrace();

}

mc.stop();

System.out.println("Mouse Controller stoped");

}

}

当然键盘映射也类似,无非是使用void keyPress(int keycode)。

现 在实现了控制鼠标和键盘,接下了我们要获取操作后的效果(屏幕截图)。好在Robot类也提供了一个方法:BufferedImage createScreenCapture(Rectangle screenRect);可以直接将全屏幕或某个屏幕区域的像素拷贝到一个BufferedImage对象中。

好,下面实战使用robot截屏,实现Capture程序,每隔1秒截屏一次。

代码如下:

public class Capture extends javax.swing.JFrame implements Runnable {

/** Creates new form Capture */

public Capture() {

initComponents();

try {

robot = new Robot();

} catch (AWTException ex) {

ex.printStackTrace();

}

dim = Toolkit.getDefaultToolkit().getScreenSize(); }

/** This method is called from within the constructor to

* initialize the form.

* WARNING: Do NOT modify this code. The content of this method is

* always regenerated by the Form Editor.

*/

// <editor-fold desc=" 生成的代码 " defaultstate="collapsed"></editor-fold>

private void initComponents() {

screenCanvas = new java.awt.Canvas();

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

stop = true;

setResizable(false);

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());

getContentPane().setLayout(layout);

layout.setHorizontalGroup(

layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addComponent(screenCanvas, javax.swing.GroupLayout.PREFERRED_SIZE, 519, javax.swing.GroupLayout.PREFERRED_SIZE) );

layout.setVerticalGroup(

layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addComponent(screenCanvas, javax.swing.GroupLayout.PREFERRED_SIZE, 434, javax.swing.GroupLayout.PREFERRED_SIZE)

);

pack();

}//

/** * @param args the command line arguments */

public static void main(String args[]) {

final Capture capture = new Capture();

java.awt.EventQueue.invokeLater(new Runnable() {

public void run() {

capture.setVisible(true);

}

});

Thread cutThread = new Thread(capture);

cutThread.start();

}

public void run() {

stop = false;

while(!stop) {

BufferedImage bImage = robot.createScreenCapture(new Rectangle(dim.width, dim.height));

Graphics g = this.screenCanvas.getGraphics();

g.drawImage(bImage, 0, 0, this);

try {

Thread.sleep(1000);

} catch (InterruptedException ex) {

ex.printStackTrace();

}

}

}

private synchronized void stop() {

stop = true;

}

// 变量声明 - 不进行修改

private java.awt.Canvas screenCanvas;

// 变量声明结束

private volatile boolean stop;

private Robot robot;

private Dimension dim;

}

分享到:
评论

相关推荐

    Java实现鼠标模拟与键盘映射

    在 Java 中实现鼠标模拟与键盘映射是通过使用 Robot 类来实现的。Robot 类是 Java SDK 1.3 及更高版本中引入的,用于生成本机系统输入事件,以便于自动测试、自运行演示程序和其他需要控制鼠标和键盘的应用程序。 ...

    java 控制鼠标*键盘的 jna 库32位

    在Java中,直接控制硬件设备如鼠标和键盘通常需要借助于特定的库。在这个场景下,"java 控制鼠标*键盘的 jna 库32位" 提供了这样的功能,通过Java Native Access (JNA) 库来实现。 JNA 是一个Java库,允许Java代码...

    键盘模拟鼠标滚轮滚动

    标题“键盘模拟鼠标滚轮滚动”所描述的是一款软件应用,它的主要功能是让用户通过键盘来模拟鼠标的滚轮操作,实现页面或文档的上下滚动。这种工具特别适合那些滚轮损坏或者不方便使用鼠标滚轮的用户,可以提高他们在...

    Java实现原神“风物之诗琴”自动演奏代码,用Java代码模拟键盘输入

    在Java编程语言中,我们可以利用特定的库来模拟键盘输入,从而实现自动化操作,比如在游戏中自动演奏特定的旋律。在“原神”这款游戏中,“风物之诗琴”是一种道具,玩家可以弹奏它来演奏各种音乐。这篇教程将探讨...

    Java实现获取窗口句柄并操作窗口jna-4.4.0

    在"Java实现获取窗口句柄并操作窗口 JNA"的场景中,窗口句柄是操作系统用来标识和管理窗口的一个标识符。在Windows系统中,窗口句柄通常被称为HWND。通过窗口句柄,我们可以执行诸如移动、最大化、最小化、关闭等...

    基于Java的Applet钢琴模拟程序源码.zip

    在我们的钢琴模拟程序中,开发者可能就是通过这种方式定义了Applet类,从而构建了一个可播放音符的虚拟键盘。 接着,我们需要关注的是Java音频处理。Java提供了一套完整的音频处理API,包括`javax.sound.sampled`包...

    模拟鼠标点击的源代码

    这样,即使在进行鼠标模拟时,主程序仍能继续执行其他任务。 4. **键盘映射和按键模拟**: 为了实现用两个按键模拟鼠标点击,需要确定哪些键盘按键将被映射为鼠标左键单击和双击。通常,可以使用ASCII码或扫描码来...

    利用Java实现远程控制

    - **Robot类**:用于模拟键盘和鼠标事件,是实现远程控制的基础。 - **Toolkit类**:提供工具箱服务,用于获取屏幕大小和颜色深度等信息。 - **JPEGCodec类**:进行JPEG图像编码和解码,确保屏幕图像高效传输。 - **...

    基于java的VR全景图+Opengl3D模型展示源码

    在Java中实现VR全景图通常涉及图像处理和数学计算,如球面坐标到屏幕坐标的转换。开发者可能使用了Java的AWT或Swing库来创建图形界面,并且利用图像处理库如JavaFX或Java2D来渲染和操作全景图。 2. **OpenGL 3D模型...

    java实现3D爱心效果.zip

    Java中实现3D图形通常有两种主要的方式:Java2D和Java3D。Java2D是一个二维图形库,虽然它的名字中没有“3D”,但通过组合2D图形和一些技巧,也能实现简单的3D效果。而Java3D则是一个更为强大的库,专为构建复杂的3D...

    Java开发技术大全(500个源代码).

    MyFileOutput.java 将键盘读入的文字保存到文件 MyPipedIO.java 管道流示例 MySequenceIn.java 顺序输入流示例 ObjectFileTest.java 序列化对象示例 ReadAndWrite.java 读入和写出数据 ReadAndWriteFile.java ...

    java3d API 1.5.1

    6. **用户交互**:Java3D支持鼠标和键盘事件处理,可以实现用户与3D场景的交互,例如旋转、平移和缩放视图,或者响应用户的点击事件。 7. **纹理映射**:通过Texture和TextureAttributes类,开发者可以将2D图像贴附...

    电脑模拟JAVA手机软件(手机顽童)不提示升级版

    3. **操作简便**:界面友好,用户可以通过鼠标和键盘轻松操控模拟的手机界面,实现与真实手机类似的交互体验。 4. **无需升级提示**:可能是因为开发者针对用户的特定需求,手机顽童不会频繁弹出升级提示,让用户...

    java模拟器--更好,更强

    2. **键盘映射**:允许用户将手机操作映射到键盘或鼠标,便于在PC上控制Java应用。 3. **多任务处理**:可以同时运行多个Java应用,模拟多任务环境。 4. **调试工具**:提供调试接口,帮助开发者定位和修复代码问题...

    Java3d交互式三维图形编程

    本教程专注于利用Java3D实现交互式三维图形编程,帮助开发者掌握如何在Java环境中构建生动且具有交互性的3D场景。 在Java3D中,你可以创建各种几何形状,如立方体、球体、圆柱体等,并通过变换(如旋转、平移和缩放...

    java3d图形显示(JAVA开发 c/s架构)

    9. **用户交互**: Java3D支持鼠标和键盘事件,可以实现用户与3D场景的交互,例如旋转、平移和缩放场景。 10. **C/S架构**: “C/S架构”即客户端/服务器架构,Java3D可以在这种架构下运行,客户端负责展示3D图形,...

    JAVA3D.zip

    - **用户交互**:Java3D可以与Java AWT或Swing组件结合,实现用户交互,如鼠标和键盘事件处理。 - **动画**:通过定时器和更新函数,可以创建动态的3D场景,例如物体的运动、旋转或形状变化。 总的来说,Java3D为...

    java3d编程指南

    同时,附带的资源文件可能包含了一些示例项目的源码,如OReilly.Killer.Game.Programming.in.Java.May.2005.chm,这可能是与游戏编程相关的参考资料,可以辅助学习Java3D在游戏开发中的应用。 总之,通过阅读《Java...

    可以在电脑上运行的Java游戏模拟器

    这种模拟器通过模拟Java虚拟机(JVM)的功能来实现对Java游戏的兼容性,使用户能够在没有实际Java手机或设备的情况下重温那些经典游戏。 "彩虹城堡"是提及的一款经典Java游戏,它可能是众多Java游戏中的一个代表,...

    基于Java3D的虚拟漫游系统研究

    同时,它还提供了与用户的交互机制,如键盘、鼠标事件处理,使用户能够在虚拟环境中进行交互操作。 在实际的基于Java3D的虚拟漫游系统开发中,研究可能涉及以下方面: - **环境构建**:设计和构建具有真实感的3D...

Global site tag (gtag.js) - Google Analytics