2009-07-07 8 views
1

指定したフォルダのシステムアイコンを取得したいのですが、アイコンを取得する唯一の方法はSHGetFileInfo()メソッドを使用することです。 SHGetFileInfo()メソッドの最初のパラメータは、LPITEMIDLISTのポインタです。フォルダのパスに従ってLPITEMIDLISTポインタを取得する方法は?

フォルダの絶対パスしかない場合は、パスに応じてポインタを取得するにはどうすればよいですか?

答えて

5

SHParseDisplayName()

PIDLの素晴らしい世界へようこそ。

Introduction to the Shell Namespaceで詳しく読むことができますが、基本的にPIDLはアイテムIDリストへのポインタです。それを連続したメモリのリンクリストと考えることができますが、各ノードの代わりに次のノードへのポインタを持つ代わりに、アイテムに含まれるバイト数であるcbメンバを持っています。次の項目を取得するためのベースアドレス。 IDListsは{cb = 0、abID = NULL}の項目で終了します。

だから、これらの魔法の池には何がありますか?基本的にあなたは気にしないし、知ることもできません。どのIShellFolder実装でも、新しい名前のIDを作成して、シェル名前空間内の項目の種類を表すことができます。シェルが実装する基本的なファイルシステムビューは、パスの部分をこれらのリストに格納するだけなので、次の最初の "Users \"には "c:\"のようなものがあります。実際には、より多くのデータを含むことができる構造体(またはクラス)。しかし、プリンタ、ネットワーク共有、データベース検索(検索フォルダ、スタックなど)を表すこともできます。

あなたが本当に知っておくべきことは、IShellFoldersに含まれているアイテムを表すPIDLを与えることができ、後でそのPIDLを他のさまざまなShell関数やインターフェイスに戻すことができることですそれらに対処する方法。どのようなSHParseDisplayName()は基本的には(私が思う)、登録されているすべてのIShellFolder実装を探してレジストリを調べ、渡す文字列をどうすればよいかを尋ね、PIDLを処理してそれを与えるバック。

+0

ありがとうございました!私はPIDLの概念を最近よく知った。私にそれを説明するいくつかの記事をお勧めできますか? – quantity

関連する問題