pywin32实现QQ,⾃动选择联系⼈,并发送图⽚,⽂件,⽂本需要⽤到的模块
import win32gui
import win32con
import win32api
from PyQt5 import QtCore, QtWidgets #复制⽂件到剪切板
from PIL import Image #复制图⽚到剪切板
from io import BytesIO #修改图⽚
import win32clipboard #剪切板操作
import time
import subprocess #在python中运⾏vbs脚本
启动并登录qq
这⾥我选择的是vbs脚本,偷懒了,输⼊账号密码有时候会报错,具体原因还没到,所以登录的时候最好先记住密码subprocess.call(r'cscript XXX\test.vbs')#登录QQ
vbs脚本如下
dim program1
program1="C:\Program Files (x86)\Tencent\QQ\"
set wshshell=CreateObject("wscript.shell")
set (program1)
wscript.sleep 2000
wshshell.appactivate "QQ登录"
wscript.sleep 2000
wshshell.sendkeys "+{TAB}"
wscript.sleep 2000
wshshell.sendkeys "账号"
wscript.sleep 2000
wshshell.sendkeys "{ENTER}"
wscript.sleep 2000
aabb式的词语wshshell.sendkeys "密码"
wshshell.sendkeys "{ENTER}"
Wscript.quit
⾃动选择联系⼈
qq登录后会⾃动定位到搜索框
def searchByUser(uname):#定位QQ框,选中要通讯的好友
hwnd = win32gui.FindWindow('TXGuiFoundation','QQ')#获取句柄
setText(uname)#将好友名称复制到剪切板
win32gui.SendMessage(hwnd,258,22,2080193)#SendMessage的的参数。具体的还是详细查msdn
win32gui.SendMessage(hwnd,770,0,0)
time.sleep(0.5)
win32gui.SendMessage(hwnd, win32con.WM_KEYDOWN, win32con.VK_RETURN,0)#模拟ctrlV
win32gui.SendMessage(hwnd, win32con.WM_KEYUP, win32con.VK_RETURN,0)
复制⽂本到剪切板
def setText(info):#将⽂本复制进剪切板
win32clipboard.OpenClipboard()
win32clipboard.EmptyClipboard()
win32clipboard.SetClipboardData(win32con.CF_UNICODETEXT, info)
win32clipboard.CloseClipboard()
复制⽂件到剪切板
实在没有到好的发送⽂件的⽅法,拖动操作需要⿏标点击实在太⿇烦
# 复制⽂件到剪切板
def filesend(filepath):
app = QtWidgets.QApplication([])
data = QtCore.QMimeData()
url = QtCore.QUrl.fromLocalFile(filepath)#路径都⼿打
data.setUrls([url])
app.clipboard().setMimeData(data)
# clipboard = QtWidgets.QApplication.clipboard()
复制图⽚到剪切板
这⾥是在⽹上的,谢谢⼤神们
#复制图⽚到剪切板
file_image = r'XXX\1.bmp'#图⽚位置路径⼀定要⼿敲
def send_msg_to_clip(type_data, msg):
"""
操作剪贴板分四步:
1. 打开剪贴板:OpenClipboard()
2. 清空剪贴板,新的数据才好写进去:EmptyClipboard()
3. 往剪贴板写⼊数据:SetClipboardData()
4. 关闭剪贴板:CloseClipboard()
:
param type_data: 数据的格式,
unicode字符通常是传 win32con.CF_UNICODETEXT
:param msg: 要写⼊剪贴板的数据
"""
win32clipboard.OpenClipboard()
qq消息win32clipboard.EmptyClipboard()
win32clipboard.SetClipboardData(type_data, msg)
win32clipboard.CloseClipboard()
def paste_img(file_img):#转换图⽚为剪切板可识别格式
image = Image.open(file_img)
# 声明output字节对象
output = BytesIO()
# ⽤BMP (Bitmap) 格式存储
# 这⾥是位图,然后⽤output字节对象来存储
image.save(output,'BMP')
# BMP图⽚有14字节的header,需要额外去除
data = value()[14:]
# 关闭
output.close()
# DIB: 设备⽆关位图(device-independent bitmap),名如其意
# BMP的图⽚有时也会以.DIB和.RLE作扩展名
# 设置好剪贴板的数据格式,再传⼊对应格式的数据,才能正确向剪贴板写⼊数据
send_msg_to_clip(win32clipboard.CF_DIB, data)
发送QQ消息
def send_qq(to_who):#粘贴剪切板内容并回车
"""发送qq消息
to_who:qq消息接收⼈
msg:需要发送的消息
"""
# 将消息写到剪贴板
qq = win32gui.FindWindow(None, to_who)# 获取qq窗⼝句柄
# 投递剪贴板消息到QQ窗体
win32gui.SendMessage(qq,258,22,2080193)
2012奥运首金
win32gui.SendMessage(qq,770,0,0)
# 模拟按下回车键 docs.microsoft/zh-cn/windows/win32/api/winuser/nf-winuser-sendmessage
win32gui.SendMessage(qq, win32con.WM_KEYDOWN, win32con.VK_RETURN,0)#WM_KEYDOWN 按下⼀个键 win32gui.SendMessage(qq, win32con.WM_KEYUP, win32con.VK_RETURN,0)#WM_KEYUP释放⼀个键
关闭联系⼈窗⼝
def closeByUser(uname):#发送完信息之后关闭窗⼝(新的窗⼝的标题将不是昵称)
hwnd = win32gui.FindWindow('TXGuiFoundation', uname)
win32gui.SendMessage(hwnd, win32con.WM_CLOSE,0,0)#当⼀个窗⼝或应⽤程序要关闭时发送⼀个信号
调⽤以上⽅法并选择多个联系⼈
a=['test','123']
for i in a:
time.sleep(5)
searchByUser(i)
time.sleep(3)
filesend(r'XXX\数据库字典2015.xlsx')#路径⼀定要⼿打,不然会出现兼容性问题
send_qq(i)
time.sleep(5)
paste_img(file_image)
send_qq(i)
time.sleep(5)
setText('testetst')
send_qq(i)
time.sleep(5)
closeByUser(i)
和企业的发送图⽚,⽂件,⽂本⽅法都是⼀样的,不⼀样的只在与搜索联系⼈时需要⼿动定位到搜索框,有两种⽅法请参考
1. 通过⿏标定位
""" 获取当前⿏标位置
⼀:
def cursor_point():
pos = win32api.GetCursorPos()
# hw = win32gui.WindowFromPoint(win32api.GetCursorPos()) #通过坐标获取窗⼝句柄
print(pos[0], pos[1])
return int(pos[0]), int(pos[1])
time.sleep(2)
cursor_point()
⼆:
坐标是屏幕左上⾓开始(0,0)到右下⾓最⼤,通过的截图功能,会显⽰当前位置坐标x,y
"""
# 搜索框不会⾃动获取焦点,故需要模拟⿏标点击到搜索框的位置
def m_click(x, y):
win32api.SetCursorPos((x, y))#为⿏标焦点设置⼀个位置
# 定位窗⼝,进⾏昵称备注的搜索(需点击两下才能获取到焦点)
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)# 搜索到之后点击
2.通过快捷键ctrl+f定位搜索框
拍了拍后面加一句话怎么设置
#搜索联系⼈快捷键ctrl+F
def searchuser(uname):
hwnd = win32gui.FindWindow('WeChatMainWndForPC','')#class 和标题 win32gui.SetForegroundWindow(hwnd)#将窗⼝置顶显⽰
风号浪吼什么意思setText(uname)
time.sleep(1)
win32api.keybd_event(17,0,0,0)#ctrl
win32api.keybd_event(70,0,0,0)#F键位码是70
win32api.keybd_event(70,0, win32con.KEYEVENTF_KEYUP,0)
win32api.keybd_event(17,0, win32con.KEYEVENTF_KEYUP,0)
pasteInfo()#粘贴联系⼈
激活qqtime.sleep(2)
win32api.keybd_event(13,0,0,0)#enter键
win32api.keybd_event(13,0, win32con.KEYEVENTF_KEYUP,0)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论