向AI转型的程序员都关注公众号 机器学习AI算法工程
在日常的软件开发与自动化任务处理中,实现对即时通讯工具如微信的自动化操作往往能为我们带来诸多便利。本文将详细解析一段基于 Python 编写的代码,该代码能够实现对微信消息的监控与特定回复处理,以下是具体的分析。
结果展示(文末附完整代码):
百度文心一言API-Python版(完整代码)
https://blog.csdn.net/NiJiMingCheng/article/details/143856369
字节-豆包AI-Python配置(速通)
https://blog.csdn.net/NiJiMingCheng/article/details/143868917
一、代码概述
这段 Python 代码实现了一系列功能,主要围绕着与微信窗口的交互、消息的读取以及根据不同消息内容进行针对性回复展开。它集成了多个库,如 volcenginesdkarkruntime、pyautogui、uiautomation、win32gui、win32con 等,同时还可调用了自定义的 百度AI开发平台的api文心一言大模型或者字节跳动的AI豆包大模型来处理不同来源的回复生成。
二、代码详细解析
安装所需要的库
pip install pywin32
(一)日志设置
在代码开头部分,通过以下语句设置了日志:
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
这使得程序在运行过程中能够记录不同级别的信息,方便后续查看程序运行状态以及排查可能出现的错误。
(二)获取豆包回复的函数 doubao
def doubao(content):
client = Ark(api_key="YOUR-API-KEY")
completion = client.chat.completions.create(
model="MODEL-TYPE",
messages=[
{"role": "user", "content": content},
]
)
print(completion.choices[0].message.content)
return completion.choices[0].message.content
此函数用于向特定的模型(这里是示例MODEL-TYPE模型)发送用户提供的内容 content,并获取模型返回的回复。通过设置好的 Ark 客户端以及相关参数,实现了与外部模型的交互,获取到的回复后续可用于回复微信消息。
(三)获取微信窗口句柄函数 get_wechat_hwnd
def get_wechat_hwnd():
hwnd = win32gui.FindWindow('WeChatMainWndForPC', '微信')
if hwnd:
win32gui.ShowWindow(hwnd, win32con.SW_SHOW)
win32gui.SetForegroundWindow(hwnd)
return hwnd
该函数利用 win32gui 库的 FindWindow 函数来查找微信主窗口的句柄。如果找到句柄,还会通过 ShowWindow 和 SetForegroundWindow 函数将微信窗口显示并设置为前台窗口,以便后续进行操作。
(四)复位聊天窗口函数 reset_chat_window
def reset_chat_window(hwnd):
left, top, right, bottom = win32gui.GetWindowRect(hwnd)
leftpoint = left + 155
toppoint = top + 200 # 180为第三个聊天窗口,加80为第四个聊天窗口
pyautogui.moveTo(leftpoint, toppoint)
pyautogui.click()
return '已复位'
此函数根据传入的微信窗口句柄 hwnd
,通过获取窗口的坐标信息,计算出特定位置的坐标点,然后利用 pyautogui
库将鼠标移动到该点并点击,实现了将聊天窗口复位到消息列表的第二个聊天窗口的功能。
(五)初始化控件引用函数 initialize_controls
def initialize_controls():
wx = WindowControl(Name="微信")
wx.SwitchToThisWindow()
hw = wx.ListControl(Name="会话")
return wx, hw
这里通过 uiautomation
库的相关控件类,首先获取到微信窗口的控件引用 wx
,并将其切换到前台,然后进一步获取到会话列表的控件引用 hw
,为后续读取和处理消息提供了基础。
(六)主函数 main
1. def main():
2. hwnd = get\_wechat\_hwnd()
3. if not hwnd:
4. logging.error("无法找到微信窗口")
5. return
6.
7. wx, hw = initialize\_controls()
8. last\_checked\_message = None
9. while True:
10. try:
11. # 尝试获取未读消息控件
12. we = hw.TextControl(searchDepth=4)
13.
14. # 检查是否有新的未读消息
15. if we.Name:
16. we.Click(simulateMove=False)
17. # 获取当前最后一条消息
18. last\_msg = wx.ListControl(Name='消息').GetChildren()[-1].Name
19. print(last\_msg[:2])
20. if last\_msg[:2] == 'DB':
21. res = doubao(last\_msg[2:])
22. wx.SendKeys(res)
23. wx.SendKeys('{ENTER}')
24. reset\_chat\_window(get\_wechat\_hwnd())
25. elif last\_msg[:2] == 'WX':
26. res = main\_(last\_msg[2:])
27. wx.SendKeys(res)
28. wx.SendKeys('{ENTER}')
29. reset\_chat\_window(get\_wechat\_hwnd())
30. elif last\_msg[:2] == 'TD':
31. break
32.
33. else:
34. reset\_chat\_window(get\_wechat\_hwnd())
35. pass
36.
37. # 添加延迟以避免过度检查
38. time.sleep(1) # 根据需要调整延迟时间
39.
40. except IndexError:
41. logging.warning("未找到未读消息控件")
42.
43. except Exception as e:
44. logging.error(f"处理未读消息时发生错误: {e}")
45. # 根据需要决定是否退出循环
在主函数中,首先通过 get_wechat_hwnd 函数尝试获取微信窗口句柄,如果获取失败则记录错误并返回。接着通过 initialize_controls 函数初始化控件引用。
然后进入一个循环,在循环中不断尝试获取未读消息控件。如果找到未读消息控件并且消息内容满足特定条件,就会进行相应的回复操作:
当消息前两位是 DB 时:
则优先进行我们的判断语句进行回复指定的内容。
其他情况则调用 doubao 函数启用字节跳动的AI豆包获取回复并发送,最后复位聊天窗口。
当消息前两位是 WX 时:
处理逻辑与 DB 类似,并且调用yiyan函数启用百度AI文心一言获取回复而不是 doubao 函数。
当消息前两位是 TD 时,直接跳出循环,关闭自动回复。
在整个过程中,如果出现索引错误或其他异常,都会进行相应的日志记录。
三、总结
通过对这段代码的详细解析,我们可以看到它实现了一个较为完整的微信消息自动化处理流程。从获取微信窗口句柄、初始化控件,到监控消息并根据不同内容进行针对性回复,涵盖了多个方面的技术要点,包括 Windows 窗口操作、自动化鼠标键盘操作以及与外部模型的交互获取回复等。希望本文的解析能够帮助读者更好地理解此类自动化程序的实现思路与代码细节,也为大家在自己的开发项目中实现类似功能提供一定的参考。
机器学习算法AI大数据技术
搜索公众号添加: datanlp
长按图片,识别二维码
阅读过本文的人还看了以下文章:
整理开源的中文大语言模型,以规模较小、可私有化部署、训练成本较低的模型为主
基于40万表格数据集TableBank,用MaskRCNN做表格检测
《深度学习入门:基于Python的理论与实现》高清中文PDF+源码
2019最新《PyTorch自然语言处理》英、中文版PDF+源码
《21个项目玩转深度学习:基于TensorFlow的实践详解》完整版PDF+附书代码
PyTorch深度学习快速实战入门《pytorch-handbook》
【下载】豆瓣评分8.1,《机器学习实战:基于Scikit-Learn和TensorFlow》
李沐大神开源《动手学深度学习》,加州伯克利深度学习(2019春)教材
【Keras】完整实现‘交通标志’分类、‘票据’分类两个项目,让你掌握深度学习图像分类
如何利用全新的决策树集成级联结构gcForest做特征工程并打分?
Machine Learning Yearning 中文翻译稿
斯坦福CS230官方指南:CNN、RNN及使用技巧速查(打印收藏)
中科院Kaggle全球文本匹配竞赛华人第1名团队-深度学习与特征工程
不断更新资源
深度学习、机器学习、数据分析、python
搜索公众号添加: datayx