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 から呼び出せばウインドウもコントロールも作れるね。
でも定数を全部自分で定義せにゃいかんのが面倒そう…
