利用Python的第三方库实现QQ的定时回复
#因疫情宅在家的无聊的大学生#tkinter
首先看代码:(说明里有相关使用提示)

import tkinter as tk
from tkinter import messagebox as mes #弹窗
import win32con
import win32gui
import win32clipboard as w
import datetime
import time
class abc: #窗口部分(信息输入)def __init__(self):self.root=tk.Tk()self.root.title('QQ消息定时发送')self.root.geometry('1000x500+1000+500')self.interface()def interface(self): def f(cw):mes.showerror('错误',cw) #设置错误弹窗def show():#设置提示弹窗mes.showinfo('说明','''\n1、接收者的备注名是指备注名而非实际QQ昵称。
2、信息中的实时时间请用以下代号表示:\n      年:Y$;   月:M$;\n      日:D$;   时:s$;\n      分:f$;   秒:m$;\n      星期几:x$
3、时间需要输入三个数,分别代表:时、分、秒,中间以空格间隔。
4、使用时应重新单独打开接收者的QQ聊天框。
5、发送消息的时间不能完全相同,相隔不能过短,最好相隔几秒''')        self.Label0 = tk.Label(self.root, text="接收者的备注名")self.Label0.grid(row=2, column=0)self.Label1 = tk.Label(self.root, text="发送信息的条数")self.Label1.grid(row=3, column=0)self.Entry0 = tk.Entry(self.root)self.Entry0.grid(row=2, column=1,padx=60)self.Entry1 = tk.Entry(self.root)self.Entry1.grid(row=3, column=1,padx=60,pady=30)def get1(): #按第一个确定按钮触发的事件  global cs,msg,receiver,sj,xx #设置为全局变量cs=int(self.Entry1.get())#cs指发送信息的条数receiver=self.Entry0.get()#获取输入信息if cs<=0:f('输入数字超出实际范围(应大于0)')elif receiver=='':f('接收者的备注名不能为空')else:a = [self.Label0,self.Label1,self.Entry0,self.Entry1]for i in a:i.destroy()#清除控件(不可恢复)                 self.B0.grid_forget()#不显示控件(可恢复)def get2():global sr1sr1=self.Entry0.get()msg=self.Entry1.get()                    try:#捕获异常sr=sr1.split()sr=list(map(int,sr))if (len(sr)==3):if ((-1<sr[0]<24) and (-1<sr[1]<60) and (-1<sr[2]<60)): if msg=='':f('发送的信息不能为空')else:sj.append(sr)msg=msg.replace('Y$','{0}').replace('M$','{1}').replace('D$','{2}').replace('s$','{3}').replace('f$','{4}').replace('m$','{5}').replace('x$','{6}')#替换代号local_time = time.localtime(time.time())time1=datetime.datetime.now().strftime('%Y %m %d %H %M %S').split()week_index = local_time.tm_wdayweek_list = ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"]                                    xx.append(msg.format(time1[0],time1[1],time1[2],time1[3],time1[4],time1[5],week_list[week_index]))self.root.quit()else:f('输入数字超出实际范围')else:f('输入的数字不是三个或数字间忘记间隔')except Exception:f('输入了除数字以外的其他字符')sj=[];xx=[]for i in range(cs):self.Label0 = tk.Label(self.root, text="时间{}".format(i+1))self.Label0.grid(row=1, column=0)self.Label1 = tk.Label(self.root, text="消息{}".format(i+1))self.Label1.grid(row=2, column=0)self.Entry0 = tk.Entry(self.root)self.Entry0.grid(row=1, column=1,padx=60)  self.Entry1 = tk.Entry(self.root)self.Entry1.grid(row=2, column=1,padx=60)                      self.B2 = tk.Button(self.root, text="-确定-",command=get2)#按钮self.B2.grid(row=8, column=3,ipadx=100,padx=120,pady=120)self.root.mainloop()                         for wk in [self.Label0,self.Entry0,self.B2,self.Label1,self.Entry1]:wk.destroy()def c1():global djdj=0mes.showinfo('提示','已成功退出')self.root.destroy()#关闭窗口def bc1():global djself.root.quit()dj=1for wk in [self.Label0,self.B3,self.B2]:wk.destroy()self.root.destroy()#关闭窗口self.Label0 = tk.Label(self.root, text="你有一瓶后悔药,\n你要吃吗?")self.Label0.grid(row=0, column=1,columnspan=3,ipady=30,ipadx=300,pady=30)self.B2 = tk.Button(self.root, text="吃",command=c1)self.B2.grid(row=1, column=1,ipady=30,ipadx=120,pady=150)self.B3 = tk.Button(self.root, text="不吃",command=bc1)self.B3.grid(row=1, column=3,ipady=30,ipadx=120,pady=150)self.root.mainloop()if dj==1:root=tk.Tk()root.withdraw()mes.showinfo('提示','开始运行...')root.destroy()                                      self.B0 = tk.Button(self.root, text="确定",command=get1)#按钮self.B0.grid(row=8, column=3,ipadx=100,padx=80,pady=30)self.B1=tk.Button(self.root, text="说明",command=show)self.B1.grid(row=0,column=4,pady=30)  self.root.mainloop()
if __name__=='__main__':a=abc()
if dj==1:#无窗口部分(窗口部分完成后后执行)def cz(sj):global tmptime1=datetime.datetime.now().strftime('%Y %m %d %H %M %S').split()#获取实时时间tmp=[int(time1[3]),int(time1[4]),int(time1[5])]sj.append(tmp)sj=sorted(sj,key=lambda x:x[2])sj=sorted(sj,key=lambda x:x[1])sj=sorted(sj,key=lambda x:x[0])try:return sj[sj.index(tmp)+1]except Exception:return sj[0]class sendMsg():#封装发送消息def __init__(self,receiver,msg):self.receiver=receiverself.msg=msgself.setText()def setText(self):#设置剪切板w.OpenClipboard()w.EmptyClipboard()w.SetClipboardData(win32con.CF_UNICODETEXT, self.msg)w.CloseClipboard()def sendmsg(self):#发送消息qq=win32gui.FindWindow(None,self.receiver)win32gui.SendMessage(qq,win32con.WM_PASTE , 0, 0)win32gui.SendMessage(qq, win32con.WM_KEYDOWN, win32con.VK_RETURN, 0)#print(msg)#如需查看发出的信息是什么,可去掉前方注释符k=0 #发送了信息数-1while True:#关键运行部分sr=cz(sj)#获取实时需要执行的任务信息                 time1=datetime.datetime.now().strftime('%Y %m %d %H %M %S').split()minnute =int(time1[4])           while minnute!=sr[1]: time1=datetime.datetime.now().strftime('%Y %m %d %H %M %S').split()minnute =int(time1[4])while True:time1=datetime.datetime.now().strftime('%Y %m %d %H %M %S').split()second =int(time1[5])                if (abs(second-sr[2])<0.6) or (abs(second-sr[2])>59.4):msg = xx[k]qq = sendMsg(receiver, msg)qq.sendmsg()time.sleep(1)break           sj.remove(sr)sj.remove(tmp)if len(sj)==0:root=tk.Tk()root.withdraw()#不显示窗口(否则会额外出现一个空白弹窗)mes.showinfo('-END-','发送任务完成')                           breakcs-=1k+=1

以上是代码部分
此代码打包的exe在百度网盘里可自行下载。(不是很大,大约9M)

链接: https://pan.baidu.com/s/1cm_6L0hkU5BwfuWBMy3_lA?pwd=9rcq 提取码: 9rcq
结果图:

作者独白:(如果不感兴趣可以跳过)
本人为一名普通的大一学生,平时还是挺喜欢Python的,不过我们专业只能学半年Python,半年下来感觉还不错。想到下学期就不会学了,就有点伤感。总感觉要做点什么来纪念一下。
正好‘儿子‘发了一条信息:

为了叫儿子起床,而自己又懒得起这么早,于是就用Python写了这个程序。
半年学习下来,感觉Python特别是第三方库要学的其实挺多的,我们半年也就只学了其中的冰山一角。在学第三方库之前,我甚至还以为Python不过如此,之后就真香了。

竟然看了这么久,

那再送你一份礼物吧!
链接: https://pan.baidu.com/s/1ynPlyXt7YJrtavkmgbtHng?pwd=gw44 提取码: gw44
这里有我学习Python整理的笔记(这是基础的知识,因为第三方库整理得比较乱),另外还有一个低版本的exe(有控制台的)
那个exe的代码:

import win32con
import win32gui
import win32clipboard as w
import time
import datetime
def cz(sj):global tmptime1=datetime.datetime.now().strftime('%Y %m %d %H %M %S').split()tmp=[int(time1[3]),int(time1[4]),int(time1[5])]sj.append(tmp)sj=sorted(sj,key=lambda x:x[2])sj=sorted(sj,key=lambda x:x[1])sj=sorted(sj,key=lambda x:x[0])try:return sj[sj.index(tmp)+1]except Exception:return sj[0]
def f(yy):print('输入错误')print('可能原因:%s'%yy)print('请按规定重新输入')
def kx():while True:try:sr=input('输入时间\n时分秒以空格分隔:').split()sr=list(map(int,sr))if (len(sr)==3):if ((-1<sr[0]<24) and (-1<sr[1]<60) and (-1<sr[2]<60)): sj.append(sr)break          else:f('输入数字超出实际范围')else:f('输入的数字不是三个,或数字间忘记间隔')except Exception:f('输入了除数字以外的其他字符')
class sendMsg():def __init__(self,receiver,msg):self.receiver=receiverself.msg=msgself.setText()#设置剪贴版内容def setText(self):w.OpenClipboard()w.EmptyClipboard()w.SetClipboardData(win32con.CF_UNICODETEXT, self.msg)w.CloseClipboard()#发送消息def sendmsg(self):qq=win32gui.FindWindow(None,self.receiver)win32gui.SendMessage(qq,win32con.WM_PASTE , 0, 0)win32gui.SendMessage(qq, win32con.WM_KEYDOWN, win32con.VK_RETURN, 0)print('\n{}:{}:{}'.format(time1[3],time1[4],time1[5]),"\nsucessfuly send",self.msg)
receiver=input('接收者的备注名(或群备注名):')#这里填入接收者的备注名
while True:try:cs=int(input('输入需要发送信息的条数:'))   if (cs>0): break      else:f('输入数字超出实际范围(应大于0)')except Exception:f('输入了除数字以外的其他字符')
if input('是否启用高级模式\n#输入内容与时间有关或需要发多条不同信息\n(1:是,else:否):') =='1':xxi=[]print('可变时间请用以下代号表示:年:Y$;月:M$;日:D$;\n时:s$;分:f$;秒:m$;星期几:x$表示')print('提示:时间输入顺序应与消息顺序一致')msg2=[];msg=[]for yu in range(cs):msg1=input().replace('Y$','{0}').replace('M$','{1}').replace('D$','{2}').replace('s$','{3}').replace('f$','{4}').replace('m$','{5}').replace('x$','{6}')xxi.append(msg1)def xx():msg=[]for msg1 in xxi:local_time = time.localtime(time.time())week_index = local_time.tm_wdayweek_list = ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"]msg.append(msg1.format(time1[0],time1[1],time1[2],time1[3],time1[4],time1[5],week_list[week_index]))return msg
else:    msg=input('想发送的内容:')def xx():return [msg]hh=input('按1确定,按其他键取消:')
if not (hh=='1'): raise Exception('已取消')
sj=[]
for i in range(cs):kx()
print('-Running-')
k=0
while True:sr=cz(sj)time1=datetime.datetime.now().strftime('%Y %m %d %H %M %S').split()minnute =int(time1[4])           while minnute!=sr[1]: time1=datetime.datetime.now().strftime('%Y %m %d %H %M %S').split()minnute =int(time1[4])while True:time1=datetime.datetime.now().strftime('%Y %m %d %H %M %S').split()second =int(time1[5])                if (abs(second-sr[2])<1) or (abs(second-sr[2])>59):msg = xx()[k]qq = sendMsg(receiver, msg)qq.sendmsg()time.sleep(1)break           sj.remove(sr)sj.remove(tmp)if len(sj)==0:print('-END-')print('发送任务完成')breakcs-=1k+=1

That’s all.
完结撒花
Run了 run了。

Python实现QQ定时回复(附源码exe)相关推荐

  1. 用 Python 自动回复 QQ 消息,附源码!

    前言 近段时间,看了一下运用python实现app自动化的视频,觉得那上面的讲的不错,于是就用所学的知识做了一个程序,实现自动回复QQ消息. 准备工作 1.1 安装client模块 打开命令窗口,输入 ...

  2. python qq消息接收存储_用 Python 自动回复 QQ 消息,附源码!

    前言 近段时间,看了一下运用python实现app自动化的视频,觉得那上面的讲的不错,于是就用所学的知识做了一个程序,实现自动回复QQ消息. 1. 准备工作 1.1 安装client模块 打开命令窗口 ...

  3. 前后端分离 Spring Boot + Vue 开发网易云QQ音乐(附源码)!

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者|xiangzhihong segmentfault.com/ ...

  4. 牛皮!竟然有大佬基于 Spring Boot + Vue 开发了一套网易云amp;QQ音乐(附源码)。。。...

    来源:segmentfault.com/a/1190000021376934 # 前言 虽然 B/S 是目前开发的主流,但是 C/S 仍然有很大的市场需求.受限于浏览器的沙盒限制,网页应用无法满足某些 ...

  5. 7个惊艳众人的 Python 实用项目!【附源码】

    今天分享7个学妹看见都惊呆的 Python 小项目![附源码] 建议收藏 界面应用 1.计算器 1. 案例介绍 本例利用 Python 开发一个可以进行简单的四则运算的图形化计算器,会用到 Tkint ...

  6. 教你用python制作人脸卡通画(附源码)

    教你用python制作人脸卡通画(附源码) 效果展示: 让我们开始学习之路: 原理:利用第三方人脸接口将图像人脸化 第三方接口注册地址:https://ai.minivision.cn/#/login ...

  7. python蒙特卡洛模拟抢红包(附源码),可用于课堂展示(presentation)

    本博客是复现b站毕导视频中描述的模拟论证过程,先上原视频链接(强烈建议先看原视频): 我给自己发了2亿个红包,才发现先抢和后抢差距这么大https://www.bilibili.com/video/B ...

  8. 66个Python练手项目,附源码

    前言: 不管学习哪门语言都希望能做出实际的东西来,这个实际的东西当然就是项目啦,不用多说大家都知道学编程语言一定要做项目才行. 这里整理了66个Python实战项目列表,都有完整且详细的教程,你可以从 ...

  9. 武大学生用python敲出樱花开放 | 附源码

    点击上方"涛哥聊Python",选择"星标"公众号 重磅干货,第一时间送达 整理:朱小五,公众号「凹凸数据」 参考来源: 武大微博:https://m.weib ...

最新文章

  1. 认识RESTful设计风格
  2. JQuery学习笔记02-选择器把需要的东西揪出来(基础)
  3. JavaScript内置一些方法的实现原理--new关键字,call/apply/bind方法--前戏
  4. 【caffe】基本数据结构blob
  5. DropDownList的常用属性和事件
  6. 小程序云服务器选什么系统好,小程序云服务器操作系统选择
  7. r语言 tunerf函数_R语言︱常用统计方法包 机器学习包(名称、简介)
  8. 全志A33-ARM开发板通过NFS与Ubuntu共享文件
  9. Android develop 国际化
  10. Oracle数据库之数据类型
  11. 专访清华大学姚期智院士:量子计算的未来
  12. Java短类的compareTo()方法和示例
  13. 信息学奥赛一本通(2024:【例4.10】末两位数)
  14. Resharper插件如何启用原VS的智能提示
  15. Web服务器的配置与管理(1) IIS的安装与基本设置
  16. Efficient Low-rank Multimodal Fusion with Modality-Specific Factors 论文
  17. wx.createSelectorQuery() 获取节点信息 获取不到解决方法
  18. 判断是否为直角三角形
  19. 软件应用无所不在 正吞噬整个世界
  20. 卷积神经网络超详细介绍(转载)

热门文章

  1. cms织梦文件夹目录
  2. 屏幕处理效果—调整屏幕的亮度,饱和度和对比度
  3. python 爬网站上的图片
  4. Google Pay 谷歌支付(gateway = stripe)
  5. u盘删除文件怎么恢复,误删了u盘文件怎么恢复
  6. 群辉默认DDNS功能解析阿里云-自定义服务商
  7. 帅哥陈 Hololens开发笔记(1)
  8. QQ三国华容道拼图脚本(半成品,成功率不高)
  9. ST-Link资料02_ST-Link固件介绍,及固件命名规则
  10. Fedformer中的小波变换(FEB-w模块)