Win32モジュールの MsgBox() を用いて、メッセージボックスを表示することができます。
use Win32; Win32::MsgBox("Hello world!!", 1); $ret = Win32::MsgBox("保存しますか?", 3 | MB_ICONEXCLAMATION, "確認");
第一引数には、ダイアログに表示するメッセージを指定します。第三引数は省略可能で、ダイアログのタイトルバーに表示される文字を指定します。
第二引数には、表示されるボタンの種類とアイコンの種類を指定します。
【ボタンの種類】 指定なし : [OK] 0 : [OK] 1 : [OK] [キャンセル] 2 : [中止] [再試行] [無視] 3 : [はい] [いいえ] [キャンセル] 4 : [はい] [いいえ] 5 : [再試行] [キャンセル] 【アイコンの種類】 指定なし : アイコン無し MB_ICONSTOP : 赤いバツ印 MB_ICONQUESTION : クエスチョンマーク(?) MB_ICONEXCLAMATION : エクスクラメーションマーク(!) MB_ICONINFORMATION : インフォーメーションマーク(i)
MsgBox() の戻り値で、どのボタンが押されたか調べることができます。
0 : エラー 1 : [OK] 2 : [キャンセル] 3 : [中止] 4 : [再試行] 5 : [無視] 6 : [はい] 7 : [いいえ]
Win32モジュールを用いて、Windows のバージョンを調べることができます。
use Win32; ($str, $major, $minor, $build, $id) = Win32::GetOSVersion(); print "str=$str major=$major minor=$minor build=$build id=$id\n"; if (Win32::IsWinNT()) { print "NT系です。\n"; } if (Win32::IsWin95()) { print "95系です。\n"; }
GetOSVersion() は、OS の説明、メジャーバージョン、マイナーバージョン、ビルド番号、ID を返します。ID は、0 が Win3.1(Win32s)系、1 が Win95系、2 が WinNT系を示します。IsWinNT() は NT系のとき、IsWin95() は OS が 95系の時に真となります。Windows XP は Home Edition であっても NT系とみなされます。
Win32モジュールを用いて、マシンが属しているドメイン名、マシンのノード名、ログイン名を調べることができます。
use Win32; $domain = Win32::DomainName(); $node = Win32::NodeName(); $login = Win32::LoginName(); print "domain = $domain\n"; print "node = $node\n"; print "login = $login\n";
DomainName() はドメイン名を、NodeName() はノード名を、LoginName() はログイン名を返します。
Win32::ChangeNotify を用いて、指定したフォルダ内のファイルが更新されたかどうかを監視することができます。
use Win32::ChangeNotify; for (;;) { $path = "C:/HomePage"; $subTreeFlag = 1; $filter = "ATTRIBUTES DIR_NAME FILE_NAME LAST_WRITE SECURITY SIZE"; $notify = Win32::ChangeNotify->new($path, $subTreeFlag, $filter); $notify->wait() || warn("Something failed: $!\n"); print "Changed!!\n"; }
ChangeNotify() の第一引数には監視する対象のフォルダ名を指定します。第二引数には、サブフォルダまで監視する場合は 0 以外を、指定フォルダのみを監視する場合は 0 を指定します。第三引数には監視するイベント名をスペースか | で区切って指定します。
Win32API::Registryモジュールを用いて、Windows のレジストリを読み出すことができます。
use Win32API::Registry 0.21 qw( :ALL ); RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\Perl", 0, KEY_READ, $key) || die "Can't open: ", regLastError(),"\n"; RegQueryValueEx($key, "BinDir", [], $type, $data, [] ) || die "Can't read: ", regLastError(),"\n"; RegCloseKey($key) || die "Can't close: ", regLastError(),"\n"; print "type=[$type] data=[$data]\n";
上記の例では、HKEY_LOCAL_MACHINE\SOFTWARE\Perl の下の BinDir の値を読み出して表示しています。
Win32::Sound モジュールを用いて、音声ファイルを再生することができます。
use Win32::Sound; Win32::Sound::Volume('100%'); # 音量を設定する Win32::Sound::Play("C:/Windows/Media/tada.wav"); Win32::Sound::Stop();
Play() の第二引数には、SND_ASYNC(非同期的に)、SND_LOOP(永遠に)、SND_NODEFAULT(ファイルが見付からないときに音を出さない)、SND_NOSTOP(すでに再生中であればエラー終了する)などを指定することができます。