自分好みのガジェットを作る! Windowsサイドバーガジェット作り入門

第6回 ガジェットのAPI,セキュリティ,ActiveXの組込みなど

この記事を読むのに必要な時間:およそ 4.5 分

メモリリーク

Internet Explorerでは特定のパターンでメモリがリークしてしまうことがあるということが,広く知られています。そしてInternet Explorerで起こることはWindows サイドバーでも起こること。

このメモリリークパターンについてはInternet Explorer リーク パターンを理解して解決するが参考になるので,一度目を通しておくとよいと思います。

JavaScript以外のスクリプト言語を使う

実はということもありませんが,サイドバーガジェットで使える言語はJavaScript(Microsoftの実装をJscriptという)のみということもありません。

アクティブスクリプトと呼ばれる仕組みを使っているので,そのアクティブスクリプト対応エンジンがあれば大体使えます。Windows標準で使えるアクティブスクリプトにはJScript以外にVBScriptがあります。

他にも各種スクリプトエンジンをインストールすればJScriptとVBScript以外の言語を利用できるようになります。 Rubyを使いたいならActiveScriptRubyPerlを使いたいならActivePerlをインストールして,script要素のlanguage属性で言語を指定することで利用できます。例えば以下のような半分Perl,半分Jscriptという組み合わせも動きます。

<script language="PerlScript">
use LWP::Simple;
</script>
<script type="text/javascript">
document.getElementById('output').innerText = get("http://www.google.com");
</script>

これはPerlのLWP::Simpleというモジュールのget関数をJScriptから呼んでいる例です(get関数はLWP::Simpleをuseすると公開される)。ちなみにこのLWP::Simpleのget関数というのはHTTPのリクエストを投げてレスポンス内容を返すという単純な関数です。

このようにアクティブスクリプトでは異なるスクリプト言語を混ぜて使うことができるところがとても面白いです。面白く便利ではあるものの,JScriptとVBScript以外はWindowsに標準で入っていないのでガジェットの導入の敷居が一気に上がってしまうのが難点です。逆にそれらが入っている前提でよいのであればいろいろと面白いことができるかもしれません。

alert的なメッセージボックスを利用したい

前回alert関数はガジェット上では利用できないというお話をちょこっとだけしたのですが,やはり使えないというのでは「~してもよいですか?」という画面を作ったりするのは面倒です。

そこでalertのようなものを何とかして使う方法を考えるわけですが,何か良い方法は無いものでしょうか。

というところで気がついたのですがalertはInternet Explorerが用意しているものですが,VBScriptにはalertそっくりなメッセージボックスを出す関数MsgBoxがVisual Basic由来で「言語仕様」にあります。つまりalert関数と違ってVBScriptを使える限り呼べるのです。

ということはこのMsgBox関数をJScript側から呼び出せればうまくいきそうな気がしてきました。JscriptとVBScript異なる言語が混じっても利用できるというのは前に説明済みのとおりです。

ただし,VBScript組み込みの関数をいきなりJScript側から呼ぶことはできないのでVBScript側で公開用の関数を作成する必要があります。

ということでそのあたりを面倒見て,メッセージボックスを呼び出しやすくするためラッパーライブラリを作成しました。

このライブラリの使い方は簡単でまず以下のように読み込みます。

<script type="text/javascript" src=" messageBoxBridge.js"></script>

そして,メッセージボックスを呼び出したいタイミングで以下のようなコードを書きます。

MessageBox.show("テスト");

これを実行すると図のようなメッセージボックスが表示されます。

画像

このライブラリは.NET Frameworkの System.Windows.FormsネームスペースのMessageBox.Show メソッドをまねています。

このライブラリでのメソッドは一つ目の引数が内容,二つ目がウィンドウタイトル(省略時document.title),三つ目がボタンとアイコンを受け取ります。ですのでalert以外にもconfirmに相当することもできます。

if (MessageBox.show("なになにしてもよいですか?",
                    "Sample Gadget",
                    MessageBoxButtons.OKCancel | MessageBoxButtons.Question) == DialogResult.OK) {
  MessageBox.show("OKが押されました");
} 

このコードは次の図のメッセージボックスを表示し,OKボタンを押すと「OKが押されました」というダイアログが表示されます。

画像

これでalertやconfirmが無くても同等のことを実現できるようになりました。

最後に

ガジェットの作り方の連載は今回で最後になります。ちょっとしたHTMLとJavaScriptの知識で作れるので是非作ってみてはいかがでしょうか?

この連載がお読みいただいた方々の開発時に何らかの形でお役に立てることを願ってやみません。

著者プロフィール

沢渡真雪(さわたりまゆき)

普段はASP.NETやPerlでWebアプリケーションを書くのが主。興味の向きはWindows一般から.NET Framework,Perl(Plaggerとか)やMac OS Xなど。

URLhttp://www.misuzilla.org/