注意

        本文基于Window系统来进行讲解,该程序要求当前PC端微信处于运行状态

前提准备

配置PC端微信的快捷键

保持默认就好,这一步主要是为了避免出现微信快捷键与其他软件冲突时,修改快捷键后要针对性修改代码内容

Robot

该功能实现主要利用到 java.awt.Robot 类,它可以实现以下两种功能

  1. 模拟用户操作:Robot 类可以模拟用户的键盘输入、鼠标移动和点击,可以用于自动化测试、批量操作等场景。

  2. 控制键盘和鼠标:通过 Robot 类,可以实现对键盘和鼠标的控制,包括按键、释放按键、移动鼠标等操作。

Robot类主要函数

函数名 描述
keyPress(int keycode) 模拟按下指定键盘按键,使用键盘的键码(keycode)作为参数
keyRelease(int keycode) 模拟释放指定键盘按键
mouseMove(int x, int y) 将鼠标移动到指定的屏幕坐标位置(x, y)
mousePress(int buttons) 模拟按下指定的鼠标按键,使用常量来表示鼠标按键
mouseRelease(int buttons) 模拟释放指定的鼠标按键
mouseWheel(int wheelAmt) 模拟滚动鼠标滚轮,正值表示向前滚动,负值表示向后滚动
createScreenCapture(Rectangle rect) 截取指定矩形区域内的屏幕图像,并返回一个 BufferedImage 对象

定时提醒女友喝水代码实现

import java.awt.*;
import java.awt.datatransfer.*;
import java.awt.event.KeyEvent;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

public class Solution {
    public static void main(String[] args) throws ParseException {
        // 好友昵称
        String friendNickName = "一日三餐";
        // 发送内容
        String msg = "喝水时间到!";
        Timer timer = new Timer();
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        // 定时开始的时间,如果想要实现运行程序就开始发送,把这个时间设置在当前时间以后就行
        Date date = format.parse("2024-01-20 14:00:00");
        System.out.println("进入定时器");
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                try {
                    sendMsgforSp(friendNickName, msg);
                } catch (AWTException e) {
                    throw new RuntimeException(e);
                }
            }
        }, date, 1000 * 60 * 60); // 每隔一小时发送一次
        System.out.println("结束");
    }

    /**
     * 发送消息给好友
     *
     * @param friendNickName 指定好友
     * @param msg            消息内容
     */
    private static void sendMsgforSp(String friendNickName, String msg) throws AWTException {
        // 创建robot对象
        Robot robot = new Robot();
        // 第一步:打开微信 Ctrl + ALT + W
        robot.keyPress(KeyEvent.VK_CONTROL);
        robot.keyPress(KeyEvent.VK_ALT);
        robot.keyPress(KeyEvent.VK_W);
        // 释放Ctrl按键,像Ctrl,退格键,删除键这样的功能性按键,在按下后一定要释放
        robot.keyRelease(KeyEvent.VK_CONTROL);
        robot.keyRelease(KeyEvent.VK_ALT);
        // 该延迟不能少,否则无法搜索
        robot.delay(1000);

        // 第二步搜索好友
        // Ctrl + F 搜索指定好友
        robot.keyPress(KeyEvent.VK_CONTROL);
        robot.keyPress(KeyEvent.VK_F);
        robot.keyRelease(KeyEvent.VK_CONTROL);
        // 将好友昵称发送到剪切板
        Clipboard clip = Toolkit.getDefaultToolkit().getSystemClipboard();
        Transferable tText = new StringSelection(friendNickName);
        clip.setContents(tText, null);
        // 以下两行按下了ctrl+v,完成粘贴功能
        robot.keyPress(KeyEvent.VK_CONTROL);
        robot.keyPress(KeyEvent.VK_V);
        robot.keyRelease(KeyEvent.VK_CONTROL);
        robot.delay(1000);
        robot.keyPress(KeyEvent.VK_ENTER);
        robot.delay(1000);

        // 第三步发送消息
        // 发送消息
        // 将字符串复制到剪切板
        Transferable tText1 = new StringSelection(msg);
        clip.setContents(tText1, null);
        // 以下两行按下了ctrl+v,完成粘贴功能
        robot.keyPress(KeyEvent.VK_CONTROL);
        robot.keyPress(KeyEvent.VK_V);
        robot.keyRelease(KeyEvent.VK_CONTROL);
        // 回车发送
        robot.keyPress(KeyEvent.VK_ENTER);
        robot.delay(1000);

        // 第四步,退出微信界面
        robot.keyPress(KeyEvent.VK_CONTROL);
        robot.keyPress(KeyEvent.VK_ALT);
        robot.keyPress(KeyEvent.VK_W);
        // 释放Ctrl按键,像Ctrl,退格键,删除键这样的功能性按键,在按下后一定要释放
        robot.keyRelease(KeyEvent.VK_CONTROL);
        robot.keyRelease(KeyEvent.VK_ALT);
    }
}

                这个功能还是一个很小很小的雏形,后续我们可以继续往上添加功能,比如增加好友昵称的配置化,发送消息的配置化,发送消息的时间添加定时等等,如果你有更好的点子也可以往上添加,比如七夕给女朋友定时发个甜言蜜语之类的,如果你有对象的话。(狗头)

Logo

一站式 AI 云服务平台

更多推荐