做技术网站赚钱,市场营销培训课程,搜索引擎优化网站的网址,wordpress主菜单导航插件autohotkey当然是不错的工具#xff0c;但是这个东西的社群一直发展的不行。从开始学习python以后#xff0c;我就不时会希望能找到别的工具替代ahk。Python的众多包里面确实是有对应的工具的#xff1a;模拟鼠标和键盘的操作可以用pyautogui#xff0c;而捕捉热键则可以使…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(rC:UsersAdministratorPicturesplay_button.jpg,confidence0.7)click_pos_x button_play_location.leftint(button_play_location.width/2)click_pos_y button_play_location.topint(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 cvtensorflow这些包在Mac os中的安装locateOnscreen返回的是一个box对象包括x坐标y坐标宽度和高度用这些就可以算出中心点然后让鼠标去点击那个中心点就好了pyautogui的文档可以参考这里https://pyautogui.readthedocs.io/en/latest/添加快捷键到这里我们还没有个上面的功能添加快捷键。这个功能需要依靠pynput这个包来实现。pynput这个包最近几年没有更新了这是比较可惜的事情文档在这里具体到添加快捷键这一部分pynput有一个叫做GlobalHotKeys的类可以帮你快速添加快捷键比如像下面的代码就可以把ctrlp绑定给刚才定义的函数click_play_for_aegisfrom pynput import keyboard
def on_activate_p():click_play_for_aegis()with keyboard.GlobalHotKeys({ctrlp:on_activate_p}) as h:h.join()接下来只需要运行这个python代码然后ctrlp[1]这个快捷键就可以实现点击特定按钮的功能了。如果你想知道某一个按键的名称是什么那可以参考文档里面的代码 # hotkey name probe0-------------------
def on_activate_p():print(windowsp 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_presson_press,on_releaseon_release) as listener:listener.join()这样当你按下一个按键的时候在python的输出里就会写出对应的名称了。参考^顺带一提好像aegisub里面ctrlp是播放视频的快捷键所以刚开始用这个代码的时候播放行为有些奇怪把ctrlp这个快捷键从aegisub软件中去除以后就可以正常使用了