Python 之 控制QQ(9.5.8.28186)、微信(3.6.0.18)
阿新 • • 發佈:2022-03-31
Python 之 控制QQ(9.5.8.28186)、微信(3.6.0.18)
可能需要使用的庫,反正一大堆,部分程式碼裡有用到,部分是我自己用的
from asyncio.windows_events import NULL import datetime import win32gui import win32con import win32clipboard as w import time from win32api import keybd_event import pandas as pd import xlwings as xw from PIL import ImageGrab, Image import shutil from ctypes import * from PIL import ImageGrab, Image from win32com.client import DispatchEx import pythoncom import os import time from decimal import * from apscheduler.schedulers.blocking import BlockingScheduler import pythoncom import tkinter import tkinter.messagebox #下面時我自己寫的引用 import DowFile as DF import module.FileOperations import module.UpExcel as UE
開啟QQ、微信
通過快捷鍵ctrl + alt + z 開啟QQ
通過快捷鍵ctrl + alt + w 開啟微信
# 開啟QQ def OpenQQ(TFdict): try: keybd_event(win32con.VK_CONTROL, 0, 0, 0) keybd_event(win32con.VK_MENU, 0, 0, 0) keybd_event(90, 0, 0, 0) keybd_event(win32con.VK_CONTROL, 0, win32con.KEYEVENTF_KEYUP, 0) keybd_event(win32con.VK_MENU, 0, win32con.KEYEVENTF_KEYUP, 0) keybd_event(90, 0, win32con.KEYEVENTF_KEYUP, 0) TFdict['TF'] = 'T' return TFdict except: TFdict['QQReason'] = '開啟QQ失敗' return TFdict # 開啟WeChat def OpenWeChat(TFdict): try: keybd_event(win32con.VK_CONTROL, 0, 0, 0) keybd_event(win32con.VK_MENU, 0, 0, 0) keybd_event(87, 0, 0, 0) keybd_event(win32con.VK_CONTROL, 0, win32con.KEYEVENTF_KEYUP, 0) keybd_event(win32con.VK_MENU, 0, win32con.KEYEVENTF_KEYUP, 0) keybd_event(87, 0, win32con.KEYEVENTF_KEYUP, 0) TFdict['TF'] = 'T' return TFdict except: TFdict['WeChatReason'] = '開啟微信失敗' return TFdict
複製快捷鍵
# 將訊息寫入剪貼簿
def setText(text):
try:
w.OpenClipboard()
w.EmptyClipboard()
w.SetClipboardData(win32con.CF_UNICODETEXT, text)
w.CloseClipboard()
except Exception as e:
print(e)
貼上快捷鍵
keybd_event(17, 0, 0, 0) # ctrl keybd_event(86, 0, 0, 0) # V keybd_event(86, 0, win32con.KEYEVENTF_KEYUP, 0) # 釋放按鍵 keybd_event(17, 0, win32con.KEYEVENTF_KEYUP, 0) time.sleep(1.5)
搜尋欄搜尋指定好友
# qq搜尋欄搜尋指定好友
def QQsearchUser(name, TFdict):
try:
# 滑鼠定位qq搜尋欄
hand = win32gui.FindWindow('TXGuiFoundation', 'QQ')
setText(name)
win32gui.SendMessage(hand, 770, 0, 0)
# 表示停止1.5秒再執行(執行太快qq會反應不過來)
time.sleep(1.5)
win32gui.SendMessage(hand, win32con.WM_KEYDOWN, win32con.VK_RETURN, 0)
TFdict['TF'] = 'T'
TFdict['QQTF'] = 'T'
TFdict['QQReason'] = 'QQ搜尋好友成功'
return TFdict
except:
TFdict['TF'] = 'F'
TFdict['QQTF'] = 'F'
TFdict['QQReason'] = 'QQ搜尋好友失敗'
return TFdict
# 微信搜尋欄搜尋指定好友
def WeChatsearchUser(name, TFdict, repetition_num=0):
try:
# 滑鼠定位微信搜尋欄
# hand = win32gui.FindWindow(None, chatroom)
keybd_event(win32con.VK_CONTROL, 0, 0, 0) # ctrl
keybd_event(70, 0, 0, 0) # F
keybd_event(win32con.VK_CONTROL, 0, win32con.KEYEVENTF_KEYUP, 0)
keybd_event(70, 0, win32con.KEYEVENTF_KEYUP, 0)
setText(name)
keybd_event(17, 0, 0, 0) # ctrl
keybd_event(86, 0, 0, 0) # V
keybd_event(86, 0, win32con.KEYEVENTF_KEYUP, 0) # 釋放按鍵
keybd_event(17, 0, win32con.KEYEVENTF_KEYUP, 0)
time.sleep(1.5)
keybd_event(40, 0, 0, 0) # 下鍵
keybd_event(40, 0, win32con.KEYEVENTF_KEYUP, 0)
time.sleep(1)
keybd_event(38, 0, 0, 0) # 上鍵
keybd_event(38, 0, win32con.KEYEVENTF_KEYUP, 0)
time.sleep(1)
# 多個好友時,多按幾次下鍵
if repetition_num != 0 :
for i in range(repetition_num):
keybd_event(40, 0, 0, 0) # 下鍵
keybd_event(40, 0, win32con.KEYEVENTF_KEYUP, 0)
time.sleep(1)
keybd_event(13, 0, 0, 0) # enter
keybd_event(13, 0, win32con.KEYEVENTF_KEYUP, 0)
# hand = win32gui.FindWindow(None, name)
# win32gui.SendMessage(hand, 770, 0, 0)
# 表示停止1.5秒再執行(執行太快qq會反應不過來)
time.sleep(1)
# win32gui.SendMessage(hand, win32con.WM_KEYDOWN, win32con.VK_RETURN, 0)
TFdict['TF'] = 'T'
TFdict['WeChatTF'] = 'T'
TFdict['WeChatReason'] = '微信搜尋好友成功'
return TFdict
except:
TFdict['TF'] = 'F'
TFdict['WeChatTF'] = 'F'
TFdict['WeChatReason'] = '微信搜尋好友失敗'
return TFdict
QQ、微信傳送訊息
# QQ傳送資訊
def QQsendMsger(TFdict):
try:
# 獲取當前視窗名稱
qqtitle = win32gui.GetWindowText(
win32gui.GetForegroundWindow())
if (coding in qqtitle) == True:
# 自動定位聊天視窗
hand = win32gui.FindWindow('TXGuiFoundation', qqtitle)
time.sleep(0.5)
setText(msg)
win32gui.SendMessage(hand, 770, 0, 0)
win32gui.SendMessage(
hand, win32con.WM_KEYDOWN, win32con.VK_RETURN, 0)
time.sleep(0.5)
hand = win32gui.FindWindow('TXGuiFoundation', qqtitle)
setImage(ImageAdd)
win32gui.SendMessage(hand, 770, 0, 0)
win32gui.SendMessage(
hand, win32con.WM_KEYDOWN, win32con.VK_RETURN, 0)
time.sleep(1)
win32gui.PostMessage(
hand, win32con.WM_CLOSE, 0, 0) # win close
time.sleep(0.5)
print("QQ執行完成!")
TFdict['TF'] = 'T'
TFdict['QQTF'] = 'T'
TFdict['QQReason'] = 'QQ成功'
return TFdict
elif win32gui.FindWindow('TXGuiFoundation', '查詢') != NULL:
CZhand = win32gui.FindWindow('TXGuiFoundation', '查詢')
win32gui.PostMessage(
CZhand, win32con.WM_CLOSE) # win close
print("QQ執行完成!傳送失敗")
TFdict['TF'] = 'F'
TFdict['QQTF'] = 'F'
TFdict['QQReason'] = '失敗,QQ未找到好友。'
return TFdict
else:
# 自動定位聊天視窗
hand = win32gui.FindWindow('TXGuiFoundation', qqtitle)
time.sleep(1)
win32gui.PostMessage(
hand, win32con.WM_CLOSE, 0, 0) # win close
time.sleep(2)
# 開啟QQ
TFdict = OpenQQ(TFdict)
time.sleep(0.5)
# 搜尋好友
TFdict = QQsearchUser(coding, TFdict)
time.sleep(0.5)
# 重新發送資訊
TFdict = QQsendMsger(TFdict)
time.sleep(0.5)
print("QQ執行完成-2!")
TFdict['TF'] = 'T'
TFdict['QQTF'] = 'T'
TFdict['QQReason'] = 'QQ成功'
return TFdict
except Exception as e:
CZhand = win32gui.FindWindow('TXGuiFoundation', '查詢')
win32gui.ShowWindow(CZhand, win32con.SW_HIDE) # 隱藏
print("QQ執行完成!傳送失敗,報錯:", e)
TFdict['TF'] = 'F'
TFdict['QQTF'] = 'F'
TFdict['QQReason'] = '失敗,QQ未找到好友。'
return TFdict
# 微信傳送資訊
def WeChatsendMsger(TFdict):
try:
# 獲取當前視窗名稱
wxtitle = win32gui.GetWindowText(win32gui.GetForegroundWindow())
if wxtitle == '微信':
time.sleep(1)
setText(msg)
time.sleep(1)
keybd_event(17, 0, 0, 0) # ctrl
keybd_event(86, 0, 0, 0) # V
keybd_event(86, 0, win32con.KEYEVENTF_KEYUP, 0) # 釋放按鍵
keybd_event(17, 0, win32con.KEYEVENTF_KEYUP, 0)
time.sleep(1)
keybd_event(18, 0, 0, 0) # ctrl
keybd_event(83, 0, 0, 0) # s
keybd_event(83, 0, win32con.KEYEVENTF_KEYUP, 0)
keybd_event(18, 0, win32con.KEYEVENTF_KEYUP, 0)
time.sleep(1)
setImage(ImageAdd)
time.sleep(1)
keybd_event(17, 0, 0, 0) # ctrl
keybd_event(86, 0, 0, 0) # V
keybd_event(86, 0, win32con.KEYEVENTF_KEYUP, 0) # 釋放按鍵
keybd_event(17, 0, win32con.KEYEVENTF_KEYUP, 0)
time.sleep(1)
keybd_event(18, 0, 0, 0) # ctrl
keybd_event(83, 0, 0, 0) # s
keybd_event(83, 0, win32con.KEYEVENTF_KEYUP, 0)
keybd_event(18, 0, win32con.KEYEVENTF_KEYUP, 0)
time.sleep(2)
wx = win32gui.FindWindow('WeChatMainWndForPC', '微信')
win32gui.PostMessage(wx, win32con.WM_CLOSE) # win close
time.sleep(2)
print("微信執行完成!")
TFdict['TF'] = 'T'
TFdict['WeChatTF'] = 'T'
TFdict['WeChatReason'] = '成功。'
# 獲取當前視窗名稱
# wxtitle = win32gui.GetWindowText(win32gui.GetForegroundWindow())
# print(wxtitle)
else:
syshand = win32gui.FindWindow('Search2Wnd', '搜一搜')
win32gui.PostMessage(syshand, win32con.WM_CLOSE) # win close
time.sleep(2)
wxhand = win32gui.FindWindow('WeChatMainWndForPC', '微信')
win32gui.PostMessage(wxhand, win32con.WM_CLOSE) # win close
print("微信執行完成!傳送失敗")
TFdict['TF'] = 'F'
TFdict['WeChatTF'] = 'F'
TFdict['WeChatReason'] = '失敗,微信未找到好友。'
return TFdict
except Exception as e:
CZhand = win32gui.FindWindow('Search2Wnd', '搜一搜')
win32gui.PostMessage(CZhand, win32con.WM_CLOSE, 0, 0) # 隱藏
time.sleep(2)
OpenWeChat(TFdict)
time.sleep(2)
print("微信執行完成!傳送失敗,報錯:", e)
TFdict['TF'] = 'F'
TFdict['WeChatTF'] = 'F'
TFdict['WeChatReason'] = '失敗,微信未找到好友。'
return TFdict
隱藏QQ、微信視窗
# 自動定位QQ聊天視窗
hand = win32gui.FindWindow('TXGuiFoundation', qqtitle)
win32gui.PostMessage(hand, win32con.WM_CLOSE, 0, 0) # win close
# QQ的查詢和QQ視窗
CZhand = win32gui.FindWindow('TXGuiFoundation', '查詢')
win32gui.PostMessage(CZhand, win32con.WM_CLOSE) # win close
qq = win32gui.FindWindow('TXGuiFoundation', 'QQ')
win32gui.PostMessage(qq, win32con.WM_CLOSE) # win close
# 微信的搜一搜和微信視窗
syshand = win32gui.FindWindow('Search2Wnd', '搜一搜')
win32gui.PostMessage(syshand, win32con.WM_CLOSE) # win close
wxhand = win32gui.FindWindow('WeChatMainWndForPC', '微信')
win32gui.PostMessage(wxhand, win32con.WM_CLOSE) # win close
通過 Python 的 win32 ,一步一步操作來實現的功能。