ガジェットの作成
2009年11月22日公開
ここで言うガジェット(gadget)とはOSF/Motifで言うところの廉価版ウィジットのことではない。Windows
Vistaから搭載されたとかいう子供だましのオモチャの方である。
せっかくPCを新調して比較的新しめの環境を構築したのだから、目新しいことでもやってみようと言うことでガジェットとやらを作ってみることにした。
ガジェットを無効にする方法
デフォルトではガジェットはいつでも利用できるように設定されているが、無効にすることで不要な負荷を軽減し、エクスペリエンスを向上することが可能となる。
「スタート」メニューで「コントロールパネル」を選択する。

「コントロールパネル」で「プログラムと機能」を選択する。

「プログラムと機能」で「Windows
の機能の有効化または無効化」を選択する。

「Windowsの機能」で「Windows ガジェット
プラットフォーム」のチェックを外す。

最後に「OK」ボタンを押下することで、ガジェットを無効化することができる。
マニフェストファイルの作成
ここからが本題である。
ガジェットを作るには最低限下記のファイルを用意してやる必要があるらしい。
- マニフェストファイル
- アイコン
- ロゴ
- HTMLファイル
マニフェストファイルはXMLファイルであり、必ず"gadget.xml"という名前である必要があるらしい。
とりあえず、MSDNに記載されていた例をそのままコピーして、下記のようなファイルを作成してみた。
<?xml version="1.0" encoding="utf-8" ?>
<gadget>
<name>Test1</name>
<version>1.0.0.0</version>
<author name="nabiki_t">
<info url="http://www.syuhitu.org" />
<logo src="logo.png" />
</author>
<copyright>(C) nabiki_t 2009</copyright>
<description>サイドバー ガジェットのサンプル。</description>
<icons>
<icon height="48" width="48" src="icon.png" />
</icons>
<hosts>
<host name="sidebar">
<base type="HTML" apiVersion="1.0.0" src="sample.html" />
<permissions>Full</permissions>
<platform minPlatformVersion="1.0" />
<defaultImage src="icon.png" />
</host>
</hosts>
</gadget>
|
これを、UTF-8で"gadget.xml"という名前で保存しておく。

なお俺の知る限りでは、Windows 2000以降から標準のメモ帳でもテキストファイルをUTF-8でエンコードして保存できるようになっているはずである。
アイコンの作成
とりあえずよく分からないが、マニフェストファイルに"icon.png"と"logo.png"という名前を書いたことだし、とりあえずこの二つのファイルを作成する必要があるらしい。
MSDNの記述によれば64×64のサイズで作成するのがいいらしいと言うことで、下記の二つのファイルを作っておいた。


PNG形式のファイルは、Windows 7にデフォルトで入っているペイントで作成することができる。

それにしても、ペイントのユーザインタフェースが強烈に劣化しているのはなぜだろうか?
HTMLファイルの作成
ガジェットの本体はデスクトップに表示されたHTMLファイルである。つまり、技術的にはアクティブ
デスクトップと大して違いはないのではないかと思われる。
とりあえず、MSDNにあった例をくすねて下記のようなファイルを作成してみた。
<html>
<head>
<title>Hello World</title>
<style type="text/css">
body {
margin: 0;
width:130px;
height:75px;
font-family:verdana;
font-weight:bold;
font-size:small;
}
#gadgetContent {
margin-top:20px;
width:130px;
vertical-align:middle;
text-align:center;
overflow:hidden;
}
</style>
<script type="text/jscript" language="jscript">
function init()
{
var oBackground =
document.getElementById("imgBackground");
oBackground.src = "url(logo.png)";
}
</script>
</head>
<body onload="init()">
<g:background id="imgBackground">
<span id="gadgetContent">Hello World!</span>
</g:background>
</body>
</html>
|
上記のファイルを"sample.html"という名前で保存する。これは、マニフェストファイルの"base"というタグに記述したファイル名である。
今の時点では正直言ってよく分からないが、とりあえず"g:background"というタグがガジェットを作成する上でポイントとなるらしい。しかし、ここではこれ以上は立ち入らずに、何かを表示してみることを優先して先に進むものとする。
インストール
ここまでの作業で、下記の4つのファイルが作成された。
- gadget.xml
- sample.html
- icon.png
- logo.png
このファイルを一つのフォルダにまとめて格納し、下記のフォルダのどちらか配置する。
- %USER_DATA%\Local\Microsoft\Windows Sidebar\Gadgets
- %SYSTEM_ROOT%\Program Files\Windows Sidebar\Gadgets
なお、格納するフォルダ名は基本的には何でもいいらしいが、とりあえず".gadget"という文字列で終了するようにするべきであるらしい。

とりあえず俺は、"c:\Program Files\Windows Sidebar\Gadgets\Test1.gadget"といフォルダを作成し、その中に上記4つのファイルを格納しておいた。
ここまでで一度、作成したガジェットを表示してみる。
デスクトップで右クリックし、メニューから「ガジェット」を選択する。

ガジェットギャラリーが表示される。

一応、作成したアイコンとロゴが表示されているのが分かる。
上記の「ガジェットギャラリー」で"Test1"をダブルクリックすると、デスクトップに情けないガジェットが表示される。

CPUメーターやノートン先生と一緒に並べてみると、情けなさが一層引き立つ。
パッケージ
作成したガジェットを自分で眺めて満足しているだけなら、ここまでで作業を終わってしまっても問題ない。だが、できれば作ったものは配布できるようにしておきたいものだ。
ガジェットは、関連するファイルをzipで固めて拡張子を".gadget"にすればそれでいいらしい。
とりあえず、zipで圧縮する。

作成されたzipファイルの名前を"Test1.gadget"に変更する。

拡張子を変えようとすれば、当然Windowsが苦情をいってくるが、こんなものは無視する。

拡張子の変え方が分からないやつは百遍死んで出直してくるべし。
拡張子を変更すると、なにやらガジェットっぽいアイコンに変化する。

先ほど作った"c:\Program Files\Windows Sidebar\Gadgets\Test1.gadget"というフォルダを削除するか、あるいは別のところに移動してから、作成したzipファイルをダブルクリックしてみる。

ずいぶんひどい言われようだ。全力で実行するなと警告してきやがる。だが、なにぶんこれは俺が作成したファイルだ。信用するも何もない。当然「インストールする」を押下する。
そうするとデスクトップの右上に、例の情けないガジェットが表示される。
なお、この方法でインストールした場合は、ユーザ別のフォルダに(すなわち"%USER_DATA%\Local\Microsoft\Windows
Sidebar\Gadgets"の方)にインストールされるらしい。一応確認してみる。

正確な場所は分かりにくいが、下記のフォルダである。
- C:\Users\Administrator\AppData\Local\Microsoft\Windows Sidebar\Gadgets
当然、Administratorの部分はユーザごとに変化する。
なお、ここではzipファイルで固める方法を記載したが、要は上記のフォルダに"名前.gadget"というフォルダを作成して、必要なファイルをその中に入れればいいらしいから、必ずしもzipで圧縮しなくてもいいらしい。たとえばMSDNにはWindows
Installerによる.msiファイルでも問題ないと記載されている。
下記にこのページで作成したガジェットを公開しておく。まぁ、何に役にも立たないだろうが。
|