分享

Python发送微信消息(文字、图片、文件)给指定好友和微信群

 东西二王 2023-01-26 发布于重庆

2021-10-23 14:57·Python可乐

本示例是调用Windows API模拟发送,用Python调用win32api这个库来调用Windows API模拟人的手动操作来发送消息。
在使用前,请将你微信的窗口设置为在最前面,这样就便于程序找到你的窗口!

私信小编01即可获取大量Python学习资源

import pyautoguiimport timeimport win32apiimport win32conimport win32guiimport win32clipboard as w 
def FindWindow(chatroom):
    win = win32gui.FindWindow(None, chatroom)
    print("找到窗口句柄:%x" % win)    if win != 0:
        win32gui.ShowWindow(win, win32con.SW_SHOWMINIMIZED)
        win32gui.ShowWindow(win, win32con.SW_SHOWNORMAL)
        win32gui.ShowWindow(win, win32con.SW_SHOW)
        win32gui.SetWindowPos(win, win32con.HWND_TOPMOST, 0, 0, 300, 500, win32con.SWP_SHOWWINDOW)
        win32gui.SetForegroundWindow(win)  # 获取控制
        time.sleep(1)
        tit = win32gui.GetWindowText(win)
        print('已启动【'+str(tit)+'】窗口')    else:
        print('找不到【%s】窗口' % chatroom)
        exit() 
# 设置和粘贴剪贴板def ClipboardText(ClipboardText):
        w.OpenClipboard()
        w.EmptyClipboard()
        w.SetClipboardData(win32con.CF_UNICODETEXT, ClipboardText)
        w.CloseClipboard()
        time.sleep(1)
        win32api.keybd_event(17,0,0,0)
        win32api.keybd_event(86,0,0,0)
        win32api.keybd_event(86,0,win32con.KEYEVENTF_KEYUP,0)
        win32api.keybd_event(17,0,win32con.KEYEVENTF_KEYUP,0) 
# 模拟发送动作def SendMsg():
    win32api.keybd_event(18, 0, 0, 0)
    win32api.keybd_event(83,0,0,0)
    win32api.keybd_event(18,0,win32con.KEYEVENTF_KEYUP,0)
    win32api.keybd_event(83,0,win32con.KEYEVENTF_KEYUP,0) 
# 模拟发送微信消息def SendWxMsg(wxid,sendtext):
        # 先启动微信
        FindWindow('微信')
        time.sleep(1)        # 定位到搜索框
        pyautogui.moveTo(143, 39)
        pyautogui.click()        # 搜索窗口
        ClipboardText(wxid)
        time.sleep(1)        # 进入窗口
        pyautogui.moveTo(155, 120)
        pyautogui.click()        # 粘贴文本内容
        ClipboardText(sendtext)
        SendMsg()
        print('已发送') 
# 调用函数(微信号或微信昵称或备注,需要发送的文本消息)SendWxMsg('face6009','Python发送微信消息')

动图演示

经过学习,我在想要不要用这个方法实现一套简单的微信操作脚本,然后写成HttpApi,然后通过Http进行调用,在网页实现简单的远程控制微信,或者做个机器人等,都可以,但这个目前应该还会有不少的问题,例如延迟,精准度,这些都是一个问题,所以市面上没有人做这类型的,目前我已经实现了部分功能。

1、发送消息给好友
2、发送消息到微信群
3、邀请微信进群
4、将微信移出群聊
5、发布群公告
6、转发一篇图文
2021-09-02新增发送文件和转发群消息

import pyautoguiimport timeimport win32apiimport win32conimport win32guiimport win32clipboard as w 
def FindWindow(chatroom):
    win = win32gui.FindWindow(None, chatroom)
    print("找到窗口句柄:%x" % win)    if win != 0:
        win32gui.ShowWindow(win, win32con.SW_SHOWMINIMIZED)
        win32gui.ShowWindow(win, win32con.SW_SHOWNORMAL)
        win32gui.ShowWindow(win, win32con.SW_SHOW)
        win32gui.SetWindowPos(win, win32con.HWND_TOP, 0, 0, 500, 700, win32con.SWP_SHOWWINDOW)
        win32gui.SetForegroundWindow(win)  # 获取控制
        time.sleep(1)
        tit = win32gui.GetWindowText(win)
        print('已启动【'+str(tit)+'】窗口')    else:
        print('找不到【%s】窗口' % chatroom)
        exit() 
# 设置和粘贴剪贴板def ClipboardText(ClipboardText):
    w.OpenClipboard()
    w.EmptyClipboard()
    w.SetClipboardData(win32con.CF_UNICODETEXT, ClipboardText)
    w.CloseClipboard()
    time.sleep(1)
    win32api.keybd_event(17,0,0,0)
    win32api.keybd_event(86,0,0,0)
    win32api.keybd_event(86,0,win32con.KEYEVENTF_KEYUP,0)
    win32api.keybd_event(17,0,win32con.KEYEVENTF_KEYUP,0) 
# 模拟发送动作def SendMsg():
    win32api.keybd_event(18, 0, 0, 0)
    win32api.keybd_event(83,0,0,0)
    win32api.keybd_event(18,0,win32con.KEYEVENTF_KEYUP,0)
    win32api.keybd_event(83,0,win32con.KEYEVENTF_KEYUP,0) 
# 模拟发送微信文本消息def SendWxMsg(wxid,sendtext):
    # 先启动微信
    FindWindow('微信')
    time.sleep(1)    # 定位到搜索框
    pyautogui.moveTo(143, 39)
    pyautogui.click()    # 搜索微信
    ClipboardText(wxid)
    time.sleep(1)    # 进入聊天窗口
    pyautogui.moveTo(155, 120)
    pyautogui.click()    # 粘贴文本内容
    ClipboardText(sendtext)    # 发送
    SendMsg()
    print('已发送')    # 关闭微信窗口
    time.sleep(1)
    pyautogui.moveTo(683, 16)
    pyautogui.click() 
# 模拟发送文件消息(图片、文档、压缩包等)def SendWxFileMsg(wxid,imgpath):
    # 先启动微信
    FindWindow('微信')
    time.sleep(1)    # 定位到搜索框
    pyautogui.moveTo(143, 39)
    pyautogui.click()    # 搜索微信
    ClipboardText(wxid)
    time.sleep(1)    # 进入聊天窗口
    pyautogui.moveTo(155, 120)
    pyautogui.click()    # 选择文件
    pyautogui.moveTo(373, 570)
    pyautogui.click()
    ClipboardText(imgpath)
    time.sleep(1)
    pyautogui.moveTo(784, 509)
    pyautogui.click()    # 发送
    SendMsg()
    print('已发送')    # 关闭微信窗口
    time.sleep(1)
    pyautogui.moveTo(683, 16)
    pyautogui.click() 
# 转发群里最新的一条消息def ZhuanfaMsg(wxid,groupname):
    # 先启动微信
    FindWindow('微信')
    time.sleep(1)    # 定位到搜索框
    pyautogui.moveTo(143, 39)
    pyautogui.click()    # 搜索群
    ClipboardText(groupname)
    time.sleep(1)    # 进入群窗口
    pyautogui.moveTo(155, 120)
    pyautogui.click()    # 开始转发
    pyautogui.moveTo(484, 439)
    time.sleep(1)
    pyautogui.rightClick()
    pyautogui.moveTo(543, 454)
    time.sleep(1)
    pyautogui.click()    # 搜索用户
    ClipboardText(wxid)
    time.sleep(1)
    pyautogui.moveTo(828, 406)
    pyautogui.click()
    time.sleep(1)    # 确定转发
    pyautogui.moveTo(1108, 755)
    pyautogui.click() 
 
# 发送文本消息(微信号或微信昵称或备注,需要发送的文本消息)SendWxMsg('sansure2016','Python发送微信消息') 
# 发送文件消息(图片、文档、压缩包等)SendWxFileMsg('sansure2016',r"C:\Users\TANKING\Desktop\cbzqx77.jpg") 
# 转发群里最新的一条消息(微信号或微信昵称或备注,群名称)ZhuanfaMsg('sansure2016','里客云科技')

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约