プロが教えるわが家の防犯対策術!

IShellFolder によって、ある LPCITEMIDLIST から SHGetPathFromIDList を利用してパスを取得しようとしているのですが、意図したパス情報が返されないので困っています。

詳細
SHBrowseForFolder で呼び出せるフォルダ選択ダイアログのような フォルダ選択画面を作成しています(諸事情がありフォルダ選択ダイアログが使えません)。
そこで次のサイト

http://hp.vector.co.jp/authors/VA016117/winsdk.h …

を参考に、ユーザーが選択したフォルダのパスをSHGetPathFromIDList を呼び出して取得しようとしているのですが、なぜか例えば "D:\test" は "C:\Documents And Setting\user_name\デスクトップ\test" として返されるため、次の段階のディレクトリのオープン処理(FindFirstFile)に失敗してしまいます。

SHBrowseForFolder のようにドライブレターから始まるパスを取得するにはどうすればいいのでしょうか。

A 回答 (1件)

★アドバイス


 SHGetFolderLocation
 SHGetSpecialFolderLocation
 SHGetSpecialFolderPath
 で検索して下さい。
 http://www001.upp.so-net.ne.jp/yamashita/doc/she …
 http://hp.vector.co.jp/authors/VA023539/tips/she …

参考URL:http://msdn.microsoft.com/en-us/library/bb762204 …
    • good
    • 0
この回答へのお礼

すばやい回答ありがとうございます。
紹介いただいたサイトを読み、もう一度コードを確認してみたところ以下のことがわかりました。

私が参考にしたサイトの項目(記述し忘れてました)

窓プログラミング
エクスプローラーを作る 1 - 5

で紹介されているコードではファイル情報をツリーリストとして表示するために、lpItemIDL とlpItemAllIDLと変数名がつけられた 2つの LPITEMIDLIST をツリーアイテムとして管理しています。
私は前者の lpItemIDL に相当する変数を作成しこれからパス情報を取得しようとしていたのですが、lpItemAllIDL に相当する変数を作成しこちらを使用することでドライブレターから始まるパス情報をとることができるようになりました。

重要な部分だったので助かりました。

お礼日時:2008/12/21 05:17

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!