【问题标题】:IShellFolder::GetAttributesOf returns unrecognized SFGAOF valueIShellFolder::GetAttributesOf 返回无法识别的 SFGAOF 值
【发布时间】:2013-11-12 13:21:52
【问题描述】:
我正在尝试找出虚拟外壳文件夹中的 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
【问题讨论】:
标签:
windows
winapi
visual-c++
visual-studio-2008
【解决方案1】:
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 而文件不是,这是有道理的,因为文件不是文件系统的祖先。