天天看點

Python發送微信消息(文字、圖檔、檔案)給指定好友和微信群(調用Win32 API模拟人的手動操作來發送消息)

本示例是調用Windows API模拟發送,用Python調用win32api這個庫來調用Windows API模拟人的手動操作來發送消息。

在使用前,請将你微信的視窗設定為在最前面,這樣就便于程式找到你的視窗!

很多人學習python,不知道從何學起。

很多人學習python,掌握了基本文法過後,不知道在哪裡尋找案例上手。

很多已經做案例的人,卻不知道如何去學習更加高深的知識。

那麼針對這三類人,我給大家提供一個好的學習平台,免費領取視訊教程,電子書籍,以及課程的源代碼!

QQ群:701698587

歡迎加入,一起讨論 一起學習!      
Python發送微信消息(文字、圖檔、檔案)給指定好友和微信群(調用Win32 API模拟人的手動操作來發送消息)
import pyautogui
import time
import win32api
import win32con
import win32gui
import 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發送微信消息')      

動圖示範

Python發送微信消息(文字、圖檔、檔案)給指定好友和微信群(調用Win32 API模拟人的手動操作來發送消息)

​經過學習,我在想要不要用這個方法實作一套簡單的微信操作腳本,然後寫成HttpApi,然後通過Http進行調用,在網頁實作簡單的遠端控制微信,或者做個機器人等,都可以,但這個目前應該還會有不少的問題,例如延遲,精準度,這些都是一個問題,是以市面上沒有人做這類型的,目前我已經實作了部分功能。

import pyautogui
import time
import win32api
import win32con
import win32gui
import 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','裡客雲科技')