
autohotkey當然是不錯的工具,但是這個東西的社群一直發展的不行。從開始學習python以后,我就不時會希望能找到別的工具替代ahk。Python的眾多包里面確實是有對應的工具的:模擬鼠標和鍵盤的操作可以用pyautogui
,而捕捉熱鍵則可以使用pynput
模擬鼠標點擊
這一次的實例是利用python給aegisub這個軟件做一個播放
的快捷鍵。在這個軟件里面,如果你開始輸入字幕以后,想要重新播放選定時間段的音頻只能通過鼠標操作,這實在是非常累人的事情。這里通過pyautogui的 locateOnScreen
來利用按鈕截圖找到按鈕。
import pyautogui
def click_play_for_aegis():ori_pos = pyautogui.position()button_play_location = pyautogui.locateOnScreen(r'C:UsersAdministratorPicturesplay_button.jpg',confidence=0.7)click_pos_x = button_play_location.left+int(button_play_location.width/2)click_pos_y = button_play_location.top+int(button_play_location.height/2)pyautogui.click(click_pos_x,click_pos_y)pyautogui.moveTo(ori_pos.x,ori_pos.y)
需要注意的是:
- 我的aegisub軟件是放在主顯示器上面的,如果放在副顯示器上有時會出錯
locateOnScreen
是識別按鈕位置的主要語句。添加了confidence這個可選參數以后可以讓pyautogui作模糊的搜索,但是,如果要用這個參數首先要安裝opencv。關于如何安裝opencv的python binding,可以參考我之前的這個文章(mac os與否影響不大):路人乙小明:open cv,tensorflow這些包在Mac os中的安裝- locateOnscreen返回的是一個box對象,包括x坐標,y坐標,寬度和高度,用這些就可以算出中心點,然后讓鼠標去點擊那個中心點就好了
pyautogui的文檔可以參考這里https://pyautogui.readthedocs.io/en/latest/
添加快捷鍵
到這里我們還沒有個上面的功能添加快捷鍵。這個功能需要依靠pynput這個包來實現。(pynput這個包最近幾年沒有更新了,這是比較可惜的事情),文檔在這里
具體到添加快捷鍵這一部分,pynput有一個叫做GlobalHotKeys
的類可以幫你快速添加快捷鍵,比如像下面的代碼就可以把ctrl+p
綁定給剛才定義的函數click_play_for_aegis
from pynput import keyboard
def on_activate_p():click_play_for_aegis()with keyboard.GlobalHotKeys({'<ctrl>+p':on_activate_p}) as h:h.join()
接下來只需要運行這個python代碼,然后ctrl+p[1]這個快捷鍵就可以實現點擊特定按鈕的功能了。
如果你想知道某一個按鍵的名稱是什么,那可以參考文檔里面的代碼:
# hotkey name probe0-------------------
def on_activate_p():print('windows+p pressed')click_play_for_aegis()with keyboard.GlobalHotKeys({'<win>+'
})def on_press(key):try:print('alphanumeric key {0} pressed'.format(key.char))except AttributeError:print('special key {0} pressed'.format(key))def on_release(key):print('{0} released'.format(key))if key == keyboard.Key.esc:# Stop listenerreturn False# Collect events until released
with keyboard.Listener(on_press=on_press,on_release=on_release) as listener:listener.join()
這樣當你按下一個按鍵的時候,在python的輸出里就會寫出對應的名稱了。
參考
- ^順帶一提,好像aegisub里面ctrl+p是播放視頻的快捷鍵,所以剛開始用這個代碼的時候播放行為有些奇怪,把ctrl+p這個快捷鍵從aegisub軟件中去除以后就可以正常使用了