使用Java实现发送微信消息(附源码)_此程序在手再也不怕对象跟你闹了

简介: 此程序在手再也不怕女朋友跟你闹了!!!!自从有了女朋友比如:早安、晚安之类的问候语可不能断,但是也难免有时候会忘记那么该咋么办呢?很简单写一个程序么,近日闲来无趣想着用Java写一个自动发送微信的小程序,实现定时给指定的好友发送指定的消息,这不就很Nice了?本文主要包括实现的思路、代码的实现、打包为jar快捷方式!

使用Java实现发送微信消息(附源码)_此程序在手再也不怕对象跟你闹了

此程序在手再也不怕女朋友跟你闹了!!!!自从有了女朋友比如:早安、晚安之类的问候语可不能断,但是也难免有时候会忘记那么该咋么办呢?很简单写一个程序么,近日闲来无趣想着用Java写一个自动发送微信的小程序,实现定时给指定的好友发送指定的消息,这不就很Nice了?本文主要包括实现的思路、代码的实现、打包为jar快捷方式!

@[toc]

先上效果图!!!

图片.png
图片.png

1、实现原理

原理其实很简单用Java模拟快捷键发送消息:

  1. 利用Scanner实现键盘录入设置发送时间;
  2. Robot类模拟键盘输入,利用快捷键发送指定内容到微信聊天界面;
  3. 利用定时器Timer控制发送时间;

2、代码实现

import org.springframework.util.StringUtils;

import java.awt.*;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.StringSelection;
import java.awt.datatransfer.Transferable;
import java.awt.event.KeyEvent;
import java.util.*;

/**
 * @Author MT
 * @Date 2021/11/22 14:45
 * @Description: 发送微信消息
 */


public class SendMsg {
   
   
    //执行次数
    private static int count = 0;

    public static void main(String[] args) {
   
   
        System.out.println("开始执行----------");
        Scanner scanner = new Scanner(System.in);
        System.out.println("请设置需发送的好友昵称:");
        String friendNickName = scanner.next();
        System.out.println("请设置需发送的内容:");
        String content = scanner.next();
        System.out.println("请输入发送时间的小时:");
        Integer hour = scanner.nextInt();
        System.out.println("请输入发送时间的分钟:");
        Integer minute = scanner.nextInt();
        System.out.println("请输入发送时间的秒:");
        Integer second = scanner.nextInt();
        System.out.println("您设定的发送时间为" + hour + "时" + minute + "分" + second + "秒!!!");
        //执行时间
        Date date = getDate(hour, minute, second);
        //Timer定时器
        Timer timer = new Timer();
        TimerTask task = new TimerTask() {
   
   
            @Override
            public void run() {
   
   
                searchPerson(friendNickName, content);
                count++;
                System.out.println("共发送了" + count + "天!!!");
            }
        };
        //延迟date毫秒执行一次发送方法
        timer.schedule(task, date);

    }

    //获取执行时间
    public static Date getDate(Integer hour, Integer minute, Integer second) {
   
   
        //设置执行时间
        Calendar calendar = Calendar.getInstance();
        int year = calendar.get(Calendar.YEAR);
        int month = calendar.get(Calendar.MONTH);
        int day = calendar.get(Calendar.DAY_OF_MONTH);//每天
        calendar.set(year, month, day, hour, minute, second);
        Date date = calendar.getTime();
        //如果启动时间超过执行时间,则明天执行
        if (date.before(new Date())) {
   
   
            date = addDay(date, 1);
        }
        return date;
    }

    // 增加或减少天数
    public static Date addDay(Date date, int num) {
   
   
        Calendar startDT = Calendar.getInstance();
        startDT.setTime(date);
        startDT.add(Calendar.DAY_OF_MONTH, num);
        return startDT.getTime();
    }

    private static void searchPerson(String friendNickName, String content) {
   
   
        // 创建Robot对象
        Robot robot = getRobot();
        //打开微信 Ctrl+Alt+W
        assert robot != null;
        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);
        // 发送消息
        try {
   
   
            sendMsg(content);
        } catch (InterruptedException e) {
   
   
            e.printStackTrace();
        }
    }

    private static void sendMsg(String content) throws InterruptedException {
   
   
        if (!content.equals("发送默认的信息")) {
   
   
            sendOneMsg(content);
        } else {
   
   
            String[] msgArr = {
   
   
                    "能不能发",
                    "能不能",
                    "能",
                    "鸹貔",
                    "[Emm]",
                    ""
            };
            ArrayList<String> msgList = new ArrayList<>();
            int i = 1;
            while (i <= 10) {
   
   
                msgList.add("能不能发!");
                i++;
            }
            for (String item : msgList) {
   
   
                sendOneMsg(item);
            }
            Thread.sleep(2000);

            sendOneMsg("就问你能不能发!");
            sendOneMsg("[坏笑]");
            sendOneMsg("鸹貔");
        }

    }

    private static Robot getRobot() {
   
   
        // 创建Robot对象
        Robot robot = null;
        try {
   
   
            robot = new Robot();
        } catch (AWTException e) {
   
   
            e.printStackTrace();
        }
        return robot;
    }

    private static void sendOneMsg(String msg) {
   
   
        Clipboard clip = Toolkit.getDefaultToolkit().getSystemClipboard();
        Transferable tText;
        //创建Robot对象
        Robot robot = getRobot();
        //延迟十秒,主要是为了预留出打开窗口的时间,括号内的单位为毫秒
        if (null != robot) {
   
   
            robot.delay(500);
            tText = new StringSelection(msg);
            clip.setContents(tText, null);
            // 按下了ctrl+v,完成粘贴功能
            robot.keyPress(KeyEvent.VK_CONTROL);
            robot.keyPress(KeyEvent.VK_V);
            robot.keyRelease(KeyEvent.VK_CONTROL);
            robot.delay(500);
            //回车发送消息
            robot.keyPress(KeyEvent.VK_ENTER);
            robot.delay(500);
        }
    }
}

3、打包程序

我这里用的是IDEA进行打包,也可以输入命令

3.1、鼠标右击项目名称

请添加图片描述

3.2、选择Artifacts

请添加图片描述

3.3、点击加号

请添加图片描述

3.4、在Main Class中选择需要打包的类

请添加图片描述

3.5、点击Build进行最后的打包

请添加图片描述

请添加图片描述

3.6、jar包在out文件夹中

请添加图片描述

4、运行Jar包

进入相应的目录运行jar(见3.6),之后就可以在规定的时间发送了;

命令:java -jar temp.jar

图片.png

如此便大功告成!!!

参考资料

目录
相关文章
|
11天前
|
XML Java 编译器
Java注解的底层源码剖析与技术认识
Java注解(Annotation)是Java 5引入的一种新特性,它提供了一种在代码中添加元数据(Metadata)的方式。注解本身并不是代码的一部分,它们不会直接影响代码的执行,但可以在编译、类加载和运行时被读取和处理。注解为开发者提供了一种以非侵入性的方式为代码提供额外信息的手段,这些信息可以用于生成文档、编译时检查、运行时处理等。
45 7
|
16天前
|
Android开发 开发者 Python
手撸了一个全自动微信清粉小工具(源码详解)
微信清理僵尸粉工具利用Python和`uiautomator2`库,通过模拟转账操作自动检测并标记微信好友列表中被删除、被拉黑或账号存在问题的“僵尸粉”。工具支持开启调试模式、自动打开微信、获取好友信息、判断好友状态、管理标签等功能,最终将检测结果记录到文件中,便于用户管理和清理好友列表。此工具适用于Android设备,已在OPPO Reno4 Pro上测试成功。
48 5
|
23天前
|
数据采集 人工智能 Java
Java产科专科电子病历系统源码
产科专科电子病历系统,全结构化设计,实现产科专科电子病历与院内HIS、LIS、PACS信息系统、区域妇幼信息平台的三级互联互通,系统由门诊系统、住院系统、数据统计模块三部分组成,它管理了孕妇从怀孕开始到生产结束42天一系列医院保健服务信息。
28 4
|
29天前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
67 2
|
4天前
|
存储 JavaScript 前端开发
基于 SpringBoot 和 Vue 开发校园点餐订餐外卖跑腿Java源码
一个非常实用的校园外卖系统,基于 SpringBoot 和 Vue 的开发。这一系统源于黑马的外卖案例项目 经过站长的进一步改进和优化,提供了更丰富的功能和更高的可用性。 这个项目的架构设计非常有趣。虽然它采用了SpringBoot和Vue的组合,但并不是一个完全分离的项目。 前端视图通过JS的方式引入了Vue和Element UI,既能利用Vue的快速开发优势,
39 13
|
17天前
|
缓存 监控 Java
Java线程池提交任务流程底层源码与源码解析
【11月更文挑战第30天】嘿,各位技术爱好者们,今天咱们来聊聊Java线程池提交任务的底层源码与源码解析。作为一个资深的Java开发者,我相信你一定对线程池并不陌生。线程池作为并发编程中的一大利器,其重要性不言而喻。今天,我将以对话的方式,带你一步步深入线程池的奥秘,从概述到功能点,再到背景和业务点,最后到底层原理和示例,让你对线程池有一个全新的认识。
47 12
|
12天前
|
JavaScript 安全 Java
java版药品不良反应智能监测系统源码,采用SpringBoot、Vue、MySQL技术开发
基于B/S架构,采用Java、SpringBoot、Vue、MySQL等技术自主研发的ADR智能监测系统,适用于三甲医院,支持二次开发。该系统能自动监测全院患者药物不良反应,通过移动端和PC端实时反馈,提升用药安全。系统涵盖规则管理、监测报告、系统管理三大模块,确保精准、高效地处理ADR事件。
|
24天前
|
移动开发 小程序
仿青藤之恋社交交友软件系统源码 即时通讯 聊天 微信小程序 App H5三端通用
仿青藤之恋社交交友软件系统源码 即时通讯 聊天 微信小程序 App H5三端通用
49 3
|
27天前
|
IDE Java 编译器
开发 Java 程序一定要安装 JDK 吗
开发Java程序通常需要安装JDK(Java Development Kit),因为它包含了编译、运行和调试Java程序所需的各种工具和环境。不过,某些集成开发环境(IDE)可能内置了JDK,或可使用在线Java编辑器,无需单独安装。
61 1
|
1月前
|
人工智能 监控 数据可视化
Java智慧工地信息管理平台源码 智慧工地信息化解决方案SaaS源码 支持二次开发
智慧工地系统是依托物联网、互联网、AI、可视化建立的大数据管理平台,是一种全新的管理模式,能够实现劳务管理、安全施工、绿色施工的智能化和互联网化。围绕施工现场管理的人、机、料、法、环五大维度,以及施工过程管理的进度、质量、安全三大体系为基础应用,实现全面高效的工程管理需求,满足工地多角色、多视角的有效监管,实现工程建设管理的降本增效,为监管平台提供数据支撑。
37 3