カテゴリー別

お絵描き、デザイン

写真、動画関連ソフト

アメーバピグ専用ソフト

ホームページ関連

画像処理

スキャナー用

SEO 関連

お楽しみ

その他

過去ログ

2017年12月04日(月)

「ドキュメント」の ITEMIDLIST を SHGetSpecialFolderLocation で取得すると、IShellFolder で列挙して取得できるものと違うみたい

今日も、 ローカルブラウザ の修正中。

ローカルブラウザは、自分のパソコンに保存されている
HTML ファイルなどを、効率よく表示するためのソフトです。

インターネットエクスプローラーみたいなものですが、
ウィンドウズエクスプローラーと同様のフォルダーツリーが
あるので、ローカルに保存されているファイルを簡単に開けます。

↑ 開発中の画面。

今日も、テストと不具合の修正です。

「ドキュメント」の ITEMIDLIST を
SHGetSpecialFolderLocation で取得すると、
IShellFolder で列挙して取得できるものと違う問題に対応しました。

何のこっちゃわからない人は、
このページに辿りつかない気がしますが、
一応、説明しときます。

「ドキュメント」は、エクスプローラーのツリーの
「PC」の下にある仮想フォルダーのこと。

ITEMIDLIST はファイルパスに近いですが、
ルート (一番の親) はデスクトップになっていて、
エクスプローラーのツリーの各項目の場所を
表すのに使うものです。ファイル名に対応するのが
ITEMID でパスに対応するのが、ITEMIDLIST です。

で、SHGetSpecialFolderLocation という API で、
ドキュメントの ITEMIDLIST を取得すると、
「PC」と「ドキュメント」をつないだ
ITEMIDLIST が取得できるのですが、
「ドキュメント」の方の ITEMID が、
「PC」の子を列挙して取得できる
ITEMID と違うものが返ってきます。

なんでかよくわかりませんが、困りますね。

SHGetSpecialFolderLocation のかわりに、
SHGetKnownFolderIDList という別の API を使用してみたり、
KF_FLAG_DEFAULT_PATH フラグを立てたり、立てなかったり、
色々と条件を変えてテストしてみたのですが、
列挙したときに取得できる方の ITEMID は取得できませんでした。

で、しょうがないので、別の方法を取りました。

まずは、普通に「ドキュメント」の
ITEMIDLIST を取得して、名前を取得します。

名前は、日本語環境だと「ドキュメント」ですが、
英語環境だと「Documents」になったりします。

次に親の ITEMIDLIST を計算し、
IShellFolder で子を列挙して、
同じ名前のものを探します。

で、見つかった場合は、その ITEMID を
ドキュメントの ITEMID として再構成します。

ローカルブラウザのダウンロードはこちら からどうぞ。

・・・

うーん。何でこんな
面倒なことになっちゃうんだろう。

謎だわ。

ローカルブラウザ
ローカルブラウザのダウンロード
ローカルブラウザの更新履歴
ご意見・ご要望連絡窓口


コメント
コメントする