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() {@Overridepublic 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
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 {//时间间隔 1sfinal 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,798Danji(robot, 650, 880,1500);//钉窗口文本输入鼠标点击位置坐标:551,399Danji(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,891Danji(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+vpublic 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() {@Overridepublic 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 鼠标控制与键盘输入控制
核心类:java.awt.Robot 该类是JDK定义的电脑系统的抽象类,可以用来模拟实现鼠标点击与键盘输入等信息 简单实现一个自动抢票代码: Robot rt new Robot();//可以认为是操作间隔的停歇时间,比如等待页面加载,等弹框内容展示等 r…...
VB+SQL宿舍管理系统设计与实现
摘要 统是采用Visual Basic作为前台开发工具,SQL Server作为后台数据库平台的基于C/S的两层模式的管理系统。宿舍管理系统是目前各所高校后勤管理之中的重要部分,如何能科学有效的开展好宿舍管理部分的工作,是当前高校领导人和后勤管理人员关心的问题。因此,宿舍管理部分工…...
自律人生:戒断视频、游戏、小说、躺在床上不玩手机、睡觉前总结和冥想(提升注意力、专注度)
以下是一些方法来戒断视频、游戏、小说、躺在床上不玩手机,以及提高注意力和专注力。 制定计划 制定一个详细的计划,包括要戒断的东西、时间表以及对于成功戒断的奖励。这将帮助你保持目标,让你更容易达到成功。 找到替代品 尝试找到其他…...
学习笔记十四:K8S最小调度单元POD概述
K8S最小调度单元POD概述 k8s核心资源Pod介绍Pod是什么Pod如何管理多个容器Pod网络Pod存储代码自动发版更新收集业务日志 Pod工作方式自主式Pod控制器管理的Pod(防误删除) 如何基于Pod运行应用 k8s核心资源Pod介绍 K8s官方文档:https://kubernetes.io/ K8s中文官方文…...
ARM--day2(cpsr、spsr、数据搬移指令、移位操作指令、位运算操作指令、算数运算指令、比较指令、跳转指令)
.text .global _gcd _gcd:mov r0,#9mov r1,#15b loop loop:cmp r0,r1beq stopsubhi r0,r1bhi loopsubcc r1,r0bcc loopstop:b stop.end用for循环实现1~100之间和5050 .text .global _gcd _gcd:mov r0,#0x0mov r1,#0x1mov r2,#0x64b loop loop:cmp r1,r2bhi stopadd r0,r0,r1ad…...
idea报错:java: 程序包org.springframework.web.bind.annotation不存在
这个错误通常都是maven仓库的问题,试了网上很多方法,都没有解决,如果大家有遇到这个问题,且试了很多方法之后都没有解决,不妨可以试试我这个方法 先编译一下已经写好的代码,这时候会出现以上报错ÿ…...
Android平台GB28181设备接入端如何实现多视频通道接入?
技术背景 我们在设计Android平台GB28181设备接入模块的时候,有这样的场景诉求,一个设备可能需要多个通道,常见的场景,比如车载终端,一台设备,可能需要接入多个摄像头,那么这台车载终端设备可以…...
Evaluation Warning: The document was created with Spire.Doc for JAVA.
spire.doc-5.4.10.jar 生成PDF有广告语水印【Evaluation Warning: The document was created with Spire.Doc for JAVA.】 <!-- maven库访问不了 https://mvnrepository.com/artifact/e-iceblue/spire.doc e-iceblue库才能访问 https://repo.e-iceblue.cn/repository/maven…...
Java“牵手”根据关键词搜索(分类搜索)京东商品列表页面数据获取方法,京东API实现批量商品数据抓取示例
京东商城是一个网上购物平台,售卖各类商品,包括服装、鞋类、家居用品、美妆产品、电子产品等。要获取京东商品列表和商品详情页面数据,您可以通过开放平台的接口或者直接访问京东商城的网页来获取商品详情信息。以下是两种常用方法的介绍&…...
AIGC|AGI究竟是什么?为什么大家都在争先入场?
一、AI大语言模型进入爆发阶段 2022年12月ChatGPT突然爆火,原因是其表现出来的智能化已经远远突破了我们的常规认知。虽然其呈现在使用者面前仅仅只是一个简单的对话问答形式,但是它的内容化水平非常强大,甚至在某些方面已经超过人类了&#…...
【数学建模】--主成分分析
本讲将介绍主成分分析(Principal Component Analysis,PCA),主成分分析是一种降维算法,它能将多个指标转换为少数几个主成分,这些主成分是原始变量的线性组合,且彼此之间互不相关,其能…...
gitee(码云)如何生成并添加公钥,以及配置用户信息
一,简介 在使用Gitee的时候,公钥是必须的,无论是克隆还是上传。本文主要介绍如何本地生成和添加公钥到服务器,然后配置自己的用户信息,方便日后拉取与上传代码。 二,步骤介绍 2.1 本地生成公钥 打开git ba…...
wangeditor上传图片并展示在输入框内方法(vue3)
安装vue3组件 yarn add @wangeditor/editor-for-vue@next # 或者 npm install @wangeditor/editor-for-vue@next --save 页面中创建一个新的组件 <template><div style="border: 1px solid #ccc; text-align: left"><Toolbar style="border-…...
UGUI基础游戏对象Canvas
一.画布Canvas对象概述 画布是一种带有画布组件的游戏对象,所有 UI 元素都必须是此类画布的子项。 创建新的 UI 元素(如使用菜单 GameObject > UI > Image 创建图像)时,如果场景中还没有画布,则会自动创建画布。…...
PK Nounique CASCADE DROP INDEX keep index
Explicit Control Over Indexes when Creating, Disabling, or Dropping PK/Unique Constraints (Doc ID 139666.1)编辑To Bottom PURPOSEIn Oracle 9i, the DBA has an explicit control over how indexes are affectedwhile creating, disabling, or dropping Primary Ke…...
【Antd】实现Table组件行点击,解决某一列不触发行点击
今天有个新需求,点击table行,执行一些操作。实现过程中遇到了:点击操作列、操作列内按钮会冒泡触发行点击。antd版本:1.7.8 一、解决方案 customRow <a-table :customRow"handleClickRow" :data-source"data_li…...
Kafka3.0.0版本——Broker( 退役旧节点)示例
目录 一、服务器信息二、先启动4台zookeeper,再启动4台kafka三、通过PrettyZoo工具验证启动的kafka是否ok四、查看4台kafka集群节点上是否存在创建的名称为news的主题五、退役旧节点5.1、执行负载均衡操作5.2、 执行停止命令5.3、再次查看kafka中的创建过的名称为ne…...
【Rust】Rust学习 第十二章一个 I/O 项目:构建一个命令行程序
本章既是一个目前所学的很多技能的概括,也是一个更多标准库功能的探索。我们将构建一个与文件和命令行输入/输出交互的命令行工具来练习现在一些你已经掌握的 Rust 技能。 Rust 的运行速度、安全性、单二进制文件输出和跨平台支持使其成为创建命令行程序的绝佳选择…...
【MySQL--->表的操作】
文章目录 [TOC](文章目录) 一、创建表二、查看表三、修改表四、删除表drop table 表名;  一、创建表 语句格式:create table 表名(列名 类型,…)字符集 校验规则 存储引擎;字符集和校…...
PyTorch从零开始实现ResNet
文章目录 代码实现参考 代码实现 本文实现 ResNet原论文 Deep Residual Learning for Image Recognition 中的50层,101层和152层残差连接。 代码中使用基础残差块这个概念,这里的基础残差块指的是上图中红色矩形圈出的内容:从上到下分别使用…...
mPLUG-Owl3-2B多模态推理优化教程:FP16加载+SDPA注意力提速实测
mPLUG-Owl3-2B多模态推理优化教程:FP16加载SDPA注意力提速实测 1. 开篇:为什么需要优化多模态推理? 如果你尝试过在个人电脑上运行多模态AI模型,很可能遇到过这些问题:显存不足导致程序崩溃、推理速度慢得让人着急、…...
Nginx 高可用、负载均衡与 HTTPS 配置实战(一)
Nginx作为当下最主流的开源反向代理与Web服务器,凭借轻量、高性能、高并发的特性,成为企业级服务入口的首选方案。在生产环境中,单节点Nginx存在单点故障风险,并发请求过高会导致服务卡顿,同时HTTP明文传输存在数据泄露…...
IntelliJ IDEA 彻底AI化!2026.1 版重磅发布,太香了
备受期待的 IntelliJ IDEA 2026.1 版本现已正式发布!本次更新带来了多项重磅功能,从 AI 智能体深度集成到主流语言框架的一流支持,全方位提升开发效率。无论您是 Java、Kotlin 开发者,还是涉及 C/C、TypeScript 的多语言项目开发者…...
OpenSSL实战指南:在VSCode中搭建C语言开发环境
1. 为什么要在VSCode中配置OpenSSL开发环境 OpenSSL作为业界广泛使用的加密工具库,几乎支撑着互联网安全通信的半壁江山。从HTTPS协议到数字证书验证,从数据加密到安全传输,OpenSSL的身影无处不在。对于C语言开发者来说,掌握OpenS…...
源码级解耦:企业级 AI 视频平台的微服务架构设计与二次开发实战
引言:定制化需求的“最后一公里”难题 在安防 AI 项目的交付链条中,集成商和技术团队往往处于一个尴尬的境地:市面上的成熟 SaaS 平台虽然开箱即用,但缺乏核心的源码级定制能力,一旦遇到客户特殊的业务逻辑(…...
告别原生依赖:用Docker在Jetson Nano上封装海康威视相机SDK与Python推理应用
边缘视觉革命:基于Docker的海康威视相机SDK与Python推理应用容器化实践 在工业检测、智能安防和自动驾驶等边缘计算场景中,海康威视工业相机与NVIDIA Jetson Nano的组合已成为经典配置。然而,当团队需要批量部署数十台设备时,传统…...
高效Windows注册表分析工具实战指南:如何用RegRipper3.0突破注册表数据提取瓶颈?
高效Windows注册表分析工具实战指南:如何用RegRipper3.0突破注册表数据提取瓶颈? 【免费下载链接】RegRipper3.0 RegRipper3.0 项目地址: https://gitcode.com/gh_mirrors/re/RegRipper3.0 ▶ 核心价值:为什么RegRipper3.0是注册表分析…...
华为2288H V3服务器iBMC配置全攻略:从默认密码到ESXi安装一步到位
华为2288H V3服务器iBMC与ESXi部署实战指南 对于企业IT基础设施团队而言,华为2288H V3服务器的灵活配置与高效管理能力使其成为数据中心建设的理想选择。本文将深入解析从基础配置到虚拟化平台部署的全流程,特别针对iBMC智能管理系统和VMware ESXi安装提…...
英特尔I350网卡PXE功能深度配置:从FLASH状态查询到端口精准控制
1. 英特尔I350网卡PXE功能基础认知 第一次接触服务器网卡PXE配置的朋友可能会觉得这是个"黑盒子"。其实简单来说,PXE(Preboot eXecution Environment)就是让计算机在没装系统的情况下,通过网络启动并安装操作系统的技术…...
从数据到诊断:深度学习驱动下的多模态抑郁症识别技术全景
1. 抑郁症识别技术的现状与挑战 抑郁症被称为21世纪的"心灵感冒",全球约有3.5亿患者。传统诊断主要依赖医生问诊和量表评估,这种方式存在主观性强、耗时长的痛点。我在参与某三甲医院精神科数字化改造项目时,亲眼见证了一位资深医生…...
