以前看到網(wǎng)上一些小程序,在處理完事物后會自動發(fā)送qq消息,但是一直搞不懂是說明原理。也在網(wǎng)上找過一些python登陸qq發(fā)送消息的文字,但是都太復(fù)雜了。今天偶然看到一篇文章,是用python調(diào)用win32的接口發(fā)送qq消息的,覺得不錯,就先記錄下來,日后肯定會用得上這些小工具。
發(fā)送qq消息要求已經(jīng)登陸qq,而且qq的窗口是獨立的,現(xiàn)在新版的qq一般都是將所有的聊天窗口聚合在一起,因此要設(shè)置將qq窗口分離,或者將需要發(fā)送消息的那個窗口單獨分離出來。
上代碼吧
# 原理是先將需要發(fā)送的文本放到剪貼板中,然后將剪貼板內(nèi)容發(fā)送到qq窗口
# 之后模擬按鍵發(fā)送enter鍵發(fā)送消息
import win32gui
import win32con
import win32clipboard as w
def getText():
"""獲取剪貼板文本"""
w.OpenClipboard()
d = w.GetClipboardData(win32con.CF_UNICODETEXT)
w.CloseClipboard()
return d
def setText(aString):
"""設(shè)置剪貼板文本"""
w.OpenClipboard()
w.EmptyClipboard()
w.SetClipboardData(win32con.CF_UNICODETEXT, aString)
w.CloseClipboard()
def send_qq(to_who, msg):
"""發(fā)送qq消息
to_who:qq消息接收人
msg:需要發(fā)送的消息
"""
# 將消息寫到剪貼板
setText(msg)
# 獲取qq窗口句柄
qq = win32gui.FindWindow(None, to_who)
# 投遞剪貼板消息到QQ窗體
win32gui.SendMessage(qq, 258, 22, 2080193)
win32gui.SendMessage(qq, 770, 0, 0)
# 模擬按下回車鍵
win32gui.SendMessage(qq, win32con.WM_KEYDOWN, win32con.VK_RETURN, 0)
win32gui.SendMessage(qq, win32con.WM_KEYUP, win32con.VK_RETURN, 0)
# 測試
to_who='xxx'
msg='這是測試消息'
send_qq(to_who, msg)
特別說明:to_who中填寫的是聊天窗口的名字,而非QQ號碼。(也就是是網(wǎng)名或備注名,具體的也可以在任務(wù)管理器中查看)
模擬按鍵
python可以通過win32和windows做各種交互,網(wǎng)上還有一篇文章是批量操作文件的例子,其原理和按鍵精靈差不多。只是好多參數(shù)不懂。就好比上面的發(fā)送qq消息的例子,本來想改改其中的方法,跳過剪貼板這一步,可是怎么改都不行,以后再試試