Shoeisha Technology Media

CodeZine(コードジン)

特集ページ一覧

PerlでWindowsアプリケーションを操作してみよう

PerlモジュールによるOffice文書の作成やiTunesの操作

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加
2007/08/15 14:00

ActiveState社のActivePerlを使うと、Windowsで簡単にPerlの実行環境を構築できます。いくつかのモジュールを使って、Office文書を作成したり、iTunesのプレイリストを操作する方法などを紹介します。

はじめに

 PerlはLinuxで使うものだと思っていませんか? ActiveState社のActivePerlを使えばWindowsでもPerlを使えます。今回はWindowsで使うPerlのTipsをお届けしたいと思います。

対象読者

 WindowsユーザーでPerlに興味のある方。

必要な環境

 ActiveState社のActivePerlを使います。私が使った環境はOSはWindowsXP、ActivePerlのバージョンは5.8.8.820です。ActivePerlは、ActiveState社のWebページから[Get ActivePerl]をクリックしてダウンロードすることができます。

解説内容

使用するPerlモジュール

Microsoft Wordを操作する

 まずはVBScriptで新規Word文書を作成するスクリプトを見てみましょう。このスクリプトは「C」ドライブの直下に「test.doc」という名前のWord文書を作成します。文書には「hellworld」という文章が出力されます。

Set oWord = CreateObject("Word.Application")
oWord.Visible = True
Set Doc = oWord.Documents.Add()
Set Sel = oWord.Selection
Sel.TypeText("helloworld")
Doc.SaveAs("C:\\test.doc")
oWord.Quit()

 では上記のVBScriptの例と同等のPerlスクリプトを次に示します。まったく同じではあまり面白くないのでWin32::Clipboardモジュールを利用してクリップボードからデータを抜き出したいと思います。

 この例では「C」ドライブの直下に「test.doc」という名前で新規Word文書を作成します。このときクリップボードの内容がテキスト形式であればその内容を「test.doc」に出力します。クリップボードが空の場合やテキスト形式でない場合は helloworldと「test.doc」に出力します。

Word文書作成のサンプル
use strict;
use warnings;
use Win32::OLE;
use Win32::Clipboard;

my $clip = Win32::Clipboard();
my $word = Win32::OLE->new('Word.Application');
$word->{'Visible'} = 1; # Wordを表示

my $doc = $word->Documents->Add;
my $sel = $word->Selection;
my $text = $clip->IsText() ? $clip->GetText() : 'helloworld';
$sel->TypeText($text);
$sel->TypeParagraph;
$doc->SaveAs('C:\test.doc');
$word->Quit;

 ほとんど同じです。つまりWin32::OLEモジュールを使うことでVBScriptライクなコーディングをPerlで実現できるのです。

iTunesを操作する

 iTunesもCOMインターフェースを持っているので、Win32::OLEモジュールで簡単に操作できます。

 次の例はメインのプレイリストの先頭から10件のタイトルをコンソールに表示するスクリプトです。

iTunesを操作するスクリプト
use strict;
use warnings;

use Win32::OLE;

my $itunes = Win32::OLE->new('iTunes.Application') or die 'iTunes does not work fine';
my $lib = $itunes->LibraryPlaylist;
my $tracks = $lib->Tracks;
my $cnt = $tracks->Count > 10 ? 10 : $tracks->Count;
for my $i (1..$cnt) {
     print $tracks->Item($i)->Name, "\n";
}
$itunes->Quit;

 iTunesには「iTunes Music Library.xml」という音楽ライブラリを管理するXMLファイルがありますので、それをパースすることでプレイリストの情報を抜き出すこともできますが、COMインターフェース経由でも可能だということが分かりますね。

レジストリを操作する

 レジストリを操作するには、Win32::Registryモジュールを使うと良いでしょう。

 レジストリの操作は自己の責任においてご使用ください。

 次の例では「HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run」にあるキーの名前と値を抽出します。

レジストリを操作する
use strict;
use warnings;

use Win32::Registry;
use Data::Dumper;

my $obj;
my %values;
$HKEY_CURRENT_USER->Open('Software\Microsoft\Windows\CurrentVersion\Run',
 $obj) or die "Can't Open";
$obj->GetValues(\%values);
for my $key (keys %values) {
    print $key . ' - ' . $values{$key}[2], "\n";
}

 Win32::Registryモジュールに次のようなレジストリのルートキーが定義されているので、簡単にアクセスできます。

  • $HKEY_CLASSES_ROOT
  • $HKEY_CURRENT_USER
  • $HKEY_LOCAL_MACHINE
  • $HKEY_USERS
  • $HKEY_PERFORMANCE_DATA
  • $HKEY_CURRENT_CONFIG
  • $HKEY_DYN_DATA

まとめ

 Perlを使ってWindowsアプリケーションを操作すると、例えば「あるアプリケーションのログの集計処理を実施してOffice文書でレポートを作成」といったことをPerlで行うことができます。ここでは追求しませんでしたが、ExcelやPowerPointも同じようにWin32::OLEモジュールを使えばPerlで操作することができます。それぞれのアプリケーションのオブジェクトモデルを理解する必要がありますが、MSDNのサイトにドキュメントがありますので参考にしてみると良いでしょう。

 PerlはLinuxだけのものではなく、Windowsでも十分に活用することができます。この機会にPerlに触れてみてはいかがでしょうか?

補足説明
 ActivePerlにはPPMというPerlモジュールを管理するツールが含まれています。モジュールを取得する際にはこちらを利用すると良いでしょう。
 以下はPPMを使ってXML::RSSをダウンロードした様子です。なおヘルプを表示するには、「ppm help」とタイプします。
実行例
C:\Documents and Settings\shigeta>ppm install XML::RSS
Downloading ActiveState Package Repository packlist...not modified
Downloading XML-RSS-1.12...done
Downloading Test-Manifest-1.17...done
Unpacking XML-RSS-1.12...done
Unpacking Test-Manifest-1.17...done
Generating HTML for XML-RSS-1.12...done
Generating HTML for Test-Manifest-1.17...done
Updating files in site area...done
   4 files installed

参考資料



  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

バックナンバー

連載:Perl Tips
All contents copyright © 2005-2019 Shoeisha Co., Ltd. All rights reserved. ver.1.5