2009-07-07 212 views
1

我想獲取指定文件夾的系統圖標,但也許檢索圖標的唯一方法是使用SHGetFileInfo()方法。 SHGetFileInfo()方法的第一個參數是LPITEMIDLIST的指針。如何根據文件夾的路徑獲取LPITEMIDLIST指針?

如果我只有文件夾的絕對路徑,我怎麼才能得到指針根據路徑?

回答

5

SHParseDisplayName()

歡迎來到美好的PIDL世界。

您可以在Introduction to the Shell Namespace閱讀更多內容,但基本上PIDL是指向項目ID列表的指針。您可以將其視爲連續內存中的鏈接列表,但不是每個節點都有指向下一個節點的指針,而是您擁有包含該項目的字節計數的cb成員,因此您可以將其添加到獲取下一個項目的基地址。 IDLists以{cb = 0,abID = NULL}的項目結束。

那麼,這些魔杖是什麼?基本上你不在乎,也不知道。任何IShellFolder實現都可以創建一個新類型的ID來表示它在shell命名空間中的項目類型。 Shell實現的基本文件系統視圖只是在這些列表中存儲路徑的各個部分,因此在第一個「用戶」下面有一個類似於「c:\」的內容等。實際上,它們是序列化的可能包含更多數據的結構(或類)。但它們也可以代表打印機,網絡共享,數據庫搜索(用於搜索文件夾,堆棧等)。

您真正需要知道的是,你可以問IShellFolders給你,表示它們所包含的項的PIDL,以後你可以給PIDL還給他們,以及其他各種殼牌功能和接口,並且他們知道如何處理它們。 SHParseDisplayName()基本上做了什麼(我認爲)是通過註冊表尋找所有註冊的IShellFolder實現,並詢問他們是否知道如何處理傳入的字符串,並且第一個處理它會使PIDL生效背部。

+0

謝謝!我最近經常遇到PIDL的概念。你能推薦一些文章向我解釋嗎? – quantity 2009-07-07 06:12:37

相關問題