
はじめに
本記事では、Windowsアプリケーションを自動操作するためのPythonライブラリ「pywinauto」を使って、クリック操作を行う方法を分かりやすく紹介します。
pywinautoは、GUI(Graphical User Interface)の制御をプログラムで行える強力なツールです。
例えば、繰り返し操作やテストなど、人間が手作業で行うと時間がかかる作業を自動化することができます。
pywinauto クリック操作
pywinautoのクリック操作について理解を深めるために、以下の順番で説明します。
- 2種類のクリック操作の特徴や違い
- メッセージ方式のクリック操作について
- マウス入力式のクリック操作について
pywinautoのクリック操作は以下の通り2種類あります。
方式 | 概要・特徴 |
---|---|
メッセージ方式 |
|
マウス入力方式 |
|
クリック操作(メッセージ方式)
それでは、クリック操作(メッセージ方式)の使い方を説明していきます。
メッセージ方式のクリック操作では、以下の3つのメソッドを使用することが出来ます。
- click()
- double_click()
- right_click()

それぞれのメソッドの簡単な説明、基本操作、指定できる引数を説明していきます。
click():最も基本的なクリック操作
click()
は、メッセージ方式でGUIにクリックイベントを送信するメソッドです。
このメソッドを使うと、マウスを実際に動かすことなく、内部的にクリックイベントだけを発行してくれます。
from pywinauto import Application
app = Application(backend="win32").start("calc.exe")
calc_window = app["電卓"] # Windowsの電卓アプリを例とする
# 例えば「1」ボタンをclick()で押す
button_one = calc_window["1"]
button_one.click()
引数 | デフォルト | 説明 |
---|---|---|
button |
'left' |
クリックするマウスボタンを指定(’left’ / ‘right’ / ‘middle’ など) |
coords |
(None, None) |
ターゲット要素の左上を基準にした相対座標を指定(例:(10, 5) ) |
pressed |
'' |
シフトキーやコントロールキーなど、同時に押す修飾キーを文字列で指定(例:'shift' ) |
double |
False |
Trueにするとダブルクリックと同等の挙動 |
wheel_dist |
0 |
スクロール量を指定。通常のクリックのみでは使わないが、マウスホイール関連操作に用いる |
use_log |
True |
pywinautoのログに出力するかどうか |
pressed_duration |
0.0 |
クリックの押下を持続させる時間(秒) |
double_click():ダブルクリックのイベントを送信
名前の通り、double_click()
はダブルクリックを行いたい時に利用します。
ファイルを開く操作や、特定のアイテムを素早く選択する動作を再現したい場合などに活用できます。
# 「電卓」アプリにダブルクリックの例は少ないですが、
# 仮にリストアイテムがあるUIを想定すると、次のように書けます。
list_item = calc_window["アイテム名"]
list_item.double_click()
引数 | デフォルト | 説明 |
---|---|---|
coords |
(None, None) |
ターゲット要素の左上を基準にした相対座標 |
pressed |
'' |
同時に押す修飾キー(例:'ctrl' ) |
use_log |
True |
ログに出力するかどうか |
pressed_duration |
0.0 |
ボタン押下を持続させる時間(秒) |
right_click():右クリックメニューを開く操作
right_click()
は、右クリックを行いたい時に利用するメソッドです。
コンテキストメニュー(右クリックメニュー)の自動操作が可能になります。
# 右クリックを例示
right_click_target = calc_window["2"]
right_click_target.right_click()
# 右クリックメニューが出たら、続けてサブメニューをクリックするなどの流れ
引数 | デフォルト | 説明 |
---|---|---|
coords |
(None, None) |
ターゲット要素の左上を基準にした相対座標 |
pressed |
'' |
同時に押す修飾キー(例:'shift' ) |
use_log |
True |
ログに出力するかどうか |
pressed_duration |
0.0 |
ボタン押下を持続させる時間(秒) |
クリック操作(マウス入力式)
それでは、クリック操作(メッセージ方式)の使い方を説明していきます。
メッセージ方式のクリック操作では、以下の3つのメソッドを使用することが出来ます。
- click_input()
- double_click_input()
- right_click_input()
click_input():実際のマウスクリック動作に近い基本操作
click_input()
は、実際のマウスイベントをシミュレートするメソッドです。
そのため、ターゲットウィンドウやコントロールが表示されている必要があり、時にはウィンドウが前面にあることが望まれます。
一方で、メッセージ方式では動作しないUIでもクリックが認識されるケースが多く、より確実に操作したい場合には有力な手段になります。
from pywinauto import Application
# Windowsの電卓を例に起動
app = Application(backend="win32").start("calc.exe")
# メインウィンドウ(電卓)を取得
calc_window = app["電卓"]
# 「1」ボタンを取得してマウスイベント方式でクリック
button_one = calc_window["1"]
button_one.click_input()
引数 | デフォルト | 説明 |
---|---|---|
coords |
(None, None) |
ターゲット要素の左上を基準とした相対座標。 特定の座標をクリックしたい場合に指定する。 |
button |
'left' |
クリックするマウスボタンを指定。 例: 'left' , 'right' , 'middle' など |
pressed |
'' |
同時に押す修飾キーを指定。 例: 'shift' , 'ctrl' など |
double |
False |
Trueにするとダブルクリックと同等の挙動。 |
absolute |
False |
座標をディスプレイ全体の絶対座標とするかどうか。 |
use_log |
True |
pywinautoの動作ログに出力するかどうか。 |
pressed_duration |
0.0 |
クリックを押下し続ける時間(秒)。 |
double_click_input():マウスのダブルクリック動作をエミュレート
名前の通り、double_click_input()
はダブルクリックを行うためのメソッドです。
アイコンを開く操作や、フォルダをダブルクリックで開く動作を自動化したい時に役立ちます。
先ほどのclick_input()
の引数にdouble=True
を指定する方法もありますが、可読性を高めるために敢えてdouble_click_input()
を使うケースもあります。
# 仮にリストアイテムがあるUIを想定
list_item = calc_window["アイテム名"]
list_item.double_click_input()
引数 | デフォルト | 説明 |
---|---|---|
coords |
(None, None) |
ターゲット要素の左上からの相対座標 |
button |
'left' |
クリックするボタンの種類。通常は左クリックを想定 |
pressed |
'' |
同時に押す修飾キー |
absolute |
False |
座標を画面全体で扱うかどうか |
use_log |
True |
ログ出力の有無 |
pressed_duration |
0.0 |
クリックを押下し続ける時間(秒) |
right_click_input():右クリックメニューを表示・操作
right_click_input()
は、右クリックを行うマウスイベントを発行します。
通常の右クリックと同じ動作をするため、コンテキストメニュー(右クリックメニュー)を開き、表示されたメニュー項目をさらに操作する流れの自動化に便利です。
# 電卓の「2」ボタンを右クリックする例
right_click_target = calc_window["2"]
right_click_target.right_click_input()
# 右クリックメニューが出たら、続けてメニューアイテムを検索しクリック
# (アプリによってはさらにウィンドウ取得や識別が必要)
引数 | デフォルト | 説明 |
---|---|---|
coords |
(None, None) |
ターゲット要素の左上からの相対座標 |
pressed |
'' |
同時に押す修飾キー |
absolute |
False |
座標を画面全体で扱うかどうか |
use_log |
True |
ログ出力の有無 |
pressed_duration |
0.0 |
クリックを押下し続ける時間(秒) |
公式ドキュメント
関連記事

コメント