「hmPy・IronPython」から「ネイティブdll」のWin32 APIを利用する。
-
概要
「一般的なアプリケーション作成」ならいざ知らず、「組み込みマクロ」としての利用用途において、
巨大ライブラリ「.NET Framework」を利用できる「hmPy/IronPython」で、
わざわざ「Win32 API」を利用したい機会は、そう多くはないと思います。
しかし、その口が用意されていないわけではありません。
比較的簡単なWin32 APIであれば、以下のclrtype.pyを利用することでも対処は可能でしょう。
しかし、複雑な構造体を持つWin32 APIを利用したい場合は、C#でラップDLL作成を作成することを検討した方がよいでしょう。
clrtype.py
clrtype.pyとは、IronPythonにおいて、Win32 APIを利用するために、
Microsoftが作成した、簡易なIronPython用モジュールです。
1つのファイルだけで構成されています。
-
ダウンロード
-
-
インストール
秀丸のディレクトリ(hidemaru.exe)と同じ場所にコピー。
(※これは原本であって直接よまれる対象ではありません。)
(hmPy.dllやIronPython.dllも同じ場所にあるものとして解説します。)
使い方
C#でWin32 APIを利用していた方であれば、理解できる記述方法だと思われます。
生のIronPythonでは以下のように記述します。
import clr
import clrtype
import System
from System.Reflection import BindingFlags
class Win32(object):
__metaclass__ = clrtype.ClrClass
from System.Runtime.InteropServices import DllImportAttribute
DllImport = clrtype.attribute(DllImportAttribute)
@staticmethod
@DllImport("user32.dll")
@clrtype.accepts(System.IntPtr, System.String, System.String, System.UInt32)
@clrtype.returns(System.Int32)
def MessageBox(hwnd, text, caption, type): raise RuntimeError("Runtime Error")
Win32.MessageBox(System.IntPtr.Zero, "Hello, Win32 API(IronPython) World!", "Hello, World!", 0)
この.macファイルと同じフォルダにclrtype.pyをコピーしてください(これが実際に読み込まれる対象です)
秀丸マクロ内のhmPyで記述すると、以下のようになります。
#PY = loaddll( hidemarudir + @"\hmPy.dll" );
#_ = dllfuncw(#PY, "DoString", R"IRONPYTHON(
import clr
import clrtype
import System
from System.Reflection import BindingFlags
class Win32(object):
__metaclass__ = clrtype.ClrClass
from System.Runtime.InteropServices import DllImportAttribute
DllImport = clrtype.attribute(DllImportAttribute)
@staticmethod
@DllImport('user32.dll')
@clrtype.accepts(System.IntPtr, System.String, System.String, System.UInt32)
@clrtype.returns(System.Int32)
def MessageBox(hwnd, text, caption, type): raise RuntimeError('Runtime Error')
Win32.MessageBox(System.IntPtr.Zero, 'Hello, Win32 API(IronPython) 秀丸 World!', 'Hello, 秀丸 World!', 0)
)IRONPYTHON"
);
freedll(#PY);
ライセンス
「clrtype.py」は、スクリプトファイル自体にライセンスが記載されており、Apache License 2.0です。
|