1. 程式人生 > 其它 >Python 之 控制QQ(9.5.8.28186)、微信(3.6.0.18)

Python 之 控制QQ(9.5.8.28186)、微信(3.6.0.18)

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 ,一步一步操作來實現的功能。