Python给指定微信好友自动发送信息和图片

上一篇的Python给指定QQ好友自动发送信息和图片

实现原理不一样,使用到的类也不一样,QQ可以自动获取焦点,而微信不可以,所以需要借助于鼠标去点击,所以有点点要求就是微信的搜索框的位置需要放置在指定的地方,这里我设置在(100,40)的坐标,当搜索到好友之后,点击好友,坐标在(100,120)的位置

import os
import win32gui #pywin32-221.win-amd64-py3.7.exe
import win32con
from ctypes import *
import win32clipboard as w
import time
from PIL import Image #pip install pillow
#pip install -i https://pypi.douban.com/simple pillow
import win32api

#发送文字
def setText(info):
    w.OpenClipboard()
    w.EmptyClipboard()
    w.SetClipboardData(win32con.CF_UNICODETEXT, info)
    w.CloseClipboard()

#发送图片
def setImage(imgpath):
    im = Image.open(imgpath)
    im.save('1.bmp')
    aString = windll.user32.LoadImageW(0, r"1.bmp", win32con.IMAGE_BITMAP, 0, 0, win32con.LR_LOADFROMFILE)
 
    if aString != 0:  ## 由于图片编码问题  图片载入失败的话  aString 就等于0
        w.OpenClipboard()
        w.EmptyClipboard()
        w.SetClipboardData(win32con.CF_BITMAP, aString)
        w.CloseClipboard()  

#微信搜索框不会自动获取焦点,故需要模拟鼠标点击到搜索框的位置
def m_click(x,y):
    win32api.SetCursorPos((x,y))
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,x,y,0,0)
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,x,y,0,0)

def pasteInfo():
    win32api.keybd_event(17,0,0,0)  #ctrl键位码是17
    win32api.keybd_event(86,0,0,0)  #v键位码是86
    win32api.keybd_event(86,0,win32con.KEYEVENTF_KEYUP,0) #释放按键
    win32api.keybd_event(17,0,win32con.KEYEVENTF_KEYUP,0)

#定位微信窗口,进行昵称备注的搜索(需点击两下才能获取到焦点)
def searchByUser(uname):
    hwnd = win32gui.FindWindow('WeChatMainWndForPC', '微信')
    setText(uname)
    m_click(100,40)
    time.sleep(0.5)
    m_click(100,40)
    pasteInfo()
    time.sleep(1)
    m_click(100,120)#搜索到之后点击
    #win32api.keybd_event(13,0,0,0)#回车
    #win32api.keybd_event(13,0,KEYEVENTF_KEYUP,0)
    #win32gui.SendMessage(hwnd, win32con.WM_KEYDOWN, win32con.VK_RETURN, 0)
    #win32gui.SendMessage(hwnd, win32con.WM_KEYUP, win32con.VK_RETURN, 0)

def sendInfo():
    time.sleep(1)
    pasteInfo()
    time.sleep(1)
    win32api.keybd_event(18, 0, 0, 0) #Alt  
    win32api.keybd_event(83,0,0,0) #s
    win32api.keybd_event(83,0,win32con.KEYEVENTF_KEYUP,0) #释放按键
    win32api.keybd_event(18,0,win32con.KEYEVENTF_KEYUP,0)


#发送完信息之后关闭窗口(跟QQ不一样,可以不关闭),接着搜索发送
def closeByUser(uname):
    hwnd = win32gui.FindWindow('WeChatMainWndForPC', '微信')
    win32api.keybd_event(18,0,0,0)  #Alt
    win32api.keybd_event(115,0,0,0) #F4
    win32api.keybd_event(115,0,KEYEVENTF_KEYUP,0)
    win32api.keybd_event(18,0,KEYEVENTF_KEYUP,0)

'''
searchByUser('Tony老师')
setText('Tony老师理发师')
sendInfo()

time.sleep(1)
searchByUser('文件传输助手')
setText('地表最强CPU')
sendInfo()
'''

#获取无后缀的图片名称
def getNosuffixImgName(imgname):
    return os.path.splitext(imgname)[0]

imgdir='imgs/'
imgs=os.listdir(imgdir)
for img in imgs:
    searchByUser(getNosuffixImgName(img))
    setImage(imgdir+img)
    sendInfo()
    time.sleep(1)

pip install -i https://pypi.douban.com/simple pyinstaller
pyinstaller -F -w -i xxx.ico yy.py
在dist目录下面生成exe文件

keybd_event()函数原型 

   VOID keybd_event(

  BYTE bVk, // virtual-key code

  BYTE bScan, // hardware scan code

  DWORD dwFlags, // flags specifying various function options

  DWORD dwExtraInfo // additional data associated with keystroke

  );

从原型可以看出,keybd_event()共有四个参数:

      第一个为按键的虚拟键值,如回车键为vk_return, tab键为vk_tab(其他具体的参见附录:常用模拟键的键值对照表);

      第二个参数为扫描码,一般不用设置,用0代替就行;

      第三个参数为选项标志,如果为keydown则置0即可,如果为keyup则设成"KEYEVENTF_KEYUP";

      第四个参数一般也是置0即可。

   字母和数字键     数字小键盘的键          功能键         其它键 
      键   键码     键   键码       键   键码     键      键码 
      A   65       0    96        F1   112      Backspace    8 
      B   66       1    97        F2   113      Tab        9 
      C   67       2    98        F3   114      Clear       12 
      D   68       3    99        F4   115      Enter       13 
      E   69       4    100       F5   116     Shift        16 
      F   70       5    101       F6   117     Control       17 
      G     71       6    102       F7   118        Alt        18 
      H     72       7    103       F8   119     Caps Lock    20 
      I    73        8   104       F9   120       Esc          27 
      J   74        9   105       F10  121      Spacebar      32 
      K   75        *   106       F11  122       Page Up       33 
      L   76        +   107       F12    123       Page Down     34 
      M     77       Enter  108         --   --      End         35 
      N   78       -    109         --   --         Home        36 
      O   79       .    110          --   --         Left Arrow   37 
      P   80       /    111          --   --         Up Arrow     38 
      Q   81       --   --            --   --        Right Arrow     39 
      R   82       --   --            --   --        Down Arrow    40 
      S   83       --   --            --   --         Insert        45 
      T   84       --   --            --   --         Delete       46 
      U   85       --   --           --   --          Help       47 
      V   86       --   --           --   --          Num Lock      144 
      W     87          
      X   88      
      Y   89      
      Z   90      
      0   48      
      1   49      
      2   50       
      3   51       
      4   52       
      5   53       
      6   54       
      7   55       
      8   56       
      9   57  

发布了46 篇原创文章 · 获赞 9 · 访问量 3647

猜你喜欢

转载自blog.csdn.net/weixin_41896770/article/details/102788806