这个版本与上个简单连点器区别如下:
这个程序创建了一个窗口,里面包含一个“开始”按钮和一个“停止”按钮。当点击“开始”按钮时,程序会启动一个线程,在线程中循环执行点击和键入操作,直到达到指定的点击次数和键入次数。点击操作通过调用clickMouse方法来实现,键入操作通过调用typeKey方法来实现。点击和键入的坐标、间隔时间和次数都可以在代码中进行设置。点击和键入操作的具体实现是通过调用Robot对象的方法来实现的,比如mouseMove、mousePress、mouseRelease、keyPress和keyRelease等。当点击“停止”按钮时,程序会中断执行线程。
import java.awt.AWTException;
import java.awt.Robot;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class SimpleDotter extends JFrame {
private JButton startButton = new JButton("开始"); // 创建一个“开始”按钮组件
private JButton stopButton = new JButton("停止"); // 创建一个“停止”按钮组件
private JPanel panel = new JPanel(); // 创建一个面板容器
private Robot robot; // 创建一个Robot对象,用于模拟鼠标和键盘输入
private int clickCount = 0; // 点击次数
private int keyTypeCount = 0; // 键入次数
public SimpleDotter() {
super("鼠标连点器"); // 设置窗口标题
setSize(400, 250); // 设置窗口大小
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 设置窗口关闭时退出程序
// 初始化Robot对象
try {
robot = new Robot();
} catch (AWTException e) {
e.printStackTrace();
}
// 设置布局和组件位置
panel.setLayout(null); // 设置布局为null布局,即手动设置组件位置
startButton.setBounds(50, 120, 100, 30); // 设置“开始”按钮组件位置和大小
stopButton.setBounds(200, 120, 100, 30); // 设置“停止”按钮组件位置和大小
panel.add(startButton); // 将“开始”按钮组件添加到面板容器中
panel.add(stopButton); // 将“停止”按钮组件添加到面板容器中
add(panel); // 将面板容器添加到窗口中
// 给按钮添加事件监听器
startButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// 开始执行点击操作
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
clickCount = 0; // 重置点击次数
keyTypeCount = 0; // 重置键入次数
int clickX1 = 200, clickY1 = 200, clickDelay1 = 1000, clickCount1 = 5; // 点击位置1的坐标、间隔、次数
int clickX2 = 400, clickY2 = 400, clickDelay2 = 1000, clickCount2 = 3; // 点击位置2的坐标、间隔、次数
int keyDelay = 500, keyTypeCount1 = 3; // 键入间隔和次数
while (clickCount < clickCount1 || keyTypeCount < keyTypeCount1) { // 点击和键入次数都未达到要求时执行
if (clickCount < clickCount1) { // 如果点击次数未达到要求,则继续点击
clickMouse(clickX1, clickY1, clickDelay1); // 点击位置1
clickCount++; // 增加点击次数
if (clickCount % clickCount2 == 0) { // 每点击clickCount2次位置1时,再点击位置2
clickMouse(clickX2, clickY2, clickDelay2); // 点击位置2
}
}
if (keyTypeCount < keyTypeCount1) { // 如果键入次数未达到要求,则继续键入
typeKey(KeyEvent.VK_H, keyDelay); // 键入'H'
typeKey(KeyEvent.VK_E, keyDelay); // 键入'E'
typeKey(KeyEvent.VK_L, keyDelay); // 键入'L'
typeKey(KeyEvent.VK_L, keyDelay); // 键入'L'
typeKey(KeyEvent.VK_O, keyDelay); // 键入'O'
keyTypeCount++; // 增加键入次数
}
}
}
});
thread.start(); // 启动线程
}
});
stopButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// 中断执行线程
Thread.currentThread().interrupt();
}
});
}
// 点击鼠标的方法,参数x和y表示坐标,参数delay表示间隔时间(毫秒)
private void clickMouse(int x, int y, int delay) {
robot.mouseMove(x, y); // 移动鼠标到指定坐标
robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); // 模拟鼠标按下左键
robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); // 模拟鼠标松开左键
robot.delay(delay); // 等待一段时间
}
// 键盘输入的方法,参数key表示要输入的键位代码,参数delay表示间隔时间(毫秒)
private void typeKey(int key, int delay) {
robot.keyPress(key); // 模拟按下指定键位
robot.keyRelease(key); // 模拟松开指定键位
robot.delay(delay); // 等待一段时间
}
public static void main(String[] args) {
SimpleDotter clicker = new SimpleDotter(); // 创建一个MouseClicker对象
clicker.setVisible(true); // 显示窗口
}
}
这个连点器可以按顺序点击多个位置或者按下多个按键。