「Windowsの操作を自動化したい」
「プログラムでイベントログを監視したい」
「ExcelマクロをPythonから実行したい」
このような場合には、 Win32 APIを利用します。
pywin32を使えば、PythonからWin32 APIへアクセス可能です。
本記事の内容
- pywin32とは?
- pywin32のシステム要件
- pywin32のインストール
- pywin32の動作確認
それでは、上記に沿って解説していきます。
pywin32とは?
pywin32は、PythonからWin32 APIへアクセスするためのライブラリです。
pywin32を利用すれば、無理だと思っていたような処理ができるかもしれません。
例えば、Pythonからエクセルを利用するケースです。
openpyxlは、PythonからExcelを操作するライブラリになります。
使いやすくて、Excel処理の自動化にはもってこいです。
しかし、openpyxlではマクロが実行できません。
それに対して、pywin32を使えば、マクロを実行できます。
別のケースでは、イベントログの監視です。
以前にいた会社では、定期的にイベントログを目視していたことがあります。
私を含めて、誰もイベントログをプログラムで取得できるなんて知らなかったのです。
もしかしたら、いまだにそのような運用をしている会社があるかもしれません。
上記のような感じで、Windowsに深い部分(表面的ではない)でアクセスが可能です。
よって、pywin32はできることの幅を広げます。
以上、pywin32についての説明でした。
次は、pywin32のシステム要件を確認します。
pywin32のシステム要件
現時点(2021年4月)でのpywin32の最新バージョンは、300となります。
この最新バージョンは、2020年11月14日にリリースされています。
サポートOSに関しては、言うまでもなくWindowsだけです。
そして、サポート対象となるPythonのバージョンは以下。
- Python 3.5
- Python 3.6
- Python 3.7
- Python 3.8
- Python 3.9
Windowsで古くないPythonを使っていれば、OKということです。
以上、pywin32のシステム要件の説明でした。
次は、pywin32をインストールしていきましょう。
pywin32のインストール
最初に、現状のインストール済みパッケージを確認しておきます。
>pip list Package Version ---------- ------- pip 21.0.1 setuptools 54.2.0
次にするべきことは、pip自体の更新です。
pipコマンドを使う場合、常に以下のコマンドを実行しておきましょう。
python -m pip install --upgrade pip
では、pywin32のインストールです。
pywin32のインストールは、以下のコマンドとなります。
pip install pywin32
インストールには、すぐに終わります。
では、どんなパッケージがインストールされたのかを確認しましょう。
>pip list Package Version ---------- ------- pip 21.0.1 pywin32 300 setuptools 54.2.0
最新版のpywin32が、インストールされています。
依存するパッケージは、ないようです。
以上、pywin32のインストールの説明でした。
次は、pywin32の動作確認を行います。
pywin32の動作確認
まずは、メモ帳を起動してみましょう。
import win32com.client
wshShell = win32com.client.Dispatch("WScript.Shell")
wshShell.Run("notepad.exe")
上記を実行すると、メモ帳が起動します。

次は、イベントログを取得してみましょう。
以下の画面は、Windowsログ「Application」の一覧です。
すでに述べましたが、ここを当日分だけ実際に見て確認していました。

ログの詳細は、以下。

同じログを取得して表示するプログラムは、以下。
import win32evtlog
h = win32evtlog.OpenEventLog(None, "Application")
flags = win32evtlog.EVENTLOG_BACKWARDS_READ | win32evtlog.EVENTLOG_SEQUENTIAL_READ
records = win32evtlog.ReadEventLog(h, flags, 0)
if len(records) > 0:
record = records[3]
print(str(record.RecordNumber))
print(record.TimeGenerated.Format())
print(record.TimeWritten.Format())
print(str(record.EventID))
print(str(record.EventType))
print(str(record.EventCategory))
print(record.SourceName)
print(record.ComputerName)
print(record.StringInserts)
print(record.Sid)
上記の実行結果は、以下。
14153
Sun Apr 18 12:18:16 2021
Sun Apr 18 12:18:16 2021
15
4
0
SecurityCenter
DESKTOP-******
('Windows Defender', 'SECURITY_PRODUCT_STATE_ON')
None
ちなみに、EventTypetとレベルの関係は以下。
| EventType | レベル |
| 0 | 成功 |
| 1 | エラー |
| 2 | 警告 |
| 4 | 情報 |
以上、pywin32の動作確認の説明でした。

