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