Python には Windows の DLL に直接アクセスできるモジュールがあるようで。
14.14 ctypes — Pythonのための外部関数ライブラリ。
面白そうなので試してみる。
実験だから簡単なのにしたいなぁ。
MessaageBox 関数ならロードする関数は一つなのでコレでいこう。
に書いてあるけど Windows の関数は Ansi 版と UNICODE 版がある。
当然 TCHAR マクロも使えない、これは VC++ がコンパイル時に変換しているから。
MessageBox 関数も例外ではない。
MessageBoxA と MessageBoxW にコンパイル時に振り分けされる。
幸いにも Python3.0 の文字列は UNICODE なので MessageBoxW を使う。
そして MessageBoxW は user32.dll にあります。
ということで。
#! /usr/bin/env python # -*- coding: UTF-8 -*- import ctypes MB_OK = 0 MB_OKCANCEL = 0x00000001 IDOK = 1 dll = ctypes.windll.user32 res = dll.MessageBoxW(0, str(dll), "たいとる", MB_OKCANCEL) if res == IDOK: dll.MessageBoxW(0, "OK を押しました", "りざると", MB_OK) else: dll.MessageBoxW(0, "きゃんせるを押しました", "りざると", MB_OK)
うわぁコレでいけちゃうんだ。
MB_OK とかの定義は WindowsSDK の WinUser.h を見てちょ。
全部 DLL から呼び出せばウインドウもコントロールも作れるね。
でも定数を全部自分で定義せにゃいかんのが面倒そう…