注意
本文基于Window系统来进行讲解,该程序要求当前PC端微信处于运行状态
前提准备
配置PC端微信的快捷键
保持默认就好,这一步主要是为了避免出现微信快捷键与其他软件冲突时,修改快捷键后要针对性修改代码内容
Robot 类
该功能实现主要利用到 java.awt.Robot 类,它可以实现以下两种功能
-
模拟用户操作:Robot 类可以模拟用户的键盘输入、鼠标移动和点击,可以用于自动化测试、批量操作等场景。
-
控制键盘和鼠标:通过 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);
}
}
这个功能还是一个很小很小的雏形,后续我们可以继续往上添加功能,比如增加好友昵称的配置化,发送消息的配置化,发送消息的时间添加定时等等,如果你有更好的点子也可以往上添加,比如七夕给女朋友定时发个甜言蜜语之类的,如果你有对象的话。(狗头)