Что такое вся известная виртуальная папка GUIDs?

Кажется, есть несколько виртуальных папок, у которых есть GUIDs, связанный с ними (пульт управления, рабочий стол) -

:: {00 021 400 0000 0000 c000 000000000046}//рабочий стол

Где пламя - они определенные? Когда они используются?

То, что я хочу, является способом иметь последовательность, которая представляет виртуальную папку без любой двусмысленности.

Если, например, я должен был создать PIDL для рабочего стола, название дисплея возвращается как «C:\Users\Steve\Desktop».

Ну, это правда в данный момент - но не действительно правильная папка. Я могу провести в Исследователе к той папке, и она содержит часть файлов на моем рабочем столе, не всем рабочем столе.

То, что я хочу, является способом закодировать то местоположение как последовательность, которая будет всегда проводить к виртуальной настольной папке (тот, у которого есть все его содержание, не всего несколько вещей).

Кто-либо знает о категорическом списке такого GUIDs? Или как я мог бы преобразовать данный PIDL в один?

Я попробовал SHGetDisplayName (pidl, SHGDN_ *) - каждая версия этого для рабочего стола pidl дает мне или короткий «Рабочий стол» или «C:\Users\Steve\Desktop». (Я вошел под счетом 'steve', очевидно).

Идеи / комментируют / указатели?

Править: Таким образом, кажется, что я могу использовать данные ответы ниже, чтобы иметь список Известной Папки GUIds. Но кто-либо знает программно, как преобразовать из PIDL-> известная папка GUID? Я предполагаю, что могу ParseDisplayName (»:: {guid} «) получить PIDL, но - там способ добраться до GUID?

EDIT2: Я все еще не могу найти способ добраться до GUID программно. Однако в моих целях, я делаю запись CSIDL_xxx, который я использую, чтобы создать объект первоначально, и выписать это & восстановить его позже и затем создать PIDL посредством CSIDL, который сохраняет его правильную идентичность (т.е. он не ухудшается в «C:\Users\\Desktop», а скорее производит PIDL, который действительно указывает на виртуальный рабочий стол.

Уловка для меня должна всегда использовать CSIDL-> PIDL, никогда не идя в промежуточную последовательность. CSIDL-> PIDL-> последовательность-> PIDL = вырождение в невиртуальный путь.

Спасибо все для помощи - и я буду продолжать смотреть, если кто-либо найдет больше на предмете и отправит его, мне было бы интересно!;)

12
задан Mordachai 21 January 2010 в 20:43
поделиться

2 ответа

Если я вас правильно понимаю, вы ищете CSIDL S (Pre-Vista, включают Shlobj.h) или , известные folderId (> = Vista, SubjectFolders.h).

5
ответ дан 2 December 2019 в 23:19
поделиться

Я не думаю, что эти руководства официально документируются. Вы можете использовать GGETPORMIDList (), чтобы получить GUID. Он будет указывать сбой, но если вы посмотрите на параметр PSZPath, вы увидите, что он заполнен GUID (однако, первый символ устанавливается на NULL). Кроме того, вы можете найти различные списки GUID, обнаруженные другими людьми.

Править: Я нашел несколько интересных ссылок; Кажется, вы можете обнаружить эти руководства, поиск в реестре.

Сообщение форума о GUIDS Shell

Руководство по контролю управления

Как установлены пространства имен оболочки

1
ответ дан 2 December 2019 в 23:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: