YWQ8 发表于 2023-7-12 21:22

微信PC端自动回复

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

winjeak 发表于 2023-7-13 17:51

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

闲来无事,用GPT帮你优化了下代码,{:1_918:}如下:
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, t)] = t
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_924:}

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

感谢分享,支持一下!
页: [1] 2 3 4 5 6
查看完整版本: 微信PC端自动回复