Опрос

Что вас больше интересует?

  • игры для nokia
  • темы на телефон
  • программы на мобильный
  • обзоры мобильных телефонов


 

Какие игры вы предпочитаете?

  • игры для мальчиков
  • игры для девочек
  • драки
  • стрелялки
  • логические игры
  • спортивные


 

счетчики

Спонсор раздела:

Получение указателя PIDL по имени объекта

Статьи

Мы уже знаем, что вместо понятного человеку пути к файлу, представленного обычной текстовой строкой, привередливая оболочка Windows предпочитает работать со структурой PIDL. Роль переводчика с человеческого языка на язык, понятный Windows Shell, выполняет метод ParseDisplayName():

lpszDisplayName: pOLESTR; out pchEaten: ULONG; out ppidl: PItemIDList; var dwAttributes: ULONG): HResult;

Первый параметр hwndOwner представляет собой дескриптор родительского окна; в него допускается передавать нулевое значение. Параметр pbcReserved резервный; передавайте в него неопределенный указатель nil. В основной параметр lpszDisplayName мы передаем указатель на строку с полным путем к объекту, например C:\MySuperFolder. Необязательный параметр pchEaten возвратит в переменную количество проанализированных методом символов. Результаты «перевода» файлового пути в так любимый оболочкой Windows идентификатор мы обнаружим в параметре ppidl. Последний параметр метода также необязателен, это набор флагов атрибутов.

Разберем простейший вариант использования метода ParseDisplayName():

function ConvertNameToPIDL(fName: string; var pidlObject: PItemIDList) : boolean;

var iDesktop: IShellFolder;

CharsDone: ULONG;

dwAttributes: DWORD;

WC : array[0..MAX_PATH-1] of WideChar;

StringToWideChar(fName, WC, MAX_PATH); //преобразуем строку в формат WideChar

if SHGetDesktopFolder(iDesktop)=S_OK then

if iDesktop.ParseDisplayName(0, nil, WC, CharsDone, pidlObject, dwAttributes)=S_OK then Result:=True else Result:=False;

end;

function ParseDisplayName(hwndOwner: HWND; pbcReserved: Pointer;

begin

Функция ConvertNameToPIDL() преобразует имя файлового объекта в список идентификаторов. Для обращения к методу ParseDisplayName() мы предварительно получаем указатель на интерфейс IShellFolder рабочего стола.

Добавить комментарий


Защитный код
Обновить