zoukankan      html  css  js  c++  java
  • 自动祝福(定时发送消息)

    自动祝福

    有个同学找我帮忙:明天是她朋友的生日,但她没时间发送祝福,问我能不能弄个自动发送。我想,QQ并没有内置的定时发送功能,紧接着又想起了QQ刷屏助手(见我以前的博文)便用Python实现了她提出的需求。

    代码

    import tkinter as tk
    import tkinter.messagebox as messagebox
    import datetime
    import time
    import win32gui
    import win32con
    import win32clipboard as w
    
    #主要
    def main(name,word,time_h,time_m):
        startTime = datetime.datetime(datetime.datetime.now().year,datetime.datetime.now().month,datetime.datetime.now().day,time_h,time_m,0)
        print('Program not starting yet...')
        wt=0
        while datetime.datetime.now() < startTime:
            time.sleep(1)
            print('time count %s'%wt)
            wt=wt+1
        print('程序在停止'+str(wt)+'秒后于'+str(startTime)+'开始运行')
        print('Executing...')
        print('任务执行')
        #设置剪贴板文本
        w.OpenClipboard()
        w.EmptyClipboard()
        w.SetClipboardData(win32con.CF_UNICODETEXT, word)
        w.CloseClipboard()
        # 获取qq窗口句柄
        qq=win32gui.FindWindow(None,name)
        # 投递剪贴板消息到QQ窗体
        win32gui.SendMessage(qq, 258, 22, 2080193)
        win32gui.SendMessage(qq, 770, 0, 0)
        # 模拟按下回车键
        win32gui.SendMessage(qq, win32con.WM_KEYDOWN, win32con.VK_RETURN, 0)
        win32gui.SendMessage(qq, win32con.WM_KEYUP, win32con.VK_RETURN, 0)
        messagebox.showinfo('提醒','任务执行完成!')
    
    def start():
        messagebox.showwarning('注意','''
    ·开始运行后请勿关闭程序,否则任务会结束!
    ·请确认发送快捷键为Enter
    ''')
        main(name_enterbox.get(),word_enterbox.get(),int(time_enterbox_h.get()),int(time_enterbox_m.get()))
    
    #窗口
    window=tk.Tk()
    window.geometry('380x450')
    window.title('自动祝福')
    #名称输入
    enter_name_tip=tk.Label(window,text='请输入目标用户的昵称(如有备注,则仅输入备注)')
    enter_name_tip.place(x=10,y=10)
    name_enterbox=tk.Entry(window,bd=2,show=None,width=50)
    name_enterbox.place(x=10,y=35)
    #内容输入
    enter_word_tip=tk.Label(window,text='请输入要发送的内容')
    enter_word_tip.place(x=10,y=70)
    word_enterbox=tk.Entry(window,bd=2,show=None,width=50)
    word_enterbox.place(x=10,y=95)
    #时间输入
    enter_time_tip=tk.Label(window,text='请输入时间(24小时制)')
    enter_time_tip.place(x=10,y=130)
    #小时
    time_enterbox_h=tk.Entry(window,bd=2,show=None,width=10)
    time_enterbox_h.place(x=10,y=150)
    enter_time_tip_h=tk.Label(window,text='小时')
    enter_time_tip_h.place(x=90,y=150)
    #小时
    time_enterbox_m=tk.Entry(window,bd=2,show=None,width=10)
    time_enterbox_m.place(x=150,y=150)
    enter_time_tip_m=tk.Label(window,text='分钟')
    enter_time_tip_m.place(x=230,y=150)
    #开始按钮
    start_btn=tk.Button(window,text='开始',bd=3,width=49,height=2,command=start)
    start_btn.place(x=10,y=200)
    #主循环
    window.mainloop()
    
    #定时程序来自CSDN博主weixin_33935505,原文链接:https://blog.csdn.net/weixin_33935505/article/details/93803069
    #发送程序来自“QQ刷屏助手”
    

    注意

    • 定时程序来自CSDN博主weixin_33935505,原文链接

    • 窗口查找功能似乎有些不稳定,最好手动定位。

    目前缺陷

    • 运行时不能用电脑做其他事情
  • 相关阅读:
    java:IO流(处理流(缓冲流,转换流,数据流),对象的序列化,Properties)
    java:容器/集合(Map(HashMap,TreeMap)Collection和Collections,(Collection-value();)
    java:容器/集合Collection(List(ArrayList,LinkedList,Vector),Set(HashSet(LinkedHashSet),TreeSet))
    java:常用类(包装类,equals和==的比较,Date,java.lang.String中常用方法,枚举enum)
    java:LeakFilling(面向对象)
    java:异常机制(try,catch,finally,throw,throws,自定义异常)
    深入剖析Java中的装箱和拆箱
    Java 如何有效地避免OOM:善于利用软引用和弱引用
    浅谈Java中的hashcode方法
    浅析Java中的访问权限控制
  • 原文地址:https://www.cnblogs.com/TotoWang/p/auto_send.html
Copyright © 2011-2022 走看看