Я пытаюсь выяснить, как функция «SHParseDisplayName» создает абсолютный pidl для вывода.
Мне абсолютно необходимо контролировать его вывод.
Чтобы понять, что я имею в виду, я делаю два примера:
Выполнение SHParseDisplayName("C:\\Users\\Username\\Onedrive", IntPtr.Zero, out pidl, 0, out psfgaoOut)
абсолютной выходной переменной "pidl" состоит из эти pidls (полученные путем выполнения в последовательности SHGetNameFromIDList(pidl, SIGDN.PARENTRELATIVEPARSING, out name)
и ILRemoveLastID(pidl)
, пока я не достигну root):
- :: {018D5C66-4533-4307-9B53-224DE2ED1FE6}
- Рабочий стол
Выполнение того же для "C: \ Users \ Имя пользователя \ Pictures", результат:
- :: {24AD3AD4-A569-4530- 98E1-AB02F9417AA8}
- :: {20D04FE0-3AEA-1069-A2D8-08002B30309D}
- Рабочий стол
Сначала я подумал, что составлен абсолютный пидл на основе значения «pszParsingName» KNOWNFOLDER_DEFINITION относительной известной папки, поэтому я создал новую известную папку с помощью IKnownFolderManager :: RegisterFolder и установил конкретный путь к папке пространства имен оболочки в « pszParsingName »значение KNOWNFOLDER_DEFINITION.
Unfortuna только абсолютный выход pidl не был ожидаемым. (И я добавил новый известный путь к папке также в разделе реестра «Папки пользователя»)
Поэтому я прошу вашей помощи выяснить, как я могу управлять построением абсолютного вывода pidl «SHParseDisplayName» функция.
Большое спасибо за любую помощь