2006 年 10 月 17 日 23 時 57 分

フォルダリンクを利用する


このアーカイブは同期化されません。 mixi の日記が更新されても、このアーカイブには反映されません。


[写真] [写真]


今まで紹介したフォルダの特殊化を利用すると、
色々な場所の特殊フォルダやネットワークプレースを
シェルのフォルダツリーの好きな場所に集めることができる。

例えば、デスクトップやマイドキュメントなどに、
特殊化したフォルダを作成しておけば、
通常のショートカットと同じように使うことができる上に、
エクスプローラでツリー表示した際に、
そのままフォルダを展開できるというメリットがある。

では、幾つか作ってみよう。

まず、コントロールパネルやプリンタなど、
実体がファイルではない完全に仮想的なフォルダは、
COM クラスとして実装されている。
通常のファイルフォルダに読み取り属性を設定した上で、
desktop.ini にその CLSID を指定することで作成できる。

例えば、マイドキュメントの中に、
特殊フォルダ「プリンタ」を表示してみよう。
まず、マイドキュメント内に、
「プリンタ」という通常のフォルダを作成する。
これは好きな名前でも構わない。

そして、フォルダに読み取り専用属性を追加して、
フォルダ内に、「desktop.ini」を作成する。

Windows Me 以前では、desktop.ini を新規作成し、
フォルダのプロパティで読み取り専用属性を追加する。

Windows XP や 2003 では、UI が変更され、
フォルダのプロパティではフォルダ自身に、
読み取り専用属性を設定できないのだが、
フォルダのプロパティの「カスタマイズ」を選び
何か適当に「アイコンの変更」をして OK すれば、
読み取り専用と desktop.ini の追加まで行ってくれる。

そして、desktop.ini をメモ帳で開き、
以下のように内容を変更して保存する。

========== desktop.ini ==========

[.ShellClassInfo]
CLSID={2227A280-3AEA-1069-A2DE-08002B30309D}

========== end of desktop.ini ==========

{2227A280-3AEA-1069-A2DE-08002B30309D} は、
仮想フォルダであるプリンタの CLSID である。

属性によって、特殊化が有効になっているので、
desktop.ini を編集すると直ちに反映される。
一度上のフォルダに移動すると、今作成したフォルダが、
プリンタのアイコンに化けているはずだ。

そして、改めてアイコンを開いてみると、
見慣れたプリンタのアイコンが並んでおり、
完全にコントロールパネルのプリンタと同じように機能する。
先ほどあった desktop.ini はもはや見当たらない。

COM オブジェクトの CLSID さえ知っていれば、
それを示すフォルダを作ることができるということだ。

次に、マイネットワークのネットワークプレースのように、
別のフォルダを指す特殊なフォルダを作成してみよう。

実は、マイネットワークにある、
ネットワークプレースのアイコンは、
そのまま他の場所にコピーすることができる。
ドラッグドロップで移動することなども可能である。

これを利用すれば、簡単にネットワークフォルダへの
リンクも作成することができる。(写真 1)

さて、このネットワークフォルダへのリンクだが、
これも実体は特殊化されたファイルフォルダなのである。
ちょっと中身を覗いてみよう。

まず、読み取り専用属性を解除する。
ここでは「ironeagle.local」というフォルダだ。

> attrib -r "D:\Documents and Settings\alex\My Documents\ironeagle.local"

こうすると、フォルダの特殊化は解除され、
ただのファイルフォルダに戻り、中身が見えるようになる。

中を開いて見ると、desktop.ini と、
target.lnk というショートカットファイルがある。

target.lnk は、一般的なショートカットファイルだ。
この target.lnk が指す先の内容が、
特殊化されていた時に表示されていたようである。

ここでは、Web フォルダであるため、
URL を指す特別なショートカットファイルになっている。
ダブルクリックすると、Web フォルダが開いた。

次に、desktop.ini を開いて見ると、
{0AFACED1-E828-11D1-9187-B532F1E9575D} という、
CLSID が目に見える。(写真 2)

{0AFACED1-E828-11D1-9187-B532F1E9575D} は、
「フォルダショートカット」と呼ばれる COM クラスだ。
この名前ではますます混乱を招きそうなので、
俺は「シェルのフォルダリンク」と呼んでいる。

この COM クラスは、通常のショートカットを、
フォルダとして名前空間の一部に割り付ける機能がある。
これはかなり汎用的な機能である。

target.lnk というショートカットさえ作っておけば、
それをフォルダリンクの CLSID で特殊化するだけで、
名前空間で展開できるようになる。

通常のフォルダへのショートカットは、
名前空間に展開されないが、
そのショートカットをサブフォルダに入れて、
親フォルダをフォルダリンクの CLSID で特殊化すれば、
通常のショートカット機能だけでなく、
そのままツリーで展開も可能なショートカットとなるのだ。

ショートカットファイルは、シェルの名前空間上にある、
あらゆるフォルダを指すことができるので、
このフォルダリンクの機能を使うと、
ファイルフォルダでもドライブでもコントロールパネルでも、
通常特殊に関係なくあらゆるフォルダを、
フォルダツリーの好きな場所におけるという状態になる。

これは限りなくシンボリックリンクに近いものである。



Copyright (c) 1994-2007 Project Loafer. All rights reserved.