以前看到網上一些小程序,在處理完事物後會自動發送qq消息,但是一直搞不懂是說明原理。也在網上找過一些python登陸qq發送消息的文字,但是都太複雜了。今天偶然看到一篇文章,是用python調用win32的接口發送qq消息的,覺得不錯,就先記錄下來,日後肯定會用得上這些小工具。
發送qq消息要求已經登陸qq,而且qq的窗口是獨立的,現在新版的qq一般都是將所有的聊天窗口聚合在一起,因此要設置將qq窗口分離,或者將需要發送消息的那個窗口單獨分離出來。
上代碼吧。
# 原理是先將需要發送的文本放到剪貼板中,然後將剪貼板內容發送到qq窗口
# 之後模擬按鍵發送enter鍵發送消息
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):
"""設置剪貼板文本"""
w.OpenClipboard()
w.EmptyClipboard()
w.SetClipboardData(win32con.CF_UNICODETEXT, aString)
w.CloseClipboard()
def send_qq(to_who, msg):
"""發送qq消息
to_who:qq消息接收人
msg:需要發送的消息
"""
# 將消息寫到剪貼板
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)
模擬按鍵
python可以通過win32和windows做各種交互,網上還有一篇文章是批量操作文件的例子,其原理和按鍵精靈差不多。只是好多參數不懂。就好比上面的發送qq消息的例子,本來想改改其中的方法,跳過剪貼板這一步,可是怎麼改都不行,以後再試試。
參考:
http://blog.csdn.net/dahuae/article/details/43969175
http://blog.csdn.net/seele52/article/details/17504925
http://lixxu.iteye.com/blog/417218
http://www.codeweblog.com/%E7%94%A8pywin32%E5%AE%9E%E7%8E%B0windows%E6%A8%A1%E6%8B%9F%E9%BC%A0%E6%A0%87%E5%8F%8A%E9%94%AE%E7%9B%98%E5%8A%A8%E4%BD%9C/