我试图找出虚拟shell文件夹中的LPITEMIDLIST项是文件还是其他文件夹。我正在使用IShellFolder::GetAttributesOf
的电话
在Windows 7中,它可以正常工作,返回的代码可以找到它们here。但是在Windows XP上,uAttrvalue = 1342177378,目录为0x50000062,文件为1073741922(0x40000062),我在SFGAO列表中找不到。
我只是称之为:
hr = psfVobj->GetAttributesOf(1, (LPCITEMIDLIST *) &pidlItems, &uAttr);
hr = S_OK //so the function call completed with no errors
答案 0 :(得分:2)
SFGAO
是一个位掩码,它一次可以包含多个值。
0x50000062
是二进制1010000000000000000000001100010
,其中包含:
SFGAO_CANMOVE 0x00000002 可以移动指定的项目。
SFGAO_CANDELETE 0x00000020 可以删除指定的项目。
SFGAO_HASPROPSHEET 0x00000040 指定的项目有属性表。
SFGAO_FILESYSANCESTOR 0x10000000处 指定的文件夹是文件系统文件夹或包含至少一个作为文件系统(SFGAO_FILESYSTEM)文件夹的子孙(子,孙或更高版本)。
SFGAO_FILESYSTEM 0x40000000之后 指定的文件夹或文件是文件系统的一部分(即,它们是文件,目录或根目录)。可以假定已解析的项名称是有效的Win32文件系统路径。这些路径可以是UNC或基于驱动器号的。
0x40000062
是二进制1000000000000000000000001100010
,其中包含:
SFGAO_CANMOVE 0x00000002
SFGAO_CANDELETE 0x00000020
SFGAO_HASPROPSHEET 0x00000040
SFGAO_FILESYSTEM 0x40000000
这意味着目录报告SFGAO_FILESYSANCESTOR
而文件不是,这是有道理的,因为文件不是文件系统的祖先。