原理和大多数一样,利用剪切板复制粘贴发送消息

效果展示:

当打开了某个会话窗口,这里利用win32的功能,将所有可识别的窗口展示出来,单选即可。

不需要再次手动打开聊天框,更加人性化(想要完全不打开聊天框意味着我起码要能够读取到qq列表,控制qq后台运行,那难度似乎有些高)

选定对象后出现这样的窗口,可以反复利用

包括有三个按钮,选取txt文档以发送不完全相同但有规律的刷屏

代码如下:

(新手分享,勿喷)

# 获取窗口
import win32gui
import win32con
import tkinter as tk
import ttkbootstrap
from pynput.keyboard import Key, Controller
from tkinter import filedialogffont = "华文琥珀"            # 字体
copy_times, copy_content, copy_suit, copy_count, copy_ed_times, f_content = None, None, None, None, None, Nonedef get_hwnd_dic(hwnd, hwnd_title):if (win32gui.IsWindow(hwnd)and win32gui.IsWindowEnabled(hwnd)and win32gui.IsWindowVisible(hwnd)and win32gui.GetWindowText(hwnd)):hwnd_title[f"{hwnd}"] = win32gui.GetWindowText(hwnd)def get_hwnd():hwnd_title = {}win32gui.EnumWindows(get_hwnd_dic, hwnd_title)return hwnd_titlehwndJson = get_hwnd()                          # 引用上面两个函数,获取当前窗口
numbers = list(hwndJson.keys())                # 所有窗口的句柄
titles = list(hwndJson.values())               # 所有窗口名称
lens = len(titles)window_of_set = tk.Tk()
window_of_set.geometry('420x{}+10+10'.format(100+lens*30))
window_of_set.resizable(False, False)
window_of_set.title("cqu.rol")
try:window_of_set.iconbitmap("resources/001.ico")         # 个人习惯,更改图标,无则跳过
except:passtagsp = ttkbootstrap.Label(window_of_set, text="选择一个人进行刷屏", font=(ffont, 15))
tagsp.pack(pady=5)
variable_value = tk.StringVar()for w in range(lens):bbb = ttkbootstrap.Radiobutton(window_of_set, text=titles[w], variable=variable_value, value=numbers[w])bbb.place(x=70, y=25 * w + 40)
kb = Controller()                                   # 单选按钮def nexta():                                        # 当点击按钮以后:window_of_sp = tk.Toplevel(window_of_set)window_of_sp.geometry('330x180+10+10')window_of_sp.resizable(False, False)window_of_sp.title(" ")window_of_sp.attributes("-topmost", 1)ttkbootstrap.Label(window_of_sp, text="输入重复次数及内容", font=(ffont, 15)).pack(pady=10)try:window_of_set.iconbitmap("resources/001.ico")except:passchoose_number = variable_value.get()             # 获取选的是哪一个窗口(的句柄)e1 = tk.Entry(window_of_sp, width=40, font=(ffont, 10))e1.pack()                                        # 输入框1,获取重复次数e2 = tk.Entry(window_of_sp, width=40, font=(ffont, 10))e2.pack(pady=10)                                  # 输入框2,获取内容variable_val = tk.StringVar()e3 = ttkbootstrap.Checkbutton(window_of_sp, text="重复次数显示", variable=variable_val, onvalue="OK", offvalue="NOT")e3.pack()                                         # 单选框,获取是的显示已经重复的次数# 开始刷屏def start_copy():global copy_times, copy_content, copy_suit, copy_count, copy_ed_times, f_contentcopy_ed_times += 1final_s = "Error"if copy_count == "OK":final_s = "第{}次:{}".format(copy_ed_times, copy_content)elif copy_count == "NOT":final_s = str(copy_content)                  # 这两句获取【重复次数】按钮的结果,并将重复内容写上去,即获得最后说的话if copy_ed_times == copy_times:window_of_sp.after_cancel(copy_suit)copy_times, copy_content, copy_suit, copy_count, copy_ed_times, f_content = None, None, None, None, None, None# 当计数达到次数时停止循环,所有全局变量归零else:kb.type(final_s)kb.press(Key.enter)    # 这里按下回车键,如果qq是回车加enter发送消息,随之替换即可copy_suit = window_of_sp.after(200, start_copy)# 否则循环,每200毫秒重复一次(网络延迟,不要太快)# 点击开始def start_fun():global copy_times, copy_content, copy_suit, copy_count, copy_ed_times, f_contentcopy_times = int(e1.get()) + 1copy_content = e2.get()copy_ed_times = 0          # 已经重复次数归零if variable_val.get():copy_count = variable_val.get()else:copy_count = "NOT"# 【重复次数】按钮调整win32gui.ShowWindow(choose_number, win32con.SW_SHOWNORMAL)win32gui.SetWindowPos(choose_number, win32con.HWND_TOPMOST, 0, 0, 0, 0,win32con.SWP_NOOWNERZORDER | win32con.SWP_NOSIZE | win32con.SWP_NOMOVE)# 将对话窗口置顶start_copy()  # 运行# 停止刷屏def stop_copy():global copy_times, copy_content, copy_suit, copy_count, copy_ed_timescopy_times, copy_content, copy_suit, copy_count, copy_ed_times, f_content = None, None, None, None, None, Nonewindow_of_sp.destroy()# 点击文本def start_txtt():global copy_times, copy_content, copy_suit, copy_count, copy_ed_times, f_contentcopy_ed_times += 1if copy_ed_times == copy_times:window_of_sp.after_cancel(copy_suit)copy_times, copy_content, copy_suit, copy_count, copy_ed_times, f_content = None, None, None, None, None, Noneelse:xxw = copy_ed_times-1kb.type(f_content[xxw])kb.press(Key.enter)copy_suit = window_of_sp.after(200, start_txtt)def start_txt():global copy_times, copy_content, copy_suit, copy_count, copy_ed_times, f_contentfor_path = filedialog.askopenfilename(title="待处理 请选择", filetypes=[("", ".txt")], defaultextension=[("", ".txt")])f_content = open(for_path, "r", encoding="utf-8").readlines()win32gui.ShowWindow(choose_number, win32con.SW_SHOWNORMAL)win32gui.SetWindowPos(choose_number, win32con.HWND_TOPMOST, 0, 0, 0, 0,win32con.SWP_NOOWNERZORDER | win32con.SWP_NOSIZE | win32con.SWP_NOMOVE)copy_times = len(f_content) +1copy_ed_times = 0start_txtt()buop1 = tk.Button(window_of_sp, text="点击开始", command=start_fun, font=(ffont, 10))buop1.place(x=40, y=140)buop2 = tk.Button(window_of_sp, text="选取文档", command=start_txt, font=(ffont, 10))buop2.place(x=240, y=140)buop4 = tk.Button(window_of_sp, text="点击退出", command=stop_copy, font=(ffont, 10))buop4.place(x=140, y=140)buop3 = tk.Button(window_of_set, text="点击进入刷屏", command=nexta, font=(ffont, 15))
buop3.place(x=150, y=lens * 30)window_of_set.mainloop()

基于tkinter+win32+pynput实现python的QQ微信刷屏(比某些文章稍微高级一点)相关推荐

  1. python自动获取微信公众号最新文章

    微信公众号获取思路 常用的微信公众号文章获取方法有搜狐.微信公众号主页获取和api接口等多个方法. 听说搜狐最近不怎么好用了,之前用的api接口也频繁维护,所以用了微信公众平台来进行数据爬取. 首先登 ...

  2. 【Python爬虫】微信公众号历史文章和文章评论API分析

    上一篇文章爬取微信公众号文章信息准备工作介绍了微信公众号历史文章和文章评论API的组成情况,历史文章API格式:https://mp.weixin.qq.com/mp/profile_ext?acti ...

  3. Python爬取微信公众号历史文章进行数据分析,发现2017年运营总结,可以这样写!...

    作者:刘晓明,互联网公司运维技术负责人,拥有10年的互联网开发和运维经验.一直致力于运维工具的开发和运维专家服务的推进,赋能开发,提高效能. 广告时间:最后给自己代个盐~~欢迎大家有空时翻下我牌子(知 ...

  4. 基于tkinter库的一个python简易GUI界面实现学生选课系统!

    如果你的2020年重启,你最想干什么?我想狠狠的扇自己一巴掌,为什么大一不好好读书,搞到现在大二多了才意识到读书的重要性,我第一件事就想把我大一的实训任务好好的认真做一做,所以我最近一段时间,我都在看 ...

  5. python抓取微信公众号新闻文章图片

    在看公众号新闻的时候,总会有一些有用的PPT图片啥的想保存下来. 那么用python如何抓取来,简单介绍一下. 比如这个网址,https://mp.weixin.qq.com/s/-rj91sCpea ...

  6. QQ微信刷屏助手 FlashScreenAssist 1.2发布

    主要功能 文字刷屏 图片刷屏 简易教程 文字刷屏 打开软件之后输入要刷屏的文字,点击[开始],然后点一下微信或者QQ的输入框,就会开始刷屏了,注意[时间间隔]不要调太小,越小越快. 要注意的是.必须在 ...

  7. html如何获取请求头变量的值。_如何使用 Python 爬取微信公众号文章

    我比较喜欢看公众号,有时遇到一个感兴趣的公众号时,都会感觉相逢恨晚,想一口气看完所有历史文章.但是微信的阅读体验挺不好的,看历史文章得一页页的往后翻,下一次再看时还得重复操作,很是麻烦. 于是便想着能 ...

  8. python 微信公众号发文章_如何使用 Python 爬取微信公众号文章

    我比较喜欢看公众号,有时遇到一个感兴趣的公众号时,都会感觉相逢恨晚,想一口气看完所有历史文章.但是微信的阅读体验挺不好的,看历史文章得一页页的往后翻,下一次再看时还得重复操作,很是麻烦. 于是便想着能 ...

  9. python爬虫爬取微信_如何使用 Python 爬取微信公众号文章

    我比较喜欢看公众号,有时遇到一个感兴趣的公众号时,都会感觉相逢恨晚,想一口气看完所有历史文章.但是微信的阅读体验挺不好的,看历史文章得一页页的往后翻,下一次再看时还得重复操作,很是麻烦. 于是便想着能 ...

最新文章

  1. 基于libmad库的MP3解码简析
  2. 2021北京高考一分一段成绩查询,2021北京高考总成绩一分一段表出炉
  3. mysql 数据类型 decimal_mysql decimal、numeric数据类型
  4. mysql设置查询结果最大值_查找MySQL查询结果字段的最大值
  5. 【AI视野·今日CV 计算机视觉论文速览 第221期】Thu, 17 Jun 2021
  6. php发送邮件时间间隔,在使用phpmailer群发邮件时如何设置发送的时间间隔?
  7. BeginPaint和GetDC有什么区别?【转】
  8. java 索引实现,Java创建ES索引实现
  9. Angular 2 ViewChild ViewChildren
  10. android 静态注册wifi广播,Android静态注册广播receiver检测WIFI连接状况变化
  11. 编译安装Nginx以及配置运行Drupal 8,实现上传进度功能
  12. 魅族消息推送服务器,内部员工透露魅族早已完成统一推送服务适配
  13. c语言无法定位程序输入点,【求助】无法定位程序输入点PacketGetVersion于动态链接库Packet.dll上...
  14. 有向图和无向图用邻接矩阵储存
  15. Python_作图添加水平线和垂直线_linspace语句介绍
  16. 亮紫色晶体meso四(4-氨基苯基)卟啉TAPP/TAPPPt/TAPPCo/TAPPCd/TAPPZn/TAPPPd/TAPPCu/TAPPNi/TAPPFe/TAPPMn金属配合物-齐岳供应
  17. 国科大数字图像处理(复习与整理)
  18. Gson详解--入门篇
  19. nth-child和nth-of-type的区别
  20. 笔记——嵌入式软件开发学习(一)

热门文章

  1. vue之ele组件中input表单限制输入字符
  2. 安卓相机camera2开发知识点
  3. 几个我感觉不错的在线课程学习app
  4. DataSet 过滤方法
  5. 爪哇国新游记之三----自创动态数组类
  6. java计算时间差_Java中计算两个日期的时间差
  7. 解决google扩展程序已损坏的问题
  8. 简单说一下MSDOS分区的几个要点
  9. 高级变量类型-------列表
  10. FTT价值评估报告 | TokenInsight