【问题标题】: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 而文件不是,这是有道理的,因为文件不是文件系统的祖先。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-21
    • 1970-01-01
    相关资源
    最近更新 更多