SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Perl Tips

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

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

  • X ポスト
  • このエントリーをはてなブックマークに追加

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

  • X ポスト
  • このエントリーをはてなブックマークに追加

はじめに

 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

参考資料

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Perl Tips連載記事一覧

もっと読む

この記事の著者

重田 崇嗣(シゲタ タカツグ)

1974年神奈川県生まれ。2006年からシックス・アパート株式会社に勤務。ブログ・サービスTypePadの開発を担当。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/1567 2007/08/15 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング