Java qq定时给指定qq好友发送消息

效果:

在这里插入图片描述

AutoSendQQMessageUtils.java
import java.awt.AWTException;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.StringSelection;
import java.awt.datatransfer.Transferable;
import java.awt.event.KeyEvent;
import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;


public class AutoSendQQMessageUtils {
    /**
	 * 
	 * @param qq: 好友qq号
	 * @param message:要发送的信息
	 * @param num: 消息发送的次数
	 * @param hour:时
	 * @param minute:分
	 * @param second:秒
	 *   可能会有五秒左右的差距
	 */
    public static void start(String qq, String message, int num, int hour, int minute, int second) {
        Calendar calendar = Calendar.getInstance();
        
        calendar.set(Calendar.HOUR_OF_DAY, hour); // 控制时
        calendar.set(Calendar.MINUTE, minute);       // 控制分
        calendar.set(Calendar.SECOND, second-5);       // 控制秒 提前五秒执行
        calendar.set(Calendar.MILLISECOND,20);     //毫秒
        
        Date time = calendar.getTime();         // 得出执行任务的时间,此处为今天的11:30:00
        Timer timer = new Timer();
        
        //schedule(任务, 指定时间, 多少毫秒后继续执行)
        timer.schedule(new TimerTask() {
            public void run() {
            	try {
					send(qq, message, num);
				} catch (AWTException e) {
					e.printStackTrace();
				}
            }
        }, time, 1000 * 60 * 60 * 24);// 这里设定将延时每天固定执行
    }

	
    /**
	 * 
	 * @param qq: 好友qq号
	 * @param message:要发送的信息
	 * @param num: 消息发送的次数
	 * @throws AWTException
	 *   打开qq 并给指定好友发消息
	 */
	private static void send(String qq, String message, int num) throws AWTException {
		
		// tencent://message/?uin=3454340392&Site=fdfdf&Menu=yes
		try {
			String url = "tencent://message/?uin=" + qq + "&Site=fdfdf&Menu=yes";//设置调用聊天框url
			String cmd = "explorer \"" +url+"\"";//通过cmd命令使用默认浏览器访问url
		    
			//执行cmd命令
			Process proc = Runtime.getRuntime().exec(cmd);
			proc.waitFor(); //阻塞于此,等待命令执行完
		}
		catch (Exception e){
			e.printStackTrace();
		}
		
		
		Robot robot = new Robot();// 创建Robot对象
		robot.delay(2000);// 延迟电脑操作2000毫秒,主要是为了预留出打开窗口的时间,括号内的单位为毫秒
		
		//创建一个系统粘贴板对象,并将指定文本添加到系统剪切板
		Clipboard clip = Toolkit.getDefaultToolkit().getSystemClipboard();
		Transferable tText = new StringSelection(message);
		clip.setContents(tText, null);
		
		for (int i = 0; i < num; i++) {//循环次数
			// 以下两行按下了ctrl+v,完成粘贴功能
			robot.keyPress(KeyEvent.VK_CONTROL); //ctrl
			robot.keyPress(KeyEvent.VK_V);     //v
			
			robot.keyRelease(KeyEvent.VK_CONTROL);// 释放ctrl按键,像ctrl,退格键,删除键这样的功能性按键,在按下后一定要释放,不然会出问题。crtl如果按住没有释放,在按其他字母按键是,敲出来的回事ctrl的快捷键。
			
			robot.delay(2000); //停顿两秒
			
			robot.keyPress(KeyEvent.VK_ENTER);// 回车
		}
	}
	
}

Test.java
public class Test {
	public static void main(String[] args) throws AWTException {
		AutoSendQQMessageUtils.start("xxxxxxx", "haha", 1, 20, 24, 30);
	}
}
发布了47 篇原创文章 · 获赞 7 · 访问量 2352

猜你喜欢

转载自blog.csdn.net/qq_43616898/article/details/104149057