ショートカット

yuki_endo2005-06-02

フォルダのショートカットを実装していないことに気づき、
実装した。
簡単に実装できると思っていたけど、思っていたより手こずった。


調べるとIShellLinkとIPersistFileを使うらしいので、使ってみた。
しかし、フォルダのリンク切れに対して、エクスプローラと同じ
挙動にはならなかった。
ショートカットの検索画面でキャンセルした後に
メッセージがでてしまう。
かなり調整してみたけど、どうしても挙動が一致しない。


その後、GetUIObjectOfからIShellLinkを取得することに気づき、
解決した。
調べても載ってない。わかんないよ、そんなの。


興味があったので、他のファイラも調べたけど、
ちゃんと実装できていないのが多いみたい。
みんな苦労してるんだろうな。


あまり気にしても仕方がないのかもしれないけど、
こういう細かいところの挙動って本当に難しい。
今まで自分が実装している範囲も、かなり怪しい。


HRESULT hr;
IShellLink* sl;
UINT reserved;
hr = sf->GetUIObjectOf(NULL, 1, &il, IID_IShellLink, &reserved, (LPVOID*)&sl);
if (SUCCEEDED(hr)) {
hr = sl->Resolve(hwnd, SLR_UPDATE);
// SUCCEEDEDではなくS_OK。ショートカットの検索画面でキャンセルした場合、
// 0x0001が返ってくる。
// これに気づかずに時間を無駄にした。
// 今まで他もSUCCEEDEDでやっていたので、見直さねば。
if (hr == S_OK) {
....
}
}