Python で Win32API プログラミング入門

Perl で Win32::API プログラミング入門 を参考にしました。

Python 2.5以降には、ctypes が付属しているので、
今日からすぐに Win32API を利用したプログラミングが出来ます。

# ctypesは、動的リンク/共有ライブラリ内の関数呼び出しを可能にします。
# Linuxなど、Windows以外のOSでも使用することができます。

簡単なメッセージボックスを表示するPythonプログラムは以下になります。

#!C:\Python26\python
# -*- coding: cp932 -*-
import ctypes
ctypes.windll.user32.MessageBoxA(0, 'Hello, World!', 'Message', 0)
# ユニコード版
# ctypes.windll.user32.MessageBoxW(0, u'Hello, World!', u'Message', 0)

このプログラム実行すると、「Hello, World!」と書かれたWindowsメッセージボックスが表示されます。

任意のDLLを扱う場合は、ctypes.windll.LoadLibraryを使用します。

test.dllのソースコード

#include <windows.h>
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
  return 1;
}
__declspec(dllexport) int WINAPI Add(int x, int y)
{
  return x + y;
}

test.dllを扱うPythonスクリプト

#!C:\Python26\python
# -*- coding: cp932 -*-
from ctypes import windll
from ctypes.util import find_library
# dllのパスの取得
path = find_library("test")
# dllの読み込み
dll = windll.LoadLibrary(path)
# dll内の関数の実行
print dll.Add(1, 2) #=> 3

ctypes はとっても便利なモジュールですね。

コメント

  1. 質問です。
    現在Mac使っているんですけど、windllってWindowsだけですよね
    それってどうやってライブラリをMacでsetup出来るんですか?

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください