寒假期间,因为疫情,这几天班群要天天报平安,早上起不来就写了这个。(如果身体有异常记得改哦,不能谎报)

先谢谢以下博主:

https://www.cnblogs.com/hwj2019/p/11552055.html

https://www.jb51.net/article/155520.htm

https://blog.csdn.net/u011311291/article/details/80016859

https://www.jianshu.com/p/b77d934cc252

当然还有一些博主,这里就列了主要一部分。

使用条件:

已安装python3.+,再安装pywin32(https://www.cnblogs.com/Swalllow/p/11711750.html 我是照这个博客安装成功的),最后安装pynout(pip install pynput  即可)。

使用限制:

window系统,qq对话窗口只能单独打开,而且必须打开,这样窗口名才会和群名称或对话的用户昵称一致。

使用原理:

譬如和一个叫“大兄弟”的朋友对话,先用win32gui 打开“大兄弟”聊天窗口,并使其加入到线程顶置该窗口,再设置其窗口大小和位置。然后鼠标拖动(我拖动的区域是固定的,会不会鼠标左键双击一个固定位置会更好呢?这样就不受消息长短的限制了,可以改一下试试),ctrl+c 复制获取最新一条消息内容到剪切板,然后从剪切板上拿到该消息:字符串data,再用re正则表达式抽取你要的信息,再写一个逻辑你要回复的内容data,再用win32gui 打开“大兄弟”聊天窗口,并使其加入到线程顶置该窗口,ctrl+v粘贴上去,然后ctrl+enter发送。

功能特点:

用了sched实现了一个时间调度程序,不像time.sleep一样阻塞进程。可以定一个时间:上午九点,那么上午九点每隔一分钟就会执行上述代码一次,一共二十次,只要一次成功回复后,之后的几次定时会继续,但到了时间也不会执行了。

配合闹钟使用:

比如你想在9:00到9:20这个时间段检测21次,那么你可以定一个9:21的闹钟(window自带的闹钟即可),如果它回复成功了会把你的系统音量调至最低,那么闹钟就相当于没有开启了。反之音量会最高。

上代码:

import win32gui,win32apiimport win32con
import win32clipboard as win32clip
import re
from pynput.keyboard import Key
from pynput.keyboard import Controller as Controller_k
from pynput.mouse import Button, Controller
import time, sched
import datetimes = sched.scheduler(time.time, time.sleep)mouse = Controller()keyboard = Controller_k()WM_APPCOMMAND = 0x319APPCOMMAND_VOLUME_MAX = 0x0a
APPCOMMAND_VOLUME_MIN = 0x09class sendMsg():def get_clip(self):#获取剪切板内容try:win32clip.OpenClipboard()data = win32clip.GetClipboardData()win32clip.CloseClipboard()return dataexcept:return 'null'def getmsg(self):#拖动鼠标mouse.position = (395, 470)mouse.press(Button.left)time.sleep(0.1)mouse.release(Button.left)mouse.position = (395, 470)mouse.press(Button.left)mouse.move(90, 85)time.sleep(0.5)mouse.release(Button.left)with keyboard.pressed(Key.ctrl):  # 按下ctrl+ckeyboard.press('c')time.sleep(0.5)keyboard.release('c')def __init__(self,receiver):self.receiver=receiver#初始化剪切板为:hello world ,我之前用这段代码可以,不知现在为何没效果win32clip.OpenClipboard()win32clip.EmptyClipboard()win32clip.SetClipboardData(win32con.CF_UNICODETEXT, 'hello world!')win32clip.CloseClipboard()def solve(self):self.getmsg()data=self.get_clip()print('get',data)data=data.lstrip()try:#按自己所需的匹配,我这里的格式比如:23 1234567890大兄弟正常data=re.findall('(\d*?)\s+?\d{10}.*?',data)data=int(data[0])data+=1data=str(data)data+=u' 学号 姓名' # 学号 姓名except:data=''return datadef wakeup(self):mouse.position = (1, 1)mouse.press(Button.left)time.sleep(0.1)mouse.release(Button.left)#发送消息def sendmsg(self):#找到该窗口qq=win32gui.FindWindow(None,self.receiver)print(qq)  #窗口激活顶置改大小win32gui.SendMessage(qq, win32con.WM_SYSCOMMAND, win32con.SC_RESTORE, 0)win32api.keybd_event(13, 0, 0, 0)win32gui.SendMessage(qq, win32con.WM_SYSCOMMAND, win32con.SC_RESTORE, 0)win32gui.SetForegroundWindow(qq)win32gui.SetWindowPos(qq, win32con.HWND_TOPMOST, 344, 100, 679, 568, win32con.SWP_SHOWWINDOW)# print(win32gui.GetWindowRect(qq)) ## (344, 100, 1023, 668)time.sleep(1)time.sleep(0.5)data=self.solve()win32gui.SendMessage(qq, win32con.WM_SYSCOMMAND, win32con.SC_RESTORE, 0)win32api.keybd_event(13, 0, 0, 0)win32gui.SendMessage(qq, win32con.WM_SYSCOMMAND, win32con.SC_RESTORE, 0)win32gui.SetForegroundWindow(qq)keyboard.type(data)  #写下发送内容datawith keyboard.pressed(Key.ctrl):  # 按下ctrl+enter 发送keyboard.press(Key.enter)keyboard.release(Key.enter)if len(data) >=6:return Truereturn Falseflag=Falsedef adjust_voice(flag=True):if flag:# 音量最大win32api.SendMessage(-1, WM_APPCOMMAND, 0x30292, APPCOMMAND_VOLUME_MAX * 0x10000)else:# 音量最小win32api.SendMessage(-1, WM_APPCOMMAND, 0x30292, APPCOMMAND_VOLUME_MIN * 0x10000)def go():print(datetime.datetime.now())global flagif flag==False:receiver= '大兄弟' #d对话的群名称或人的昵称qq = sendMsg(receiver)flag=qq.sendmsg()if flag:adjust_voice(False)print(flag)def test_time():now_time = datetime.datetime.now()#这个minutes=+1 没什么用,如果要设置第二天回复的话改成days+1next_time = now_time + datetime.timedelta(minutes=+1)next_year = next_time.date().yearnext_month = next_time.date().monthnext_day = next_time.date().day# 时间是9点 next_time = datetime.datetime.strptime(str(next_year) + "-" + str(next_month)+ "-" + str(next_day) +" 09:00:00","%Y-%m-%d %H:%M:%S")timer_start_time = (next_time - now_time).total_seconds()print(timer_start_time,next_time)i=0#s.enter(timer_start_time-30, 2, adjust_voice,argument=(True,))#每隔1分钟一个,加20个while i<=20:s.enter(timer_start_time, 1, go)i+=1timer_start_time+=60s.run()if __name__ == '__main__':test_time()#直接go() 方便提前测试# go()

python win32gui+pynput 自动回复qq消息相关推荐

  1. python自动化:实现自动回复QQ消息

    python自动化:实现自动回复QQ消息 前言 近段时间,看了一下运用python实现app自动化的视频,觉得那上面的讲的不错,于是就用所学的知识做了一个程序,实现自动回复QQ消息. 文章目录 pyt ...

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

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

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

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

  4. python自动回复qq消息_基于python使用qqbot接入qq做一个简单的文字消息自动回复

    qqbot是一个免费开源的基于smartqq的python插件,如果默认安装有pip,则可以直接在命令行下执行:pip install qqbot安装qqbot,安装成功后可以在命令行输入qqbot ...

  5. python实现定时发送qq消息

    因为生活中老是忘记各种事情,刚好又在学python,便突发奇想通过python实现提醒任务的功能(尽管TIM有定时功能),也可定时给好友.群.讨论组发送qq消息.其工作流程是:访问数据库提取最近计划- ...

  6. 如何用 Python 实现 QQ 消息自动回复?

    作者:il_持之以恒_li https://blog.csdn.net/qq_45404396/article/details/112750110 前言 近段时间,看了一下运用python实现app自 ...

  7. 教你一招!如何用 Python 实现 QQ 消息自动回复?

    作者:il_持之以恒_li https://blog.csdn.net/qq_45404396/article/details/112750110 前言 近段时间,看了一下运用python实现app自 ...

  8. python回复qq消息_自动给qq好友发消息

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 最近突然想做个自动发送qq消息的东西,然后上网搜了一下实现方法,找到了几篇用python实现的帖子,就自己试了试(原来只是简单了解过python,好多地方 ...

  9. python自动发送qq消息_自动给qq好友发消息

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 最近突然想做个自动发送qq消息的东西,然后上网搜了一下实现方法,找到了几篇用python实现的帖子,就自己试了试(原来只是简单了解过python,好多地方 ...

最新文章

  1. 请求接口时params和data的区别
  2. visual studio 添加源码目录
  3. 2.4、Android Studio使用主题编辑器设计主题
  4. lucene索引搜索_Lucene –快速添加索引和搜索功能
  5. MySQL 8.x 修改root用户密码/修改密码/重置密码/忘记密码(为了避免掉坑,值得收藏)
  6. ACCESS-类型转换函数
  7. cocos2dx 3.x 解决输入框(TextField,TextFieldTTF) 输入中文变乱码的问题
  8. 访问母版页控件、属性、方法及母版页中调用内容页的方法
  9. 算法:将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。
  10. mysql用reader读取空数据时报错的处理
  11. FAT32文件操作系统(主要针对SD卡)
  12. 中国火炬统计数据 2008-2021年
  13. 牛客网 - 编程初学者入门训练 - 分支控制(BC50~BC77)
  14. 设计模式笔记 ------ 建造者模式
  15. 使用HadoopDruidIndexer向Druid集群中加载批量数据-Batch Data Ingestion
  16. educoder:实验二 数字类型及其操作(新)
  17. uniApp 实现微信小程序和app视频播放flv格式视频监控
  18. python pdfminer的功能_python:pdfminer接口测试
  19. C#几行代码实现定时关机/重启 超详细(建议新手练习)
  20. SenseTime Ace Coder Challenge 暨 商汤在线编程挑战赛 D. 白色相簿

热门文章

  1. OpenCV 学习(四)之 将图片插入另一张图片中的实现(ROI)
  2. 中国无尘室饮水机市场趋势报告、技术动态创新及市场预测
  3. 窗口全屏化得方法大全(5种方法,你都知道吗?)
  4. draw.io 绘图软件导出png 图片的几个技巧
  5. linux设计 实现一个模拟的文件系统,模拟Linux文件系统.doc
  6. 主流图片框架比较分析
  7. 交通数字孪生高速公路规划设计市政道路BIM正向改扩建设计利用实景三维无人机机载LiDAR倾斜摄影车载地面三维激光扫描仪LiDAR点云数据提取自动驾驶高精地图三维矢量车道标线3d点云标注
  8. html去除图片链接边框及其链接虚线
  9. 大量C语言、C++、C#、VC编程相关书籍下载
  10. 墨者学院01 SQL手工注入漏洞测试(MySQL数据库)