cluic / wxauto

Windows版本微信客户端(非网页版)自动化,可实现简单的发送、接收微信消息,简单微信机器人
MIT License
2.76k stars 444 forks source link

微信最新版本需要重新适配,代码需要更改如下: #130

Open DreammakerXT opened 1 year ago

DreammakerXT commented 1 year ago

定义在类WeChat()中的self.EditMsg = self.UiaAPI.EditControl(Name='输入')不再固定,会随着不同聊天窗口的窗口名而变化,涉及到sendMsg和sendFile两个方法,需要在使用时传入窗口参数,已测试。

DreammakerXT commented 1 year ago

wxauto.py 修改第一处: def init(self): self.UiaAPI = uia.WindowControl(ClassName='WeChatMainWndForPC') self.SessionList = self.UiaAPI.ListControl(Name='会话')

self.EditMsg = self.UiaAPI.EditControl(Name='输入')

    self.SearchBox = self.UiaAPI.EditControl(Name='搜索')
    self.MsgList = self.UiaAPI.ListControl(Name='消息')
    self.SessionItemList = []

修改第二处: def SendMsg(self, msg, window_title, clear=True): '''向当前窗口发送消息 msg : 要发送的消息 clear : 是否清除当前已编辑内容 ''' self.UiaAPI.SwitchToThisWindow() EditMsg = self.UiaAPI.EditControl(Name=f'{window_title}') if clear: EditMsg.SendKeys('{Ctrl}a', waitTime=0) EditMsg.SendKeys(msg, waitTime=0) EditMsg.SendKeys('{Enter}', waitTime=0) 修改第三处: def SendFiles(self, *filepath, window_title, not_exists='ignore'): 。。。 if not key: return 0 if not COPYDICT: EditMsg = self.UiaAPI.EditControl(Name=f'{window_title}') EditMsg.SendKeys(' ', waitTime=0) EditMsg.SendKeys('{Ctrl}a', waitTime=0) EditMsg.SendKeys('{Ctrl}c', waitTime=0) EditMsg.SendKeys('{Delete}', waitTime=0) 。。。 自身调用时修改如下: wx = WeChat() wx.sendMsg("xxx")-->wx.sendMsg("xxx", "所要输入内容的窗口的名字(即群或者个人名)") sendFile一样修改

greejim commented 1 year ago

DreammakerXT

感谢 看明白了。OK

mo1314521 commented 1 year ago

循环发送多个对象时还是会报错

zxt1121 commented 1 year ago

wxauto.py 修改第一处: def init(self): self.UiaAPI = uia.WindowControl(ClassName='WeChatMainWndForPC') self.SessionList = self.UiaAPI.ListControl(Name='会话') # self.EditMsg = self.UiaAPI.EditControl(Name='输入') self.SearchBox = self.UiaAPI.EditControl(Name='搜索') self.MsgList = self.UiaAPI.ListControl(Name='消息') self.SessionItemList = [] 修改第二处: def SendMsg(self, msg, window_title, clear=True): '''向当前窗口发送消息 msg : 要发送的消息 clear : 是否清除当前已编辑内容 ''' self.UiaAPI.SwitchToThisWindow() EditMsg = self.UiaAPI.EditControl(Name=f'{window_title}') if clear: EditMsg.SendKeys('{Ctrl}a', waitTime=0) EditMsg.SendKeys(msg, waitTime=0) EditMsg.SendKeys('{Enter}', waitTime=0) 修改第三处: def SendFiles(self, *filepath, window_title, not_exists='ignore'): 。。。 if not key: return 0 if not COPYDICT: EditMsg = self.UiaAPI.EditControl(Name=f'{window_title}') EditMsg.SendKeys(' ', waitTime=0) EditMsg.SendKeys('{Ctrl}a', waitTime=0) EditMsg.SendKeys('{Ctrl}c', waitTime=0) EditMsg.SendKeys('{Delete}', waitTime=0) 。。。 自身调用时修改如下: wx = WeChat() wx.sendMsg("xxx")-->wx.sendMsg("xxx", "所要输入内容的窗口的名字(即群或者个人名)") sendFile一样修改

自身调用时,who = ‘文件传输助手’ wx.ChatWith(who) wx.SendMsg('xxx',who)

lan-tian-qing commented 1 year ago

wxauto.py 修改第四处: def SendClipboard(self,window_title): '''向当前聊天页面发送剪贴板复制的内容''' self.SendMsg('{Ctrl}v',window_title) 自身调用时:who = '文件传输助手' wx.SendClipboard(who)

修改第三处中: 257行 self.SendClipboard()
改为 self.SendClipboard(window_title)

调用 SendFiles('xxx',who) 出现报错 TypeError: SendFiles() missing 1 required keyword-only argument: 'window_title' 解决方法
修改方法 def SendFiles(self, window_title, *filepath, not_exists='ignore'):
调用变为 who = ‘文件传输助手’ wx.ChatWith(who) wx.SendFiles(who,'xxx')

qq752381473 commented 1 year ago

微信最新版本3.9.6.33发送消息不了

jinde98 commented 10 months ago

我是微信3.9.5版本的,只修改了一条好像也能用了 。 self.EditMsg = self.UiaAPI.EditControl(LocalizedControlType='编辑') 位置如下:

class WeChat:
    def __init__(self):
        self.UiaAPI = uia.WindowControl(ClassName='WeChatMainWndForPC')
        self.SessionList = self.UiaAPI.ListControl(Name='会话')
        # self.EditMsg = self.UiaAPI.EditControl(Name='输入') #这是原来的
        self.EditMsg = self.UiaAPI.EditControl(LocalizedControlType='编辑') #这是新加的
        self.SearchBox = self.UiaAPI.EditControl(Name='搜索')
        self.MsgList = self.UiaAPI.ListControl(Name='消息')
        self.SessionItemList = []
cluic commented 10 months ago

试下新版本,可下载图片,适用于最新的PC微信3.9.8.15,重写了wxauto,欢迎指出bug

543390944 commented 6 months ago

感谢,我也是这个报错。