Python
Windows10

Windows10でpywinautoを使おうとしたらハマった

Windowsの操作を自動化するためのPythonライブラリpywinautoを使おうとしたらハマったのでメモ。

環境

  • Windows10(64bit)
  • Python 3.6.4(32bit)

インストール

pywinautoよりzipをダウンロードします。
展開した後コマンドプロンプトより、

C:\Users\user\Desktop\pywinauto-0.6.4>python setup.py install

でインストールします。
今回はこのような方法でインストールしましたが、pipでも可能です。

ハマったところ

さっそく使えるかどうか試してみましたが、以下のようなメッセージが...

>>> from pywinauto.application import Application
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\user\Desktop\pywinauto-0.6.4\pywinauto\__init__.py", line 44, in <module>
    import win32api  # noqa: E402
ImportError: DLL load failed: %1 は有効な Win32 アプリケーションではありません。

解決策

pywinautoを使うためには、win32apiという別のライブラリが必要なようです。

こちらより自分が使っているバージョンに合うものをダウンロードして、インストールします。
今回は、Release222の"pywin32-222.win32-py3.6.exe"を使用しました。

64bitOSなのになんで32なんだ???ってなりましたが、OSの話ではなくPythonが32bit版か64bit版かの話でした。
Releaseページにも書いてあるようにPythonのバナーを見ることで見分けられるようです。

C:\Users\user\Desktop>python
Python 3.6.4 (v3.6.4:d48eceb, Dec 19 2017, 06:04:45) [MSC v.1900 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>

この時に表示される[MSC v.1900 32 bit (Intel)] on win32の部分です。

動作テスト

notepad.py
from pywinauto.application import Application
from time import sleep

#メモ帳を開く
app = Application().start("notepad.exe")
sleep(1)

#HelloWorld!を入力して閉じる
app.Notepad.Edit1.SetText("HelloWorld!")
app.Notepad.TypeKeys("%{F4}")
sleep(1)

#保存しないで終了
dialog = app[u"メモ帳"]
dialog.Button2.Click()