Python

Pythonでタイトルと部分一致したウィンドウを取得するには?

Pythonでタイトルと部分一致したウィンドウを取得するには?
UWSCの代わりにPythonの「PyAutoGUI」が使えることを知り、過去のコードを書き換えていると、ウィンドウの取得でつまづきました。
ウィンドウタイトルと完全一致なら「win32gui.FindWindow()」で取得できるものの、部分一致では取得できません。
部分一致で取得できる方法をまとめました。

 

使うライブラリは?

外部ライブラリ「PyGetWindow」を使うと、タイトルと部分一致でウィンドウを取得できます。
「PyAutoGUI」と同時にインストールされますが、上手くいかない時は個別にインストールしてみてください。

pip install PyGetWindow

外部ライブラリのインストール方法はこちら

 

コードの書き方は?

「.getWindowsWithTitle()」を使うと、引数に指定した文字列と部分一致するウィンドウをリスト形式で返してくれます。

import pygetwindow as gw
 
# メモ帳のウィンドウを取得する。
print(gw.getWindowsWithTitle('メモ帳'))
# ⇒ [Win32Window(hWnd=〇〇)]

 

取得したウィンドウを操作するには?

「PyGetWindow」には、様々な操作コマンドが用意されています。

import pygetwindow as gw
 
# メモ帳のウィンドウを取得する。
memo_window = gw.getWindowsWithTitle('メモ帳')[0]
 
# アクティブにする
memo_window.activate()
 
# 最大化する
memo_window.maximize()
 
# 最小化する
memo_window.minimize()
 
# 最大化・最小化から戻す
memo_window.restore()
 
# リサイズする(仮にx=300,y=400)
memo_window.resizeTo(300, 400)
 
# 現在位置から引数の数値分移動
memo_window.move(10, 10)
 
# ウィンドウを指定の位置に移動
memo_window.moveTo(10, 20)
 
# 最大サイズ化を判定する
print(memo_window.isMaximized)
 
# 最小サイズ化を判定する
print(memo_window.isMinimized)
 
# ウィンドウサイズを取得する
print(memo_window.size)
# ⇒ Size(width=300, height=400)
 
# ウィンドウの幅を取得する
print(memo_window.width)
# ⇒ 300
 
# ウィンドウの高さを取得する
print(memo_window.height)
# ⇒ 400
 
# ウィンドウの上の位置を取得する
print(memo_window.top)
# ⇒ 20
 
# ウィンドウの下の位置を取得する
print(memo_window.bottom)
# ⇒ 420
 
# ウィンドウの左の位置を取得する
print(memo_window.left)
# ⇒ 10
 
# ウィンドウの右の位置を取得する
print(memo_window.right)
# ⇒ 310
 
# ウィンドウ左上の位置を取得する
print(memo_window.topleft)
# ⇒ Point(x=10, y=20)
 
# ウィンドウの右下の位置を取得する
print(memo_window.bottomright)
# ⇒ Point(x=310, y=420)
 
# ウィンドウを閉じる
memo_window.close()

 

公式ドキュメントへのリンク

詳細はこちらをご覧ください。
https://pypi.org/project/PyGetWindow/

 

OSがMacの場合は?

調べていると、「PyGetWindowでサポートしているのはMS Windowsのみ」と、いう記述を見つけました。
その場合は、外部ライブラリ「PyWinCtl」を使うと操作できるそうです。

 

まとめ

タイトルと部分一致でウィンドウを取得するには、外部ライブラリ「PyGetWindow」か「PyWinCtl」を使います。
これでウィンドウ取得の問題は解決できたので、さらにRPA化がはかどりそうです。

-Python
-, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,