このアーカイブは同期化されません。 mixi の日記が更新されても、このアーカイブには反映されません。
現在、リンク先を表示できるのは、.lnk ファイルだけだが、
リンク先を持つファイルは、.lnk ファイルだけではない。
たとえば、.url は、インターネットショートカットであり、
ファイル内部に URL を格納している。
Internet Explorer の管理するお気に入りも、
フォルダで分類されたインターネットショートカットだ。
次は、これを調べてみよう。
例によって、レジストリを探す。
拡張子「.url」
⇒ProgID「InternetShortcut」
⇒CLSID「{FBF23B40-E3F0-101B-8488-00AA003E56F8}」
⇒表示名「Internet Shortcut」
OLEVIEW の「All Objects」から、
「Internet Shortcut」を探す。(写真)
これも色々なインタフェースを実装していることが分かる。
定番の IPersistFile インタフェースも実装している。
また、IShellLinkW インタフェースも実装しているようだ。
では、IPersistFile ⇒ IShellLinkW の方法で試してみよう。
まずは、COM のクラスを定義する。
InternetShortcutClass としよう。
場所は、Interop フォルダ内にいれる。
========== InternetShortcutClass.cs ==========
using System;
using System.Runtime.InteropServices;
namespace LoaferShellEx.Interop {
// シェルの提供する InternetShortcut COM クラス
[ComImport]
[Guid("FBF23B40-E3F0-101B-8488-00AA003E56F8")]
public class InternetShortcutClass {
// 実装やインタフェース継承は省略できる
}
}
========== end of InternetShortcutClass.cs ==========
今日は、ComVisible 属性を省略している。
アセンブリに ComVisible(false) を明示しているからだ。
上を使えば、InternetShortcutClass は作成できるので、
一昨日のコードを書き換えて実験してみよう。
ShortcutClass を InternetShortcutClass にするだけだ。
http://mixi.jp/view_diary.pl?id=166475473&owner_id=2300658
試してみたが、インターネットショートカットの場合、
どうもリンク先が取得できないようである。
考えてみれば当然かもしれないが
インターネットショートカットが保持するのは URL なので、
常にファイル名を示す GetPath は値を返せないはずだ。
さて、どうしようか。