このアーカイブは同期化されません。 mixi の日記が更新されても、このアーカイブには反映されません。
COM サーバをレジストリに登録し、
実際にアイコンが表示されるかどうか試してみよう。
レジストリへの登録内容は昨日書いたとおりだが、
登録は COM クラス単位で行うので、
複数の COM クラスを提供するサーバの場合、
その数だけ登録する必要がある。
本来はプログラムから登録を行うのだが、
この時点ではまだ動作確認だけでよいので、
レジストリへの登録や登録解除は、
レジストリファイルを使うことにしよう。
COM サーバ LinkIconOverlays.dll が提供するのは、
HardLinkIconID クラス 1 つだけなので、
以下のような情報を登録する必要がある。
========== register.reg ==========
REGEDIT4
[HKEY_CLASSES_ROOT\CLSID\{755525B6-51FB-490b-A21B-91F7208C9429}]
@="Loafer Hard Link Icon Overlay Identifier"
[HKEY_CLASSES_ROOT\CLSID\{755525B6-51FB-490b-A21B-91F7208C9429}\InProcServer32]
@="C:\\mixi\\LinkIconOverlays\\Debug\\LinkIconOverlays.dll"
"ThreadingModel"="Apartment"
========== (register.reg) ==========
InProcServer32 キーの既定値には DLL のパスを登録する。
これは DLL が配置される場所によって異なることになる。
また、昨日述べた COM サーバのスレッディングモデルも
レジストリに登録する必要がある。
InProcServer32 キーは文字列値 ThreadingModel を持ち、
ここに、スレッディングモデルの値が入る。
STA Model の場合は「Apartment」とする必要がある。
さて、LinkIconOverlays.dll は COM サーバだけでなく、
シェルエクステンションでもあるため、
シェルに対しても別途登録をしなければならない。
これは、シェルエクステンションの種類によっても異なり、
アイコンの重ね合わせハンドラの場合は、
以下のキーを作成し、そのデフォルト値として、
クラス ID の文字列表現を登録する必要がある。
HKEY_LOCAL_MACHINE
+ Software
+ Microsoft
+ Windows
+ CurrentVersion
+ Explorer
+ ShellIconOverlayIdentifiers
+ クラスの説明
- (既定値) = クラス ID
========== (register.reg) ==========
[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiers\Loafer Hard Link Icon Overlay Identifier]
@="{755525B6-51FB-490b-A21B-91F7208C9429}"
========== end of register.reg ==========
不思議なのは、「クラスの説明」をキーとして使うことだ。
ShellIconOverlayIdentifiers キーの下には、
重ね合わせアイコンを提供する COM クラスのキーが並ぶが、
その際に説明文が偶然重なる可能性は否定できない。
そのため、ある程度長い説明文を登録することが推奨される。
この register.reg をレジストリに追加すれば、
シェルエクステンションとして利用できる事になる。
では、登録用に対応して、登録解除用のファイルも作ろう。
シェルエクステンションは、シェルの一部として動作する。
テスト中に万が一 explorer.exe が起動しなくなっても、
すぐに登録解除できるように準備をしておこう。
========== unregister.reg ==========
REGEDIT4
[-HKEY_CLASSES_ROOT\CLSID\{755525B6-51FB-490b-A21B-91F7208C9429}]
[-HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiers\Loafer Hard Link Icon Overlay Identifier]
========== end of unregister.reg ==========
CLSID 配下のクラス ID のキーと、
そして、ShellIconOverlayIdentifiers 配下の
説明文の入ったキーを丸ごと削除するファイルとなる。
では、試してみよう。
まず、ハードリンクを作らなければ確認できない。
Windows XP には、fsutil というコマンドがあり、
これを使ってハードリンクを作成することができる。
> fsutil hardlink create perl5.exe perl.exe
これで、perl.exe と同じ内容の perl5.exe が作成される。
ハードリンクはデータのコピーは行わないので、
巨大なファイルに対して行っても一瞬でできるはずだ。
次いで、Power Users 以上の権限でログオンし、
register.reg をレジストリに追加する。
その状態でエクスプローラを開き、
ハードリンクを作ったフォルダに移動してみる。
さて、どうだろうか。成功した場合は、
アイコンの左下に小さい青印があるはずだ。
俺の環境では写真のようになった。
ひとまずは成功ということになる。
もし何かがおかしい場合は表示されないし、
コードに致命的な問題があった場合は、
フォルダを開くタイミングで落ちることもある。
その場合は、Ctrl+Shift+Esc か Ctrl+Alt+Del 等から
タスクマネージャを起動し、新しいタスクの実行で、
cmd や regedit を起動することができるので、
unregister.reg を使って登録解除すれば元に戻せる。