Python と pywinauto で Windows の GUI 操作を自動化する

GUI 操作の自動化は AutoItUWSC などを使うと可能ですが、選択肢として Python + pywinauto もありかもしれません。
Python はウェブ開発やスクリプト、PySide などを利用した GUI 開発にも使えます。そのため Python を使えば GUI の自動化以外にも様々な開発を行うことができるようになります。

インストール

  • Python 2.7.1
    • 公式の Python でも ActivePython でも OK。
      • 先々の面倒を考えると ActivePython が便利かもしれない
    • ctypes が利用できる Python 2.5 以上を使うこと
    • C:\Python27 にパスを通す
    • distribute か pip を入れておくと便利。しかし今回は使わない
  • pywinauto 0.4.0
    • easy_install だと古いバージョンが入ってしまうので注意
    • http://sourceforge.net/projects/pywinauto/files/pywinauto/0.4.0/
    • 上記 URL から pywinauto-0.4.0.zip をダウンロードして解凍
    • 解凍したフォルダを開いて python setup.py install を実行
    • インストール後、「SendKeys モジュールが無い」と言われたりするが、付属の SendKeysCtypes モジュールを使っているみたいなので必要ないと思われる
      • The following module has to be installed before running pywinauto...
      • No module named: SendKeys

メモ帳を開いて現在の日付と時刻を保存する

# coding: utf-8
from datetime import datetime
from pywinauto import application
app = application.Application.start("notepad.exe")

# Notepad クラス (Notepad のウィンドウ) を探して日時を入力
app.Notepad.Edit1.SetText(unicode(datetime.now()))
# メニューを選択
app.Notepad.MenuSelect(u"ファイル->名前を付けて保存")
# 「名前を付けて保存」のウィンドウを探す
dialog = app[u"名前を付けて保存"]
# ファイル名を設定
dialog.Edit1.SetText(u"datetime.txt")
# 保存ボタンをクリック
dialog.Button1.Click()

# すでにファイルが存在すれば上書きの確認が求められる
confirm = app[u"名前を付けて保存の確認"]
if confirm.Exists():  # 確認を求められたかどうか
    confirm.Button1.Click() # 上書きする

# キーストロークを使って終了させる
app.Notepad.TypeKeys("%FX") # 終了 (Alt+F X)

コードを書く際の注意点

さらに詳細な操作は...

pywinauto を使えば Python を使ってより詳細な GUI 操作を自動化できます。ドキュメントにかなり詳しく書かれていますので、以下を参照してください。
http://pywinauto.googlecode.com/hg/pywinauto/docs/contents.html