Edited at

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

More than 1 year has passed since last update.

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()