Java控制鼠标和键盘的方法

合集下载

jnativehook 用法

jnativehook 用法

jnativehook 是一个 Java 库,它提供全局的键盘和鼠标事件侦听功能。

以下是使用 jnativehook 的基本步骤:1. 下载和安装 jnativehook:首先,你需要从 jnativehook 的官方网站下载相关的库文件,并将其添加到你的 Java 项目的类路径中。

2. 创建一个监听器:在 Java 项目中创建一个监听器类,该类将实现 jnativehook 的接口来处理各种事件。

你可以创建一个名为 MyKeyListener 的类,并让它实现 NativeKeyListener 接口。

以下是一个简单的示例:java复制代码import org.jnativehook.GlobalScreen;import org.jnativehook.NativeHookException;import org.jnativehook.keyboard.NativeKeyEvent;import org.jnativehook.keyboard.NativeKeyListener;public class MyKeyListener implements NativeKeyListener {public void nativeKeyPressed(NativeKeyEvent e) {System.out.println("Key Pressed: " +NativeKeyEvent.getKeyText(e.getKeyCode()));}public void nativeKeyReleased(NativeKeyEvent e) {System.out.println("Key Released: " +NativeKeyEvent.getKeyText(e.getKeyCode()));}public void nativeKeyTyped(NativeKeyEvent e) {System.out.println("Key Typed: " + e.getKeyText(e.getKeyCode()));}public static void main(String[] args) {try {GlobalScreen.registerNativeHook();} catch (NativeHookException ex) {System.err.println("There was a problem registering the native hook.");System.err.println(ex.getMessage());System.exit(1);}GlobalScreen.addNativeKeyListener(new MyKeyListener());}}在这个示例中,我们创建了一个名为 MyKeyListener 的类,并实现了 NativeKeyListener 接口。

JAVA模拟键盘鼠标操作

JAVA模拟键盘鼠标操作

//可以在eclipse下直接运行的示例程序:package key_robot;import java.awt.*;import java.awt.event.*;import javax.swing.JOptionPane;public class key_robot {public key_robot() {}// 鼠标单击,要双击就连续调用private static void pressMouse(Robot r, int m, int delay) { r.mousePress(m);r.delay(10);r.mouseRelease(m);r.delay(delay);}// 键盘输入方法private static void pressKeys(Robot r, int[] ks, int delay) { for (int i = 0; i < ks.length; i++) {r.keyPress(ks[i]);r.delay(10);r.keyRelease(ks[i]);r.delay(delay);}}public static void main(String[] args) throws Exception { final Robot rb = new Robot();new Thread() {public void run() {rb.delay(2000); // 模拟回车rb.keyPress(KeyEvent.VK_ENTER);rb.keyRelease(KeyEvent.VK_ENTER);}}.start();JOptionPane.showMessageDialog(null,"以下程序自动执行,包括本对话框,点击运行后请不要移动鼠标和键盘.\n如果不能正常执行程序,请先关闭输入法");rb.delay(1500);// 设置开始菜单的大概位置int x = 40;int y = Toolkit.getDefaultToolkit().getScreenSize().height- 10; // 鼠标移动到开始菜单,rb.mouseMove(x, y);rb.delay(500);// 单击三次开始菜单for (int i = 0; i < 3; i++)pressMouse(rb, InputEvent.BUTTON1_MASK, 500);rb.delay(1000);// 运行CMD命令r cmd enterint[] ks = { KeyEvent.VK_R, KeyEvent.VK_C, KeyEvent.VK_M,KeyEvent.VK_D, KeyEvent.VK_ENTER, };pressKeys(rb, ks, 500);rb.mouseMove(400, 400);rb.delay(500);// 运行DIR命令dir enterks = new int[] { KeyEvent.VK_D, KeyEvent.VK_I, KeyEvent.VK_R, KeyEvent.VK_ENTER };pressKeys(rb, ks, 500);rb.delay(1000);// 运行CLS命令cls enterks = new int[] { KeyEvent.VK_C, KeyEvent.VK_L, KeyEvent.VK_S, KeyEvent.VK_ENTER };pressKeys(rb, ks, 500);rb.delay(1000);// 运行EXIT命令exit enterks = new int[] { KeyEvent.VK_E, KeyEvent.VK_X, KeyEvent.VK_I, KeyEvent.VK_T, KeyEvent.VK_ENTER };pressKeys(rb, ks, 500);rb.delay(1000);// 右键测试x = Toolkit.getDefaultToolkit().getScreenSize().width - 10;rb.mouseMove(x, y);// 如果是双键鼠标,请改用InputEvent.BUTTON2_MASK标pressMouse(rb, InputEvent.BUTTON3_MASK, 500);// 显示日期调整对话框apressKeys(rb, new int[] { KeyEvent.VK_A }, 1000);rb.delay(2000);pressKeys(rb, new int[] { KeyEvent.VK_ESCAPE }, 0);rb.delay(1000);new Thread() {public void run() {rb.delay(1000); // 回车rb.keyPress(KeyEvent.VK_ENTER);rb.keyRelease(KeyEvent.VK_ENTER);}}.start();JOptionPane.showMessageDialog(null, "演示完毕!");}}。

Java实现Hook对鼠标键盘监听-沐早SNOTEBOOK-CSDN博客

Java实现Hook对鼠标键盘监听-沐早SNOTEBOOK-CSDN博客

Java实现Hook对鼠标键盘监听-沐早SNOTEBOOK-CSDN博客Java 实现 Hook 对鼠标键盘监听收藏Java 实现全局(全操作系统)的鼠标和键盘监控,使用的是SWT Win32 Extension 项目,在以前若使用Java恐怕是很难实现的!SWT Win32 Extension 让Java拥有了许多对操作系统底层操作的功能!注:本程序需要SWT Win32 Extension支持?以下两个例子是:(一)鼠标Hookview plaincopy to clipboardprint?1.import org.sf.feeling.swt.win32.extension.hook.Hook;2.import org.sf.feeling.swt.win32.extension.hook.data.Hook Data;3.import org.sf.feeling.swt.win32.extension.hook.data.Mous eHookData;4.import org.sf.feeling.swt.win32.extension.hook.listener.Ho okEventListener;5.6.public class HotMouse {7.8.public static void main(String[] args) {9.Hook.MOUSE.addListener(new HookEventListener() {10.public void acceptHookData(HookData hookData) {11.if (hookData != null) {12.//System.out.println("Mouse Point X = " + ((MouseHo okData)hookData).getPointX());13.//System.err.println("Mouse Point Y =" + ((MouseHookData)hookData).getPointY());14.System.err.println(((MouseHookData)hookData).getPoi ntX()+"," + ((MouseHookData)hookData).getPointY());15.}16.if (hookData.getWParam() == 513) { System.out.p rintln("left button pressed");// left button pressed17.} else if (hookData.getWParam() == 514) { System.out .println("left button released");// left button released18.} else if (hookData.getWParam() == 516) { System.out .println("right button pressed");// right button pressed19.} else if (hookData.getWParam() == 517) { System.out .println("right button");// right button20.} else if (hookData.getWParam() == 519) { System.out .println("middle button 519");// middle button21.} else if (hookData.getWParam() == 520) { System.out .println("middle button 520");// middle button22.}23.}24.});25.Hook.MOUSE.install();26.}27.28.}(二)键盘Hookview plaincopy to clipboardprint?1.import org.sf.feeling.swt.win32.extension.hook.Hook;2.import org.sf.feeling.swt.win32.extension.hook.data.HookData;3.import org.sf.feeling.swt.win32.extension.hook.data.Keyb oardHookData;4.import org.sf.feeling.swt.win32.extension.hook.listener.Ho okEventListener;5.6.public class HotKey {7.public static void main(final String[] args) {8.Hook.KEYBOARD.addListener(new HookEventListener(){// @Override9.public void acceptHookData(HookData arg0) {10.KeyboardHookData KHD = ((KeyboardHookData)arg0) ;11.System.out.println(KHD.getWParam()+" - "+KHD.getTr ansitionState()); //Print code12.if( KHD.getScanCode() == 29 && KHD.getTransitionSt ate()){ //按下Ctrl執行動作13.System.out.println("Hotting");14.}else if( KHD.getScanCode() == 1 ){ //按下[ESC]結束15.System.exit(0);16.}17.}});18.Hook.KEYBOARD.install(); //註冊事件19.}20.}以上两个例子源于:这里要感谢!感谢!。

java 接受键盘数据的方法

java 接受键盘数据的方法

一、介绍Java作为一门广泛应用的编程语言,常常需要接受键盘输入的数据。

接受键盘输入是Java程序中的常见操作,可以通过多种方法来实现。

本文将介绍Java中接受键盘输入的方法,包括使用Scanner类和System.in对象等方式。

通过本文的学习,读者将能够掌握在Java程序中接受键盘输入的技巧和技术。

二、使用Scanner类接受键盘输入Java中的Scanner类是一个常用的工具类,它可以方便地从标准输入流中读取数据。

在接受键盘输入时,可以通过Scanner类的实例来实现。

下面是使用Scanner类接受键盘输入的示例代码:```javaimport java.util.Scanner;public class KeyboardInput {public static void m本人n(String[] args) {Scanner scanner = new Scanner(System.in);System.out.print("请输入一个整数:");int number = scanner.nextInt();System.out.println("您输入的整数是:" + number);System.out.print("请输入一个字符串:");String str = scanner.next();System.out.println("您输入的字符串是:" + str);scanner.close();}}```在上面的示例中,首先创建了一个Scanner类的实例,并将标准输入流System.in作为参数传递给Scanner类的构造函数。

然后通过调用nextInt()方法和next()方法来分别接受整数和字符串类型的键盘输入。

记得在程序结束前调用scanner.close()方法来关闭Scanner对象。

JAVA日常操作快捷方式10种

JAVA日常操作快捷方式10种

JAVA⽇常操作快捷⽅式10种1. Ctrl+Shift+R:打开资源这可能是所有快捷键组合中最省时间的了。

这组快捷键可以让你打开你的⼯作区中任何⼀个⽂件,⽽你只需要按下⽂件名或mask名中的前⼏个字母,⽐如applic*.xml。

美中不⾜的是这组快捷键并⾮在所有视图下都能⽤。

Ctrl+Shift+R Open Resource2. Ctrl+O:快速outline如果想要查看当前类的⽅法或某个特定⽅法,但⼜不想把代码拉上拉下,也不想使⽤查找功能的话,就⽤Ctrl+o吧。

它可以列出当前类中的所有⽅法及属性,你只需输⼊你想要查询的⽅法名,点击enter就能够直接跳转⾄你想去的位置。

Ctrl+o Quick Outline3. Ctrl+E:快速转换编辑器这组快捷键将帮助你在打开的编辑器之间浏览。

使⽤Ctrl+page down或Ctrl+page up可以浏览前后的选项卡,但是在很多⽂件打开的状态下,Ctrl+e会更加有效率。

Ctrl+e Quick Switch Editor4. Ctrl+2,L:为本地变量赋值开发过程中,我常常先编写⽅法,如Calendar.getInstance(),然后通过Ctrl+2快捷键将⽅法的计算结果赋值于⼀个本地变量之上。

这样我节省了输⼊类名,变量名以及导⼊声明的时间。

Ctrl+F的效果类似,不过效果是把⽅法的计算结果赋值于类中的域。

5. Alt+Shift+R:重命名重命名属性及⽅法在⼏年前还是个很⿇烦的事,需要⼤量使⽤搜索及替换,以⾄于代码变得零零散散的。

今天的Java IDE提供源码处理功能,Eclipse也是⼀样。

现在,变量和⽅法的重命名变得⼗分简单,你会习惯于在每次出现更好替代名称的时候都做⼀次重命名。

要使⽤这个功能,将⿏标移动⾄属性名或⽅法名上,按下alt+Shift+r,输⼊新名称并点击回车。

就此完成。

如果你重命名的是类中的⼀个属性,你可以点击alt+Shift+r两次,这会呼叫出源码处理对话框,可以实现get及set⽅法的⾃动重命名。

jnativehook 用法 -回复

jnativehook 用法 -回复

jnativehook 用法-回复jnativehook 是一个开源的Java 库,它提供了与操作系统底层键盘和鼠标事件交互的功能。

通过jnativehook,Java 开发人员可以轻松地获取键盘和鼠标事件,以及对这些事件做出响应。

本文将逐步介绍jnativehook 的用法,包括安装、配置和示例代码。

第一步:安装jnativehook要开始使用jnativehook,我们首先需要进行安装。

安装过程分为两个主要步骤:添加依赖项和加载本地库。

1. 添加依赖项:在Maven 项目中,可以通过在pom.xml 文件中添加以下依赖项来引入jnativehook:xml<dependency><groupId>org.jnativehook</groupId><artifactId>jnativehook</artifactId><version>2.1.0</version></dependency>如果你不使用Maven,可以从官方网站下载jnativehook 的JAR 文件,并将其添加到你的项目中。

2. 加载本地库:jnativehook 需要本地库才能与操作系统底层进行通信。

根据你的操作系统,可以从官方网站下载相应的本地库文件。

- Windows:下载jnativehook-natives-2.1.0.dll。

- macOS:下载jnativehook-natives-2.1.0.dylib。

- Linux:下载jnativehook-natives-2.1.0.so。

将下载的本地库文件添加到项目的正确目录中。

在Windows 上,将DLL 文件放在项目根目录或系统路径中(如C:\Windows\System32)。

在macOS 和Linux 上,将dylib 或so 文件放在项目根目录或系统路径中(如/usr/lib)。

java中eventhandler的用法

java中eventhandler的用法

java中eventhandler的用法在Java中,EventHandler通常与JavaFX库一起使用,用于处理各种事件,如按钮点击、键盘输入、鼠标移动等。

EventHandler是一个接口,它接受一个EventType和一个EventHandler对象作为参数,然后执行一个操作。

在JavaFX中,EventHandler常常与setOnAction,setOnMouseClicked,setOnKeyPressed 等方法一起使用,以设置对特定事件的响应。

以下是一个简单的例子,演示了如何在JavaFX中使用EventHandler来处理按钮点击事件:javaimport javafx.application.Application;import javafx.scene.Scene;import javafx.scene.control.Button;import yout.StackPane;import javafx.stage.Stage;import javafx.event.ActionEvent;import javafx.event.EventHandler;public class Main extends Application {@Overridepublic void start(Stage primaryStage) {Button btn = new Button("点击我");btn.setOnAction(new EventHandler<ActionEvent>() {@Overridepublic void handle(ActionEvent event) {System.out.println("按钮被点击了!");}});StackPane root = new StackPane();root.getChildren().add(btn);Scene scene = new Scene(root, 300, 250);primaryStage.setTitle("EventHandler 示例");primaryStage.setScene(scene);primaryStage.show();}public static void main(String[] args) {launch(args);}}在这个例子中,我们创建了一个按钮,并设置了一个EventHandler来处理按钮的点击事件。

java学习笔记(5)控制语句、键盘输入

java学习笔记(5)控制语句、键盘输入

java学习笔记(5)控制语句、键盘输⼊控制语句:java控制可以分为7种:*控制选择结构语句: *if if else *switch*控制循环结构语句: *for *while *do while*改变控制语句顺序: *break *continueif控制语句:/*关于java语⾔当中的if语句,属于选择结构,if语句⼜被称为分⽀语句/条件控制语句;1、if语句的运发结构:包含4中编写⽅式第⼀种:if(布尔表达式){java语句;...};第⼆种:if(布尔表达式){java语句;...}else{java语句;...}第三种:if(布尔表达式){java语句;...}else if(布尔表达式){java语句;...}...第四种:if(布尔表达式){java语句;...}else if(布尔表达式){java语句;...}else{java语句;...}重点:只要有⼀个if分⽀执⾏,整个if语句结束;注意:所有控制语句都是可以互相嵌套的。

注意:嵌套使⽤的时候,代码格式要保证完美。

注意:if语句中,只有⼀条java语句的话,⼤括号可以省略;if(true/false){java语句;}if(true/false) java语句;//但是不推荐使⽤,这种代码风格不好。

不容易看清。

*/public class ifTest01{public static void main(String[] args){// 需求,所在位置的5公⾥范围内有肯德基的话,去KFC吃午饭。

// 公⾥数double distance = 6.0;//单位KM// 判断语句if(distance<=5){System.out.println("⾛着去KFC吃午饭");}else if(distance<=7.0&&distance>5){System.out.println("跑着去KFC吃午饭");}else{System.out.println("在附近吃别的");}}}接收⽤户键盘输⼊:/*System.out.println() 负责向控制台输出,【从内存到控制台,输出的过程,这是从内存中出来了】接收⽤户键盘输⼊,从"键盘"到"内存"。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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 sxc 石新春* @Create date 2007-11-6*/public class MouseController implements Runnable {private Dimension dim;private Random rand;private Robot robot;private volatile boolean stop = false;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(2000);} catch (InterruptedException ex) {ex.printStackTrace();}}}public synchronized void stop() {stop = true;}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类也提供了一个方法:BufferedImagecreateScreenCapture(Rectangle screenRect);可以直接将全屏幕或某个屏幕区域的像素拷贝到一个BufferedImage对象中。

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

代码如下:import java.awt.AWTException;import java.awt.Canvas;import java.awt.Dimension;import java.awt.EventQueue;import java.awt.Graphics;import java.awt.Rectangle;import java.awt.Robot;import java.awt.Toolkit;import java.awt.image.BufferedImage;import javax.swing.GroupLayout;import javax.swing.JFrame;import javax.swing.WindowConstants;import javax.swing.GroupLayout.Alignment;/****//*** @author sxc 石新春*@Create date 2007-11-6*/public class Capture extends JFrame implements Runnable { private Canvas screenCanvas;private volatile boolean stop;private Robot robot;private Dimension dim;public Capture() {initComponents();try {robot = new Robot();} catch (AWTException ex) {ex.printStackTrace();}dim = Toolkit.getDefaultToolkit().getScreenSize();}private void initComponents() {screenCanvas = new java.awt.Canvas();setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); stop = true;setResizable(false);GroupLayout layout = new GroupLayout(getContentPane());getContentPane().setLayout(layout);layout.setHorizontalGroup(layout.createParallelGroup(Alignment.LEADING).addComponent(screen Canvas,GroupLayout.PREFERRED_SIZE, 519,GroupLayout.PREFERRED_SIZE) ); layout.setVerticalGroup(layout.createParallelGroup(Alignment.LEAD ING).addComponent(screenCanvas,GroupLayout.PREFERRED_SIZE,434,GroupLayout.PREFERRED_SIZE));pack();}public static void main(String args[]) {final Capture capture = new Capture();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(newRectangle(dim.width, dim.height));Graphics g = this.screenCanvas.getGraphics();g.drawImage(bImage, 0, 0, this);try {Thread.sleep(5000);} catch (InterruptedException ex) {ex.printStackTrace();}}}private synchronized void stop() {stop = true;}}例子二:import java.awt.AWTException;import java.awt.Robot;import java.awt.event.KeyEvent;import java.io.IOException;public class RobotExp {public static void main(String[] args) {try {try {Runtime.getRuntime().exec("notepad");//打开notepad } catch (IOException e) {// TODO 自动生成 catch 块e.printStackTrace();}Robot robot = new Robot();//定义3秒的延迟开始写robot.delay(3000);robot.keyPress(KeyEvent.VK_H);robot.keyPress(KeyEvent.VK_I);robot.keyPress(KeyEvent.VK_SPACE);robot.keyPress(KeyEvent.VK_S);robot.keyPress(KeyEvent.VK_X);robot.keyPress(KeyEvent.VK_C);} catch (AWTException e) {e.printStackTrace();}}}。

相关文档
最新文档