ljc545w / ComWeChatRobot

PC微信机器人,实现获取通讯录,发送文本、图片、文件等消息,封装COM接口供Python、C#调用
1.64k stars 451 forks source link

关于Hook图片的时序问题 #106

Closed tmsdy closed 2 years ago

tmsdy commented 2 years ago

我自定义了一个消息接收的事件类:

class WeChatEvent(WeChatEventSink):
    def OnGetMessageEvent(self,msg,*args,**kwargs):
           ----自定义的消息处理逻辑-----

然后在主线程中进行了注册,并且启用了hook图片消息

wx.HookImageMsg(img_path)
print(f'HookImageMsg: {ret}')
wx.StartReceiveMessage()
handle_msg= WeChatEvent()
wxRobot.register_msg_event(pid_list[0], handle_msg)

现在遇到的问题是,收到图片消息后,只有执行完handle_msg,才会下载图片,但我想在自定义消息处理逻辑里面实现图片转发。 我尝试启用一个队列(收到图片消息后,把图片文件名存入队列,然后另外启用一个线程去处理队列消息,又遇到了另一个多线程访问COM对象的报错 _ctypes.COMError: (-2147221008, '尚未调用 CoInitialize。' )

所以有没有可能在执行handle_msg前将图片Hook到本地??

ljc545w commented 2 years ago

把广播消息放到线程中执行或许可以解决这个问题,我试试看。

tmsdy commented 2 years ago

等待大佬的好消息~

ljc545w commented 2 years ago

在线程中广播消息,客户端是可以阻塞的。代码已经提交了#110

tmsdy commented 2 years ago

验证OK