本示例是调用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','里客云科技')