JAVA 鼠标控制与键盘输入控制

这篇具有很好参考价值的文章主要介绍了JAVA 鼠标控制与键盘输入控制。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

核心类:java.awt.Robot

该类是JDK定义的电脑系统的抽象类,可以用来模拟实现鼠标点击与键盘输入等信息

简单实现一个自动抢票代码:

Robot rt = new Robot();

//可以认为是操作间隔的停歇时间,比如等待页面加载,等弹框内容展示等
rt.delay(1000);

//鼠标移动到指定位置
rt.mouseMove(876,231);


//点击动作由下压+回弹组成
//点击按下去
rt.mousePress(InputEvent.BUTTON1_MASK);
rt.delay(100);
//放开回弹
rt.mouseRelease(InputEvent.BUTTON1_MASK);


//copy黏贴文本
Clipboard clip = Toolkit.getDefaultToolkit().getSystemClipboard();
String[] authors = msgArr.get(getRandomIntNum()).split("[,]");
Transferable text = new StringSelection(authors[0]);
//将消息数组中的文本copy到粘贴板,使用ctrl+V即可完成粘贴
clip.setContents(text, null);

//组合键使用ctrl+V,控制电脑完成粘贴动作
rt.keyPress(KeyEvent.VK_CONTROL);
rt.keyPress(KeyEvent.VK_V);


//获取鼠标坐标
Point point = java.awt.MouseInfo.getPointerInfo().getLocation();
System.out.println("" + point.x+" , "+point.y);


//实际使用时配合线程调度
/**
* Launch the application.
*
* 实时获取鼠标坐标
*/
public static void main(String[] args) {
    try {
        MouseInfo info_frame = new MouseInfo();
        info_frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        info_frame.setVisible(true);
        info_frame.setAlwaysOnTop(true);
        Timer timer = new Timer();
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                Point point = java.awt.MouseInfo.getPointerInfo().getLocation();
                System.out.println("" + point.x+" , "+point.y);
                try {
                    Thread.sleep(3000L);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }, 100, 100);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

鼠标点击模拟时 有三种按键类型:

InputEvent.BUTTON1_MASK 左键 (食指点击)

InputEvent.BUTTON2_MASK 中键 (滚轮)

InputEvent.BUTTON3_MASK 右键(中指点击)

WIN10 系统桌面坐标拾取

得到的信息需要根据屏幕--显示设置--缩放与布局的百分比进行计算

当桌面缩放与布局 设置100%时,直接使用鼠标拾取的坐标 X,Y 即可

当桌面缩放与布局 设置125%时,需要使用计算后的位置坐标 X/125 ,Y/125文章来源地址https://www.toymoban.com/news/detail-648364.html

package com.test.domain;

import java.awt.*;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.StringSelection;
import java.awt.datatransfer.Transferable;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class Operation {
    //时间间隔 1s
    final static  int DELAY=1000;

    private static List<String> msgArr=new ArrayList<String>();

    public static int getRandomIntNum() {
        int max=10;
        int min=1;
        Random random = new Random();
        return random.nextInt(max)%(max-min+1) + min;
    }
    /**
     * 用法简介:脚本程序跑起来之后鼠标选中需要轰炸得聊天窗口,需要聊天窗口能获取到鼠标得焦点
     *
     * @param args
     * @throws AWTException
     */
    public static void main1(String[] args) throws AWTException {
        //轰炸内容
        for (int i = 0; i < 10; i++) {
            String emoj="[炸弹] [炸弹] [炸弹] [炸弹] [炸弹] [炸弹] [炸弹][炸弹] [炸弹] ";
            msgArr.add("轰炸机,消息轰炸 ->"+i+emoj);
        }
        Robot robot = new Robot();
        robot.delay(5000);
        Clipboard clip = Toolkit.getDefaultToolkit().getSystemClipboard();
        String[] authors = msgArr.get(getRandomIntNum()).split("[,]");
        //循环轰炸
        for (int j = 0; j < 100; j++){
            for (int i = 0; i < authors.length; i++) {
                String str1 = authors[i];
                Transferable text = new StringSelection(str1);
                clip.setContents(text, null);
                robot.keyPress(KeyEvent.VK_CONTROL);
                robot.keyPress(KeyEvent.VK_V);
                robot.keyRelease(KeyEvent.VK_CONTROL);
                robot.delay(100);
                robot.keyPress(KeyEvent.VK_ENTER);
            }
        }
    }


    /**
     * 用法简介:脚本程序跑起来之前需要打开需要轰炸的对方聊天窗口,并全屏
     * 注:根据实际系统设置不同使用前需要将自己桌面缩放与布局大小调整为100%
     *     另需要用mouseInfo 工具类获取到自己电脑上面发送 钉 消息的几个操作按钮坐标
     *     1.聊天窗口中的 DING一下按钮 鼠标点击坐标
     *     2.DING一下  窗口文本输入框位置坐标
     *     3.DING一下 发送按钮鼠标点击坐标
     *
     * @param args
     * @throws AWTException
     */
    public static void main(String[] args) throws AWTException {
        //轰炸内容
        for (int i = 0; i < 10; i++) {
            String emoj = "[炸弹] [炸弹] [炸弹] [炸弹] [炸弹] [炸弹] [炸弹][炸弹] [炸弹] ";
            msgArr.add("轰炸机,消息轰炸 ->" + i + emoj);
        }
        Robot robot = new Robot();
        robot.delay(1000);

        //循环轰炸
        for (int j = 0; j < 3; j++) {
            robot.mouseMove(650, 880);
            Clipboard clip = Toolkit.getDefaultToolkit().getSystemClipboard();
            String[] authors = msgArr.get(getRandomIntNum()).split("[,]");
            //钉钉聊天框钉按钮鼠标点击位置坐标:819,798
            Danji(robot, 650, 880,1500);
            //钉窗口文本输入鼠标点击位置坐标:551,399
            Danji(robot, 1132, 466,100);
            Danji(robot, 1132, 466,100);
            Transferable text = new StringSelection(authors[0]);
            clip.setContents(text, null);
            robot.keyPress(KeyEvent.VK_CONTROL);
            robot.keyPress(KeyEvent.VK_V);
            robot.delay(1000);
            //钉消息发送按钮鼠标点击位置坐标:489,891
            Danji(robot, 576, 835,300);
        }
    }



    //鼠标移动到指定坐标,然后单击
    public  static  void Danji(Robot rt,int x, int y,int times){
        rt.mouseMove(-1,-1);//初始化
        rt.delay(100);
        rt.mouseMove(x,y);//制动到指定位置
        rt.delay(100);
        pressMouse(rt, InputEvent.BUTTON1_MASK,times);
    }

    //鼠标点击事件
    public  static  void pressMouse(Robot rt,int m,int times){
        rt.mousePress(m);
        rt.delay(100);
        rt.mouseRelease(m);
        rt.delay(times);
        System.out.printf("鼠标点击完成"+m);
    }

    //将指定内容粘贴到粘贴板 然后ctrl+v
    public static void outPut(String str,Robot rt){
        StringSelection selection = new StringSelection(str);
        Toolkit.getDefaultToolkit().getSystemClipboard().setContents(selection,selection);
        keyPressWithCotrl(rt,KeyEvent.VK_V);
    }

    //ctrl组合键 相当于按下CTRL再按下传入的key值
    public  static  void keyPressWithCotrl(Robot rt,int key){
        rt.keyPress(KeyEvent.VK_CONTROL);
        rt.keyPress(key);
        rt.keyRelease(KeyEvent.VK_CONTROL);
        rt.keyRelease(key);
        rt.delay(DELAY);
    }

}
package com.test.domain;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import java.awt.Font;
import java.awt.Point;
import java.util.Timer;
import java.util.TimerTask;
import java.awt.Color;
public class MouseInfo extends JFrame {
    private final JPanel contentPanel = new JPanel();
    JLabel value_x = null;
    JLabel value_y = null;
    /**
     * Launch the application.
     *
     * 实时获取鼠标坐标
     */
    public static void main(String[] args) {
        try {
            MouseInfo info_frame = new MouseInfo();
            info_frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            info_frame.setVisible(true);
            info_frame.setAlwaysOnTop(true);
            Timer timer = new Timer();
            timer.schedule(new TimerTask() {
                @Override
                public void run() {
                    Point point = java.awt.MouseInfo.getPointerInfo().getLocation();
                    System.out.println("" + point.x+" , "+point.y);
                    try {
                        Thread.sleep(3000L);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }, 100, 100);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * Create the dialog.
     */
    public MouseInfo() {
        setTitle("\u9F20\u6807\u5750\u6807\u83B7\u53D6\u5668");
        setBounds(100, 100, 217, 156);
        getContentPane().setLayout(new BorderLayout());
        contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
        getContentPane().add(contentPanel, BorderLayout.CENTER);
        contentPanel.setLayout(null);

        JLabel lblx = new JLabel("\u5750\u6807x:");
        lblx.setFont(new Font("宋体", Font.PLAIN, 15));
        lblx.setBounds(22, 27, 66, 31);
        contentPanel.add(lblx);

        JLabel lbly = new JLabel("\u5750\u6807y:");
        lbly.setFont(new Font("宋体", Font.PLAIN, 15));
        lbly.setBounds(22, 68, 66, 31);
        contentPanel.add(lbly);

        value_x = new JLabel("0");
        value_x.setForeground(Color.BLUE);
        value_x.setFont(new Font("宋体", Font.PLAIN, 20));
        value_x.setBounds(82, 27, 66, 31);
        contentPanel.add(value_x);

        value_y = new JLabel("0");
        value_y.setForeground(Color.BLUE);
        value_y.setFont(new Font("宋体", Font.PLAIN, 20));
        value_y.setBounds(82, 68, 66, 31);
        contentPanel.add(value_y);
    }
}

到了这里,关于JAVA 鼠标控制与键盘输入控制的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 34_输入设备键盘鼠标你得会

    键盘和鼠标是个人计算机中常用的输入设备。通过键盘可以将字母、数字、标点符号等输入计算机中,从而向计算机发出命今;鼠标可以对屏幕上的光标进行定位,并通过鼠标按钮和滚轮对光标所处位置的屏幕元素进行操作。一个应用程序应该响应用户的键盘和鼠标输入事件。

    2024年01月22日
    浏览(34)
  • Unity Input输入类-鼠标键盘检测

    当你开发Unity游戏时,与用户的输入交互是非常重要的。Unity提供了丰富的输入类来帮助你获取用户的输入,并做出相应的响应。在本文中,我将会向你介绍Unity中的输入类,包括Input、KeyCode、MouseButton和Touch等。 Input类 Input类是Unity中最基础的输入类,它可以获取各种类型的输

    2024年02月11日
    浏览(52)
  • unity3D 鼠标键盘输入

    一、鼠标键盘输入 游戏的输入可以来自于鼠标,键盘,触摸屏,游戏手柄 显示一个Vector3类型的xyz的鼠标位置。 Input.GetButtonDown(0):0代表鼠标左键,1代表鼠标右键,如果鼠标左键按下返回true。 Input.GetKeyDown(\\\"space\\\"): 检测空格是否按下。 更多操作可以查看Unity Script API( UnityE

    2024年02月10日
    浏览(80)
  • 【学习笔记】unity脚本学习(四)【inputManager、键盘输入、鼠标输入、Raycast】

    参考:极客学院unity3d教程 inputManager Horizontal虚拟轴的各个属性含义(摘选自ChatGpt,部分回答不准确) Name :虚拟轴的名称,用于在代码中访问该虚拟轴。这个名称应该是唯一的,用于区分其他虚拟轴。 Descriptive Name :描述虚拟轴的名称,用于在Inspector中显示。这个名称通常

    2024年02月15日
    浏览(38)
  • Selenium用法详解【键盘控制】【JAVA爬虫】

          本文主要简介如何使用java代码利用Selenium 控制浏览器中需要用到的键盘操作。Selenium 是一种用于自动化浏览器操作和测试的工具,可以通过编程语言与浏览器进行交互。它提供了一组 API 和库,用于模拟用户在浏览器中的各种行为,如点击、输入、导航等。下面将详细

    2024年02月09日
    浏览(61)
  • c++ 键盘/鼠标交互+特殊输入/输出+窗口常用函数

    需要头文件: 或: 函数: 使用方法: 1.if(KEY_DOWN(某个键))或if(KEY_UP(某个键)) 检测该键是否按下/未按下 2.keybd_event(某个键,0,0,0);或keybd_event(某个键,0,KEYEVENTF_KEYUP,0); 使该键是否按下/弹起(实际使用可参照下文鼠标函数click_left()) 键码表(替换“某个键”): 函数: 使用方法: gx()或

    2024年02月09日
    浏览(57)
  • Java怎么通过键盘实现动态控制小球移动

    这一操作依赖于Java的事件机制,键盘按键会触发一个事件, 我们捕获到这个事件,然后做相应的处理。 所谓动态移动其实就是根据坐标不断地重新绘制。 思路 定义一个MyPanel类 继承 JPanel 然后在MyPanel的paint方法里画出一个小球,将它的坐标设置为全局变量 让我们的面板类实

    2024年02月12日
    浏览(41)
  • 【Unity】Input——检测鼠标、键盘、手柄输入、鼠标在屏幕上的位置等等

    Unity提供的 更方便的 控制对象的 位移和旋转的解决方案 这个Axis是可以自定义的:

    2024年02月11日
    浏览(88)
  • Linux输入设备应用编程(键盘,按键,触摸屏,鼠标)

    目录 一 输入设备编程介绍 1.1 什么是输入设备呢?  1.2 什么是输入设备的应用编程?   1.3 input子系统 1.4  数据读取流程 1.5 应用程序如何解析数据 1.5.1 按键类事件:  1.5.2 相对位移事件  1.5.3 绝对位移事件  二 读取 struct input_event数据   本章学习Linux输入设备的应用编程

    2024年02月05日
    浏览(51)
  • Qt3D 输入类处理鼠标键盘动作

    Qt3D模块中的输入类用于处理用户输入,比如鼠标、键盘等输入事件。 ```cpp #include Qt3DExtras #include Qt3DInput #include Qt3DCore #include Qt3DRender #include Qt3DLogic #include Qt3DExtras int main(int argc, char *argv[]) {     QApplication app(argc, argv);     // 创建Qt3D窗     Qt3DExtras::Qt3DWindow view;     // 创建3

    2024年02月02日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包