吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 6342|回复: 50
收起左侧

[Python 原创] 微信PC端自动回复

[复制链接]
YWQ8 发表于 2023-7-12 21:22
简介:输入当天日程和特定回复,在收到新消息时判断,如果收到的是关键字,就发送特定回复,否则判断本地时间是否有日程,如果有,回复相应日程信息,无则回复设定信息。
注意:写着玩的,功能很局限,仅供学习。日程时间只弄了整点到整点的,而且时间重叠时,重叠时间段中最先输入的有效。
注意,原理是不考虑同时收到两个人的消息的情况下,新收到消息的聊天会到第一位,注意新消息并不区分本人和对方。所以,如果微信消息有置顶聊天,那么程序只能对置顶的聊天有效,否则全有效。
使用时先按右上角按钮将微信置顶并切换到聊天页,注意输入格式,先输入一个数字表示当天有几个日程,后每一行输入一项日程,两个以空格隔开的数字表示日程的起始时间,然后一段话是这个时间段的回复。日程输入完毕,输入特定的一段话,这段话在收到关键字后回复(默认关键字是TD)。
注意,程序进入检测状态后,不断定位鼠标和不停切换焦点到微信,影响其他任何操作!长按ESC关闭程序!
[Python] 纯文本查看 复制代码
from uiautomation import WindowControl
from _datetime import datetime
import keyboard

wx = WindowControl(name='微信')
if (wx.Name != '微信'):
    print('请将微信置顶后再运行!\n')
    exit()
else:
    print(wx)
wx.SwitchToThisWindow()
hh = wx.ListControl(name='会话')
print(hh)
n = int(input('您今天共有几项日程?\n'))
data = {}
print('请输入您的各项日程,先输入两个整数表示时间,后输入一段文字描述日程,均使用空格隔开,24小时制')
for i in range(n):
    t = input().split()
    data[(t[0], t[1])] = t[2]
# print(data)
ms=input('请您输入TD激活的应答:')
print(datetime.now().strftime("%H"))
lm=wx.Name
f=False
while True:
    if keyboard.is_pressed('esc'):
        break  # 退出循环
        # quit()  # 退出程序
    we=hh.TextControl(searchDepth=5)
    while not we.Exists(0):
        pass
    if we.Name:
        we.Click(simulateMove=False)
        tt=datetime.now().strftime("%H")
        flag=True
        m = wx.ListControl(Name='消息').GetChildren()[-1].Name
        print(m)
        if(m=='TD'):
            wx.SendKeys(ms, waitTime=1)
            m = ms
            wx.SendKeys('{Enter}', waitTime=0)
        elif f:
            if m != lm:
                for (x,y) in data:
                    if x<=tt<y:
                        wx.SendKeys(data[(x,y)],waitTime=1)
                        m=data[(x,y)]
                        wx.SendKeys('{Enter}', waitTime=0)
                        flag=False
                        break
                if flag:
                    wx.SendKeys('正忙(自动回复)', waitTime=1)
                    m='正忙(自动回复)'
                    wx.SendKeys('{Enter}', waitTime=500)
                we.Click(x=100, y=300)
        f=True
        lm=m
        print('lm=',lm)

免费评分

参与人数 10吾爱币 +15 热心值 +9 收起 理由
jiuchen123 + 1 + 1 我很赞同!
qhl520 + 1 + 1 这个不错,做售后的我,省事不少
ElysiaSG + 1 + 1 我很赞同!
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
qq114168 + 1 + 1 我很赞同!
fei0415 + 1 + 1 这是啥神奇的工具。。。。。
逸飞兮 + 1 我很赞同!
BlackSpace + 1 + 1 谢谢@Thanks!
春又来人已去 + 1 热心回复!
kk1212 + 1 + 1 谢谢@Thanks!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

winjeak 发表于 2023-7-13 17:51
本帖最后由 winjeak 于 2023-7-13 17:52 编辑

闲来无事,用GPT帮你优化了下代码,如下:
[Python] 纯文本查看 复制代码
from uiautomation import WindowControl
from _datetime import datetime
import keyboard

def send_message(wx, message):
    wx.SendKeys(message, waitTime=1)
    wx.SendKeys('{Enter}', waitTime=0)

wx = WindowControl(name='微信')
busy_message = '正忙(自动回复)'
if (wx.Name != '微信'):
    print('请将微信置顶后再运行!\n')
    exit()
else:
    print(wx)
wx.SwitchToThisWindow()
hh = wx.ListControl(name='会话')
print(hh)
n = int(input('您今天共有几项日程?\n'))
data = {}
print('请输入您的各项日程,先输入两个整数表示时间,后输入一段文字描述日程,均使用空格隔开,24小时制')
for i in range(n):
    t = input().split()
    data[(t[0], t[1])] = t[2]
ms=input('请您输入TD激活的应答:')
print(datetime.now().strftime("%H"))
last_message=wx.Name
is_first_loop=False
while True:
    if keyboard.is_pressed('esc'):
        break
    we=hh.TextControl(searchDepth=5)
    while not we.Exists(0):
        pass
    if we.Name:
        we.Click(simulateMove=False)
        current_time=datetime.now().strftime("%H")
        is_schedule_found=True
        current_message = wx.ListControl(Name='消息').GetChildren()[-1].Name
        print(current_message)
        if(current_message=='TD'):
            send_message(wx, ms)
            current_message = ms
        elif is_first_loop:
            if current_message != last_message:
                for (start_time,end_time) in data:
                    if start_time<=current_time<end_time:
                        send_message(wx, data[(start_time,end_time)])
                        current_message=data[(start_time,end_time)]
                        is_schedule_found=False
                        break
                if is_schedule_found:
                    send_message(wx, busy_message)
                    current_message=busy_message
                we.Click(x=100, y=300)
        is_first_loop=True
        last_message=current_message
        print('last_message=',last_message)
 楼主| YWQ8 发表于 2023-7-13 10:57
wangdeshui 发表于 2023-7-13 06:46
影响其他任何操作,这就。。。。。

因为itchat库基本不能用了,所以只好模拟操作

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
wangdeshui + 1 + 1 用不上。还是精神上支持下

查看全部评分

zhangxiaoxiao 发表于 2023-7-13 05:39
wangdeshui 发表于 2023-7-13 06:46
影响其他任何操作,这就。。。。。
WG315 发表于 2023-7-13 06:57
运行环境如何
summer383 发表于 2023-7-13 08:08
支持一下!
snaker00 发表于 2023-7-13 08:35
使用wxpy不是更好
fpsuuu 发表于 2023-7-13 08:36
不错哟!!!!
bluemelody 发表于 2023-7-13 08:36
python可以实现后台运行吗?
千千静静听 发表于 2023-7-13 08:51
还有这种操作
KFCcrazyThurs 发表于 2023-7-13 08:56
感谢分享,支持一下!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 16:50

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表