キーコードとマウス座標を取得する 【Python】

Python

Python でマウス座標とキーコードを取得するサンプルスクリプトです。

以下の環境で動作確認をしています。
環境: Windows10, Anaconda, Python 3.X
※ tkinter, pyautogui をインストール済み

背景

Python は、機械学習などで知られているように自動化などの分野でとても便利です。
自動処理のプログラムをいくつか作っていると、マウス操作やキーボード操作についても自動化をしたくなってきます。この場合、キーボードのキーコードやマウス座標を取得する必要が生じます。
もともとは自分で使うためですが表示用のプログラムを作っていますので、サンプルコードを公開します。

使い方

① PC でフォルダを作ってください。
② ①のフォルダ内に mouse_keycode.py 等の名前でテキストファイルを作成し、末尾のサンプルコードをコピー&ペーストで貼りつけて保存してください。
③ ②の Python のスクリプトを実行してください。
実行中にキーボードやマウスを操作すると、キーコードとマウス座標を取得して、表示します。

サンプルコードの説明

・ GUI の表示用に tkinter、マウス座標の取得に pyautogui、キーボードのキーコード取得に ctypes を使いますので、それぞれインポートします。不要なものがあれば、動作確認後、削除等してください。
・ get_keycode1() 関数で、キーコードを取得しています。
たとえば、マウスを左クリックするとキーコードは1となり、右クリックすると2となります。
他に A, B, C, … 等のキーボードのキーを押し下げると 65, 66, 67, … 等の数値が取得できます。
・ show1() 関数で、pyautogui からマウス座標を取得します。そして、上記のキーコードを含め、表示しています。
・ root 以下は、tkinter で GUI のサイズやタイトルを設定して、show1() を実行しています。show1 で、更新時間を 500 ms 毎とし、自分自身を呼び出すことで、表示の更新を繰り返しています。必要に応じて更新時間を調整してみてください。
・ 最後の root.mainloop() で tkinter の GUI の表示をループさせています。これにより、ユーザーインターフェースの画面を表示しつつ、500 ms 毎にキーコードとマウス座標を読み込んで表示する動きになります。

まとめ

マウス座標とキーボードのキーコード取得の方法についてまとめました。
Google 検索をすると、断片的な記載はあるのですが、使える程度に簡潔にまとまったものがなかなか見つかりませんでしたので、ポイントを整理しました。

サンプルでは、キーコードとマウス座標の取得についてまとめましたが、取得したキーコード、マウスの座標、キーイベントを送ることで、任意の自動化プログラムを作成できると思います。
他にも、画像を自動で保存するプログラムなどもまとめています。もし関心があるようでしたら、関連リンクなども参考にしてみてください。

関連リンク
・ 指定したエリアの画像を保存するソフトウェア 【tkinter】
・ ウェブ検索と結果取得を自動化する【Python & selenium】
・ 円、矩形、直線を描画&ドラッグできるようにする【tkinter】

サンプルコード:マウス座標とキーコードの取得

import tkinter as tk1 
import pyautogui as pa1 
import ctypes as ct1 

def get_keycode1(): 
    key0 = -1 
    for key1 in range(1,241):   # keycode 
        if key1 == 25: 
            continue 
        n1 = int( ct1.windll.user32.GetAsyncKeyState(key1)&0x8000 ) 
        if n1 > 0: 
            key0 = key1 
            break 
    return key0 

def show1(): 
    x1, y1 = pa1.position() 
    k1 = get_keycode1() 
    str1 = "x: " + str(x1) + "  y: " + str(y1) + "\n" + "keycode: " + str( k1 ) 
    label1['text'] = str1 
    root.after(500, show1)    

root = tk1.Tk() 
root.geometry( "400x100" ) 
root.title( "mouse_coordinates and keycode" ) 
label1 = tk1.Label( root ) 
label1.place( x=10, y=10 ) 
label1.update() 

show1() 

root.mainloop() 
タイトルとURLをコピーしました