事情是這樣的,我知道淘寶上有賣一種USB介面的大按鈕,估計是給工廠或者醫院之類的場景設計的,樣子長這樣:
然後我就一直挺想搞一個的,不為別的,就是玩,但是想來想去也沒想到這玩意兒對我而言能有啥用途,就暫且擱置了這個想法。直到這幾周來,每次發現辦公室桶裝礦泉水被喝完了之後,都需要微信通知訂水師傅來送水,就萌生了個想法,我何不搞個誇張的大按鈕,每次訂水的時候直接拍一下按鈕然後自動傳送訊息呢?
然後就是可行性研究,需要確認的地方有這些:
1. 如何實現自動傳送微信訊息?
2. 如果第一步可以,那如何通過這個按鈕呼叫我寫好的自動發訊息的指令碼?
關於如何傳送微信訊息這裡,我粗略的查了下,發現微信這個壞東西比QQ還要嚴,壓根不存在QQ機器人這類的框架或工具的,網頁版微信也早就被拋棄了,沒有API可以呼叫(其實也正常,真要出個能模擬使用者的API,黑產不樂瘋了)。那麼咋辦呢?
答案是Python的pyautogui影像自動化庫。
哎呀,雖然以前就聽說過什麼“人生苦短,我用Python”這類的話,但是之前也沒咋認真接觸過,而這不看則已,一看驚人啊,這個Python的影像自動化庫簡直神器,完美契合了我的需求,他可以根據你提供的圖片,自動在螢幕上尋找相似的地方,然後返回座標,得到目標的具體座標了豈不是什麼都能幹了。
第二個問題則更好解決,找一個可以自定義快捷鍵的大按鈕即可。
然後就在網上找pyautogui這個庫的程式碼,依葫蘆畫瓢的寫了一個開啟微信併傳送訊息的指令碼:
# coding=utf8
import pyautogui
import pyperclip
import time
contacter = "訂水"
msg = '送兩桶水,麻煩收到回覆'
#開啟微信
location=pyautogui.locateCenterOnScreen('WeChat.png',confidence=0.9)
if location is not None:
print('開啟微信')
pyautogui.click(location.x,location.y,clicks=1,interval=0,duration=0.2,button='left')
#搜尋訂水
location=pyautogui.locateCenterOnScreen('search.png',confidence=0.7)
if location is not None:
print('搜尋使用者')
pyautogui.click(location.x,location.y,clicks=1,interval=0,duration=0.2,button='left')
pyperclip.copy(contacter)
pyautogui.hotkey('ctrl', 'v')
time.sleep(1)
#開啟聊天視窗,輸入文字
location=pyautogui.locateCenterOnScreen('contacter.png',confidence=0.7)
if location is not None:
print("開啟聊天框")
pyautogui.click(location.x,location.y,clicks=1,interval=0,duration=0.2,button='left')
#time.sleep(1)
#焦點在輸入框,輸入文字
location=pyautogui.locateCenterOnScreen('input.png',confidence=0.7)
if location is not None:
print("輸入文字併傳送")
pyautogui.click(location.x,location.y,clicks=1,interval=0,duration=0.2,button='left')
pyperclip.copy(msg)
pyautogui.hotkey('ctrl', 'v')
pyautogui.press('enter')
print("結束")
關於傳送訊息的那個地方,這個庫就有些力不從心了,因為他能提供的功能是模擬滑鼠和鍵盤的操作,但是打字嘛...特別是用拼音打出漢字,真就得輸入拼音然後加空格,通過輸入法打出來,而這個辦法實際上不是很穩定。
那麼什麼辦法實現漢字的輸入呢?那自然是我們最熟悉的Ctrl+C、Ctrl+V了。
而Python還有個庫(pyperclip)就提供了Windows剪貼簿的功能,可以將字串複製進剪貼簿,然後就可以呼叫這個自動化庫pyautogui裡面的熱鍵方法來觸發Ctrl+V,將複製到的文字貼上到目標位置。
至此,程式碼上的準備工作已經結束,儲存後建立一個快捷方式,設定為Ctrl+數字鍵盤上的減號鍵。
然後將淘寶來的這個大按鈕接到電腦上,設定這個按鈕觸發上述的快捷鍵,到此就大功告成了。
後記:今天是完成之後的第一次使用,使用很穩定,孩子很喜歡,下次還來。