小池啓仁 ヒロヒト応援ブログ By はてな

小池啓仁(コイケヒロヒト)の動画など。

小池啓仁 ヒロヒト応援ブログ By はてな

PerlでWindowsAPIをコールする

前回、『Perl で Win32::API プログラミング入門』リンクメモでのお約束(暇な時にソース解析)、とりあえず前半部だけソース解析をしてみました。

#!/usr/bin/perl
use Win32::API;
my $MessageBox = Win32::API->new("user32", "MessageBoxA", "NPPN", "N");
   $MessageBox->Call(0, "Hello, World!\n", "Message", 0);
http://d.hatena.ne.jp/TAKESAKO/20090324/1237879559

コンストラクタ(new)の引数は以下のようです。

  • 第1引数は、DLL(user32.dll)のライブラリの名前を指定します。
  • 第2引数は、WindowsAPIの名前を指定します。
    ちなみに、"MessageBoxA"の最後の"A"ですが、ANSI版の「MessageBoxA」とUnicode版の「MessageBoxW」の2種類が存在します。文字列系のAPIには大体この2種類があります。
  • 第3引数は、WindowsAPIの引数の属性を指定します。
    "N"はvalue is a number (long)で、"P"はvalue is a pointer (to a string, structure, etc...)です。
  • 第4引数は、WindowsAPIの戻り値の属性を指定します。
    "N"は上記と同じで、戻り値が無い時は"V"になるようです。
  • 参考リンク:他の属性に関しては以下のURLを参照のこと。
    http://search.cpan.org/~cosimo/Win32-API/API.pm

Callメソッドの引数は以下のようです。

  • 第1引数は、オーナーウィンドウ(親ウィンドウ)を指定します。
    サンプルでは『0』が指定されていますが、これは、オーナーウィンドウを持たないという意味です。
  • 第2引数は、メッセージボックスに表示するメインの文字列を指定します。
  • 第3引数は、メッセージボックスのフレームに表示されるタイトルを指定します。
  • 第4引数は、メッセージボックスの形態を表す定数を指定します。
    形態を表す定数は沢山ありますが、サンプルでの『0』はMB_OKでデフォルトです。
  • 参考リンク:他の形態を表す定数に関しては以下のURLを参照のこと。
    http://wisdom.sakura.ne.jp/system/winapi/win32/win5.html

ちなみに、Callメソッドは、WindowsAPI(今回はMessageBoxA)に対応してるようです。
つまり、CallメソッドをコールすることでWindowsAPIが実行されます。