Windows特有機能

■ Win32のメッセージボックスを呼び出す

◆ メッセージボックスを表示する

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 : [いいえ]

■ Windowsのバージョンを調べる

◆ Windowsのバージョン

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)

◆ ファイルの更新監視

Win32::ChangeNotify を用いて、指定したフォルダ内のファイルが更新されたかどうかを監視することができます。

notify
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 を指定します。第三引数には監視するイベント名をスペースか | で区切って指定します。

■ Windowsのレジストリを読み出す(Win32API::Registry)

◆ レジストリ読み出し

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 の値を読み出して表示しています。

■ Perlで音を鳴らす(Win32::Sound)

◆ 音を鳴らす

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(すでに再生中であればエラー終了する)などを指定することができます。


Copyright (C) 2002 杜甫々