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);}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/37496.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/37496.shtml
英文地址,請注明出處:http://en.pswp.cn/news/37496.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

vue tree禁用和多選變為單選

禁用的話和后臺協調一下&#xff0c;參數中多返回一個disabled 多選變單選 在tree結構中加入一個方法 <el-treeaccordion:data"deptOptions":props"defaultProps"show-checkbox:expand-on-click-node"false":filter-node-method"filte…

windows bat 腳本實現FTP自動下載上傳

windows bat 腳本實現FTP自動下載上傳 1. 自動下載 # 示例&#xff1a;實現自動下載 echo Off echo open 192.168.137.102>>ftp.txt echo admin>>ftp.txt echo admin12345>>ftp.txt echo lcd D:\>>ftp.txt echo cd /admin/1>>ftp.txt echo bin…

k8s整合istio配置gateway入口、配置集群內部服務調用管理

一、 istio gateway使用demo kubectl apply -f - <<EOF apiVersion: networking.istio.io/v1alpha3 kind: Gateway metadata:name: ngdemo-gatewaynamespace: ssx spec:selector:istio: ingressgateway # use Istio default gateway implementationservers:- port:numbe…

碼銀送書第五期《互聯網廣告系統:架構、算法與智能化》

廣告平臺的建設和完善是一項長期工程。例如&#xff0c;谷歌早于2003年通過收購Applied Semantics開展Google AdSense 項目&#xff0c;而直到20年后的今天&#xff0c;谷歌展示廣告平臺仍在持續創新和提升。廣告平臺是負有營收責任的復雜在線平臺&#xff0c;對其進行任何改動…

Mysql—修改用戶密碼(重置密碼)

Mysql—修改用戶密碼&#xff08;重置密碼&#xff09; 1、登錄mysql 1 2 [rootlocalhost ~]# mysql -uroot -p123456 [rootlocalhost ~]# mysql -hlocalhost -uroot -p123456 如果忘記密碼&#xff0c;則跳過MySQL的密碼認證過程。步驟如下&#xff1a; 修改Mysql配置文件…

TypeScript教程(三)變量聲明

一、變量聲明 變量是一種使用方便的占位符&#xff0c;用于引用計算機內存地址&#xff0c;可以將變量看做存儲數據的容器 命名規則&#xff1a; 1.變量名稱可以包含數字和字母 2.除了下劃線_和美元$符號外&#xff0c;不能包含其他特殊字符&#xff0c;包括空格 3.變量名…

使用GUI Guider工具在MCU上開發嵌入式GUI應用 (1) - GUI Guider簡介及安裝

使用GUI Guider工具在MCU上開發嵌入式GUI應用 (1) - GUI Guider簡介及安裝 受限于每篇文章最多只能貼9張圖的限制&#xff0c;這個教程被拆分成了多篇文章連載發布&#xff0c;完整目錄結構如下圖x所示。后續會發布完整教程的pdf文件&#xff0c;敬請期待。 圖x 完整教程文檔…

機器學習 | Python實現KNN(K近鄰)模型實踐

機器學習 | Python實現KNN(K近鄰)模型實踐 目錄 機器學習 | Python實現KNN(K近鄰)模型實踐基本介紹模型原理源碼設計學習小結參考資料基本介紹 一句話就可以概括出KNN(K最近鄰算法)的算法原理:綜合k個“鄰居”的標簽值作為新樣本的預測值。更具體來講KNN分類過程,給定一個訓…

網絡安全(自學)

想自學網絡安全&#xff08;黑客技術&#xff09;首先你得了解什么是網絡安全&#xff01;什么是黑客&#xff01; 網絡安全可以基于攻擊和防御視角來分類&#xff0c;我們經常聽到的 “紅隊”、“滲透測試” 等就是研究攻擊技術&#xff0c;而“藍隊”、“安全運營”、“安全…

無服務器架構發布啦!

導讀Serverless 1.15.2 已發布。The Serverless Framework (無服務器架構&#xff09;允許你自動擴展、按執行付費、將事件驅動的功能部署到任何云。 目前支持 AWS Lambda、Apache OpenWhisk、Microsoft Azure&#xff0c;并且正在擴展以支持其他云提供商。 Serverless 降低了…

nodejs+vue+elementui電影訂票網站系統_wqc3k

電影訂票系統在國內有很多值得借鑒的例子&#xff0c;功能也都趨于完善&#xff0c;因此此次電影訂票系統將輕量化開發&#xff0c;要完成以下功能&#xff1a; &#xff08;1&#xff09;要支持完整的用戶注冊&#xff0c;登錄功能&#xff0c;賬號的管理通過管理員來實現。 &…

PHP中的16個危險函數

php中內置了許許多多的函數&#xff0c;在它們的幫助下可以使我們更加快速的進行開發和維護&#xff0c;但是這個函數中依然有許多的函數伴有高風險的&#xff0c;比如說一下的16個函數不到萬不得已不盡量不要使用&#xff0c;因為許多“高手”可以通過這些函數抓取你的漏洞。 …

【Spring】核心容器——集合注入

1、集合種類 數組 List Set Map Properties 2、配置 <bean id"bookDao" class"dao.impl.BookDaoImpl"><property name"array"><array><value>2</value><value>4</value><value>6</value&g…

Docker升級后,出現Error response from daemon: Unknown runtime specified docker-runc

現象&#xff1a;docker升級版本后&#xff0c;重啟docker服務出現&#xff1a; [rootDocker scripts]# docker start registry Error response from daemon: Unknown runtime specified docker-runc Error: failed to start containers: registry解決辦法&#xff1a; 改完之…

大數據Flink(六十三):SqlClient工具的使用

文章目錄 SqlClient工具的使用 一、???????入門

【獨立版】新零售社區團購電商系統生鮮水果商城興盛優選十薈團源碼

【獨立版】新零售社區團購電商系統生鮮水果商城興盛優選十薈團源碼

私有服務Nexus安裝

下載地址&#xff1a; 鏈接&#xff1a;https://pan.baidu.com/s/1xpOyRg7SfJsui5cL8PVRDg 提取碼&#xff1a;i574 解壓&#xff1a; tar -zxvf nexus-3.12.1-01-unix.tar.gz生成2個文件夾 nexus-3.12.1-01 和 sonatype-work用root用戶給普通用戶授權這2個文件夾的權限 例…

k8s認證詳解 k8s證書詳解 2023推薦

推薦閱讀 https://www.yii666.com/blog/478731.html?actiononAll 在 Kube-apiserver 中提供了很多認證方式&#xff0c;其中最常用的就是 TLS 認證&#xff0c;當然也有 BootstrapToken&#xff0c;BasicAuth 認證等&#xff0c;只要有一個認證通過&#xff0c;那么 Kube-api…

NeMo 聲紋識別VPR-實戰

聲紋識別(VPR) ,生物識別技術的一種,也稱為說話人識別 ,是從說話人發出的語音信號中提取聲紋信息,從應用上看,可分為: 說話人辨認(Speaker Identification):用以判斷某段語音是若干人中的哪一個所說的,是“多選一”問題;說話人確認(Speaker Verification):用以確認某…

Leetcode-每日一題【劍指 Offer 31. 棧的壓入、彈出序列】

題目 輸入兩個整數序列&#xff0c;第一個序列表示棧的壓入順序&#xff0c;請判斷第二個序列是否為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如&#xff0c;序列 {1,2,3,4,5} 是某棧的壓棧序列&#xff0c;序列 {4,5,3,2,1} 是該壓棧序列對應的一個彈出序列&#xf…