今回は久しぶりにPyAutoGuiを利用したプログラムを作成していきまます。
PyAutoGuiはpython(ぱいそん)のモジュールのひとつで、キーボードやマウス操作を
自動化することができます。
前回はPyAutoGuiを利用してゲームを自動化するプログラム を組んでみました。
今回は他のモジュールを組み合わせて
マウスを作成します。
!?
もう一度書きますね。
マウスを作成します。
もちろんプログラミングで物理的なマウスを生み出すすることは
不可能ですので、ソフトウェア的なマウスを作成していきます。
とんなものか簡単に説明すると、特定のキーボードのキーを押すと
マウスカーソルが動くというものです。
イメージ的にはThinkPad 赤ポッチです。
赤いポチを指でグリグリするとマウスが動くやつ。
キーボードから指をあまり動かさずにマウスカーソルが動かせる
優れものですね。
ということでプログラムを作成していきます。
マウスのための第一歩~pythonのイベント処理
キーを押したら何か処理を行うプログラムを作成する場合
「イベント処理」を記述する必要があります。
pythonにもイベント処理といって
キーボードを押した時に処理をさせるプログラムを
書くことができます。
event.py
1 2 3 4 5 6 7 8 9 |
import tkinter def something(e): print(e.char+"を押した") root = tkinter.Tk() root.bind("<KeyPress>",something) root.mainloop() |
7行目のbindという部分でキーの入力を取得します。そして
何かキーが押されたらsomething関数を呼び出す処理となります。
このプログラムを実行すると、押されたキーがコンソールに
表示されます。
つまりキーが押された時にコンソールに表示する処理をマウスを
動かす処理に変更すればマウスっぽいものが作成できそうですね。
しかし、
問題があります。
このプログラムでキーの入力が受け取れるのは、tkinterで作成した
ウィンドウがアクティブの時だけです。
これではあまり意味がないので、どんな時でもキーの入力を受け取れるように
しなければなりません。
keyboardモジュールは常時キーを監視する
bindではtkinterで作成したwindowがアクティブの場合でしか
キー入力を受け取れませんが、pythonにはkeyboardというモジュールが
存在します。このモジュールはウィンドウにフォーカスがない状況でも
キー入力を受け取り処理を行うことができるようになります。
まずはkeyboardモジュールをインストールします。
1 |
pip install keyboard |
インストールが完了したらサンプルを作成してみます。
test.py
1 2 3 4 5 6 7 8 9 10 |
import keyboard def test(): print("押した!") try: keyboard.add_hotkey("a", test) except: pass keyboard.wait() |
このプログラムを実行する場合は管理者権限で実行する必要があります。
1 |
#sudo python test.py |
このプログラムを実行中にキーボードの「a」キーを押すと「押した」
と表示されます。
もちろん、ウィンドウからフォーカスを外しても「a」キーを押すと
動作することが確認できます。
このkeyboardモジュールとPyAutoGuiを利用してマウスを作成していきます。
PyAutoGuiでマウスを作成する
それではマウスをプログラムしていきます。
実装自体はとてもシンプルです。
内容は次の通りです。
マウスを上に動かす場合;キーとEキーを押す。
マウスを右に動かす場合;キーとFキーを押す。
マウスを下に動かす場合;キーとDキーを押す。
マウスを左に動かす場合;キーとSキーを押す。
マウスを右上に動かす場合;キーとEFキーを押す。
マウスを右下に動かす場合;キーとFDキーを押す。
マウスを左下に動かす場合;キーとDSキーを押す。
マウスを左上に動かす場合;キーとSEキーを押す。
左クリック;キーとJキーを押す。
右クリック;キーとKキーを押す。
実際のプログラムは次のようになります。
pythonMouse.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
import keyboard # using module keyboard import pyautogui speed = 15 #ななめ def upLeftMouse(): global newX, newY p = pyautogui.position() newX = p[0] - speed newY = p[1] - speed pyautogui.moveTo(newX,newY) try: #上下左右 keyboard.add_hotkey(";+e", lambda: pyautogui.moveRel(0,-speed)) keyboard.add_hotkey(";+d", lambda: pyautogui.moveRel(0, speed)) keyboard.add_hotkey(";+s", lambda: pyautogui.moveRel(-speed, 0)) keyboard.add_hotkey(";+f", lambda: pyautogui.moveRel( speed, 0)) #斜め移動 keyboard.add_hotkey(";+e+s", lambda: pyautogui.moveRel(-speed,-speed)) keyboard.add_hotkey(";+e+f", lambda: pyautogui.moveRel(speed,-speed)) keyboard.add_hotkey(";+d+f", lambda: pyautogui.moveRel(speed, speed)) keyboard.add_hotkey(";+d+s", lambda: pyautogui.moveRel(-speed,speed)) #左クリック keyboard.add_hotkey(";+j", lambda: pyautogui.click()) #右クリック keyboard.add_hotkey(";+k", lambda: pyautogui.rightClick()) except: pass keyboard.wait() |
実行方法
1 |
sudo python pythonMouse.py |
各キーのコンビネーションが押されたらlamda式を用いてmoveRel関数を呼び出し、現在のマウスの位置から
少しずらしていく簡単なプログラムです。
これを監視者権限で実行するとマウスをキーボードで操作することが可能になります。
少しカクカクしますがブラウジング等では問題なく利用可能です。
今回はPyAutoGuiとkeyboardモジュールを組み合わせて簡単にマウスを作成しました。
プログラムの行数も短く簡単に作成できるので是非試してみてください。