Кажется, есть несколько виртуальных папок, с которыми связаны GUID (панель управления, рабочий стол) -
:: {00021400-0000-0000-c000-000000000046} // рабочий стол
Где они определены? Когда они используются?
Мне нужен способ получить строку, которая представляет виртуальную папку без какой-либо двусмысленности.
Если, например, я должен был создать PIDL для рабочего стола, отображаемое имя возвращается как «C: \ Users \ Steve \ Desktop».
Ну, это правда на данный момент - но это не совсем правильная папка. Я могу перейти в Проводнике к этой папке, и она содержит часть файлов на моем рабочем столе, а не весь рабочий стол.
Мне нужен способ кодирования этого местоположения в виде строки, которая всегда будет перемещаться в папку виртуального рабочего стола (ту, в которой есть все ее содержимое, а не только несколько вещей).
Кто-нибудь знает точный список таких GUID? Или как я могу преобразовать данный PIDL в один?
Я попробовал SHGetDisplayName (pidl, SHGDN_ *) - каждая версия этого для настольного pidl дает мне короткий «Рабочий стол» или «C: \ Users \ Steve \ Desktop». (Я вошел в систему под учетной записью «steve», очевидно).
Идеи / комментарии / указатели?
РЕДАКТИРОВАТЬ: Похоже, что я могу использовать приведенные ниже ответы, чтобы получить список известных графических интерфейсов папок. Но кто-нибудь знает программно, как конвертировать из PIDL -> известную папку GUID? Я предполагаю, что могу получить ParseDisplayName (":: {guid}"), чтобы получить PIDL, но есть ли способ получить GUID?
EDIT2: Я все еще не могу найти способ получить GUID программно. Однако для моих целей я записываю CSIDL_xxx, который я использую для первоначального создания объекта, и записываю его и восстанавливаю позже, а затем создаю PIDL с помощью CSIDL, который сохраняет свою правильную идентичность (т.е. не превращается в «C: \ Users \\ Desktop», а скорее генерирует PIDL, который действительно указывает на виртуальный рабочий стол.
Хитрость для меня состоит в том, чтобы всегда использовать CSIDL-> PIDL, никогда не переходя на строку между ними. CSIDL-> PIDL-> string-> PIDL = вырождение в не виртуальный путь.
Спасибо всем за помощь - и я буду продолжать искать, если кто-нибудь найдет больше по теме и опубликует ее, мне было бы интересно! ;)