Получить атрибуты файла / папки из IShellFolder, используя атрибут DWORD - PullRequest
1 голос
/ 15 марта 2012

Я очень новичок в C ++, особенно в MS C ++ (для Windows)

Я хочу отображать значки наложения на папках.

Я немного преуспел в этом из-за нескольких примеров в сети.

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

Мне трудно понять, что такое DWORD: как я могу получить из него информацию о файле / папке (если есть), я говорю о IShellIconOverlayIdentifier::IsMemberOf методе.

    HRESULT IsMemberOf(
  [in]  PCWSTR pwszPath,
  DWORD dwAttrib
);

Как я могу узнать, является ли она папкой или доступной для записи или нет, бла-бла ... (из dwAttrib).

В нем говорится (dwAttr в IsMemberOf документации)

Атрибуты объекта

Действительно ли DWORD содержит все атрибуты файла / папки?

Если мне нужно получить его из IShellFolder::GetAttributesOf метод, то, как я могу этого достичь.

Я перестал склоняться к Java, так что я надеюсь, что мне просто нужно будет сделать этот оверлей.спасибо

1 Ответ

1 голос
/ 15 марта 2012

IShellIconOverlayIdentifier реализуется расширениями оболочки, и вы, как правило, не используете этот интерфейс напрямую, оболочка вызывает его глубоко внутри своей реализации пространства имен / IShellFolder.

Когда у вас есть интерфейс IShellFolder и дочерний pidl, который вы вызываетеэто так:

SFGAOF icareabout = SFGAO_COMPRESSED|SFGAO_ENCRYPTED;
hr = pShellFolder->GetAttributesOf(1,&childpidl,&icareabout);
//Check hr
if (SFGAO_COMPRESSED&icareabout) ...

Если у вас есть только абсолютный pidl, сначала вызовите SHBindToParent .

Если у вас есть только обычный путь, вызовите SHParseDisplayName, он может дать вам флаги (не забудьте освободить pidl). То же самое можно сделать, вызвав SHGetFileInfo с SHGFI_ATTRIBUTES.

...