java实现简单连点器2

这个版本与上个简单连点器区别如下:

这个程序创建了一个窗口,里面包含一个“开始”按钮和一个“停止”按钮。当点击“开始”按钮时,程序会启动一个线程,在线程中循环执行点击和键入操作,直到达到指定的点击次数和键入次数。点击操作通过调用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); // 显示窗口
    }
}

这个连点器可以按顺序点击多个位置或者按下多个按键。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

超级小狗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值