2010-01-21 55 views
12

似乎有成爲具有與它們關聯的(控制面板,桌面)的GUID幾個虛擬文件夾 -什麼是所有知名的虛擬文件夾GUID?

:: {00021400-0000-0000-C000-000000000046} //桌面

凡大火這些定義?他們什麼時候使用?

我想要的是有一個字符串代表虛擬文件夾沒有任何歧義的方法。

例如,如果我要爲桌面創建PIDL,則顯示名稱會以「C:\ Users \ Steve \ Desktop」的形式返回。

那麼,這是真的 - 但它不是真正的正確的文件夾。我可以在資源管理器中導航到該文件夾​​,它包含桌面上的部分文件,而不是整個桌面。

我想要的是一種將位置編碼爲字符串的方式,該字符串將始終導航到虛擬桌面文件夾(具有所有內容的文件夾,而不僅僅是一些內容)。

有誰知道這種GUID的權威列表?或者我如何將給定的PIDL轉換爲一個?

我試過SHGetDisplayName(pidl,SHGDN_ *) - 桌面pidl的每個版本都給我一個簡短的「桌面」或「C:\ Users \ Steve \ Desktop」。 (顯然,我是在'steve'帳戶下登錄的)。

想法/評論/指針?

編輯:所以看來我可以使用下面給出的答案有一個已知的文件夾GUI列表。但有沒有人知道如何從PIDL轉換 - >已知的文件夾GUID?我假設我可以ParseDisplayName(「:: {guid}」)來獲取PIDL,但有沒有辦法獲得GUID?

編輯2:我仍然無法找到一種方式獲得GUID編程。但是,就我的目的而言,我記錄了我最初創建對象時使用的CSIDL_xxx,並將其寫出,然後&將其恢復,然後通過CSIDL創建PIDL,該CSIDL保留其正確的身份(即它不會不會降級到「C:\ Users \\ Desktop」,而是會生成一個真正指向虛擬桌面的PIDL。

對我來說,訣竅是始終使用CSIDL-> PIDL,永遠不要使用字符串之間。CSIDL-> PIDL-> string-> PIDL =退化爲非虛擬路徑。

感謝大家的幫助 - 我會繼續尋找是否有人發現更多關於該主題併發布它,我會有興趣!;)

+0

有趣的問題。並且在vista/7中處理神模式文件夾的好運氣(http://www.downloadsquad.com/2010/01/03/stupid-windows-7-trick-unlock-the-secret-god-mode-folder/ ) – 2010-01-21 19:34:25

+0

有趣的鏈接。它根本不影響我 - 但它很有趣:) – Mordachai 2010-01-21 20:10:15

回答

5

如果我正確地理解你,你正在尋找CSIDL s(pre-Vista,包括Shlobj.h)或KNOWNFOLDERID(> = Vista,Knownfolders.h)。

+0

有趣!鏈接 – 2010-01-21 23:01:01

+0

顯然他沒有打擾檢查msdn first =/ – 2012-05-20 02:34:43

1

我不認爲這些GUID是正式記錄。您可以使用SHGetPathFromIDList()來獲取GUID。它會指示失敗,但是如果您查看pszPath參數,您將看到它用GUID填充(但是,第一個字符設置爲NULL)。除此之外,你可以找到其他人發現的各種GUIDS列表。

編輯:我發現了一些有趣的鏈接;看起來你可以通過搜索註冊表來發現這些GUID。

A forum posting about shell GUIDs

Control Panel GUIDs

How shell namespaces are installed

+0

在Vista下運行,使用VS2008編譯,並且將我的exe標記爲vista-aware(清單中的常用控件6.0),但是我沒有獲得GUID執行SHGetPathFromIDList() - 而是得到與SHParseDisplayName()相同的內容(即簡單的字符串路徑或文件夾名稱,但從不是GUID) – Mordachai 2010-01-21 20:09:28

+0

您將只獲得虛擬對象的GUID; 「物理」對象仍將返回文件路徑。 – Luke 2010-01-22 01:04:03

+1

但事情就是這樣:CSIDL_DESKTOP既是一個虛擬文件夾,也是一個真實文件夾。我還沒有找到辦法哄操作系統讓我回到它的GUID - 只有真正的文件夾(這不是我所需要的) – Mordachai 2010-01-22 14:36:33