Pythonの入門本を読み終わって何も作ってなかったのでPythonでキーボードの入力アシストしてくれるものを作ってみました。
{
を打ったら自動で}
を打ってくれる感じです。
#pyHooked
バックグラウンドで実行中にキー入力を取得するためにpyHookedを使います
インストール
pyHooked
pip install pyHooked
とりあえずはGithubのexample.pyの通りイベントハンドラを作成します
from pyhooked import Hook, KeyboardEvent, MouseEvent
def handle_events(args):
if isinstance(args, KeyboardEvent):
print(args.key_code)
if args.current_key == 'A' and args.event_type == 'key down' and 'Lcontrol' in args.pressed_key:
print("Ctrl + A was pressed")
elif args.current_key == 'Q' and args.event_type == 'key down' and 'Lcontrol' in args.pressed_key:
hk.stop()
print('Quitting.')
if isinstance(args, MouseEvent):
if args.mouse_x == 300 and args.mouse_y == 400:
print("Mouse is at (300,400")
hk = Hook() # make a new instance of PyHooked
hk.handler = handle_events # add a new shortcut ctrl+a, or triggered on mouseover of (300,400)
hk.hook() # hook into the events, and listen to the presses
#pyautogui
pyautoguiは自動でキーボード入力してくれたりマウスの操作をしてくれます
インストール
pip install pyautogui
キーボード検知と自動入力ができるようになったので
import pyautogui as pgui
from pyhooked import Hook, KeyboardEvent, MouseEvent
def handle_events(args):
if isinstance(args, KeyboardEvent):
if args.key_code == 56 and args.event_type == 'key down' and 'Lshift'in args.pressed_key:
pgui.typewrite([')', 'left'])
elif args.key_code == 219 and args.event_type == 'key down' and 'Lshift'in args.pressed_key:
pgui.typewrite(['}', 'left'])
elif args.key_code == 219 and args.event_type == 'key down' and 'Lshift' not in args.pressed_key:
pgui.typewrite([']', 'left'])
elif args.key_code == 188 and args.event_type == 'key down' and 'Lshift'in args.pressed_key:
pgui.typewrite(['>', 'left'])
elif args.key_code == 190 and args.event_type == 'key down' and 'Lshift'not in args.pressed_key:
pgui.typewrite(['return'])
elif args.current_key == 'Q' and args.event_type == 'key down' and 'Lcontrol' in args.pressed_key:
hk.stop()
print('Quitting.')
hk = Hook()
hk.handler = handle_events
hk.hook()
今回はkey_codeで判定しています
typewrite()
でキーボード入力をすることができます。
typewrite([')'])
で)
とキーボード入力されます、typewrite([')', 'left'])
で)
と入力されたあとカーソルを左に移動してくれます。
これでいい感じに動いてくれると思ったんですがpyautoguiの入力速度が速すぎて自分のキー入力が検知されたあと先に自動入力がされ、8(
こんな感じで入力されてしまいます。
なので
import pyautogui as pgui
from pyhooked import Hook, KeyboardEvent, MouseEvent
from time import sleep
def handle_events(args):
if isinstance(args, KeyboardEvent):
if args.key_code == 56 and args.event_type == 'key down' and 'Lshift'in args.pressed_key:
sleep(0.3)
pgui.typewrite([')', 'left'])
elif args.key_code == 219 and args.event_type == 'key down' and 'Lshift'in args.pressed_key:
sleep(0.3)
pgui.typewrite(['}', 'left'])
elif args.key_code == 219 and args.event_type == 'key down' and 'Lshift' not in args.pressed_key:
sleep(0.3)
pgui.typewrite([']', 'left'])
elif args.key_code == 188 and args.event_type == 'key down' and 'Lshift'in args.pressed_key:
sleep(0.3)
pgui.typewrite(['>', 'left'])
elif args.key_code == 190 and args.event_type == 'key down' and 'Lshift'not in args.pressed_key:
sleep(0.3)
pgui.typewrite(['return'])
elif args.current_key == 'Q' and args.event_type == 'key down' and 'Lcontrol' in args.pressed_key:
hk.stop()
print('Quitting.')
hk = Hook()
hk.handler = handle_events
hk.hook()
sleep()
を噛ませます。
おそらく0.3秒以下だと先に自動入力されしまいます。
昨日ちょろっと書いたキーボード入力アシストしてくれるやつ pic.twitter.com/Mb8wrqiQZG
— ガレバレ (@garebare521) 2018年10月26日
これでこんな感じで動いてくれると思います。
###参考にさせていただいたサイト
Pythonでバックグラウンド実行中にキー入力を取得する(windows)
Pythonでキーボード操作!キーを打たずに自動化できちゃう!?