0

我试图找出虚拟外壳文件夹中的 LPITEMIDLIST 项目是文件还是另一个文件夹。我正在使用对IShellFolder::GetAttributesOf Windows 7 的调用,它可以正常工作,返回的代码可以在此处找到。但是在 Windows XP 上,我在 SFGAO 列表中找不到 uAttrvalue = 1342177378,即目录的 0x50000062 和文件的 1073741922 (0x40000062)。我简单地称之为:

hr = psfVobj->GetAttributesOf(1, (LPCITEMIDLIST *) &pidlItems, &uAttr);

hr = S_OK //so the function call completed with no errors
4

1 回答 1

2

SFGAO是一个位掩码,一次可以包含多个值。

0x50000062是 binary 1010000000000000000000001100010,其中包含:

SFGAO_CANMOVE 0x00000002 指定的项目可以移动。

SFGAO_CANDELETE 0x00000020 可以删除指定的项目。

SFGAO_HASPROPSHEET 0x00000040 指定的项目有属性表。

SFGAO_FILESYSANCESTOR 0x10000000 指定的文件夹要么是文件系统文件夹,要么包含至少一个作为文件系统 (SFGAO_FILESYSTEM) 文件夹的后代(子、孙或更高版本)文件夹。

SFGAO_FILESYSTEM 0x40000000 指定的文件夹或文件是文件系统的一部分(即它们是文件、目录或根目录)。可以假定项目的解析名称是有效的 Win32 文件系统路径。这些路径可以基于 UNC 或基于驱动器号。

0x40000062是 binary 1000000000000000000000001100010,其中包含:

SFGAO_CANMOVE 0x00000002

SFGAO_CANDELETE 0x00000020

SFGAO_HASPROPSHEET 0x00000040

SFGAO_FILESYSTEM 0x40000000

这意味着目录正在报告SFGAO_FILESYSANCESTOR而文件不是,这是有道理的,因为文件不是文件系统的祖先。

于 2013-11-12T19:46:22.590 回答