Windows 7 GetFileTitle的本地化版本?

Windows 7 GetFileTitle的本地化版本?,windows-7,file,localization,metadata,Windows 7,File,Localization,Metadata,我拼命地想猜测,在给定文件路径的情况下,如何检索照片的本地化文件名。例如,给定路径 c:\images\jellyfish.png-win7浏览器和内置的图像查看器程序都显示法语win7的单词“Méduses”。这是否适用于其他版本的windows GetFileTitle只删除了扩展名和文件夹路径,给了我“水母”,这不是我想要的,在阅读了MSDN和google之后,Windows Media格式的界面在这里似乎没有帮助。要么我已经失去了谷歌搜索技能,要么这是一个非常糟糕的记录。请帮忙 谢谢我不

我拼命地想猜测,在给定文件路径的情况下,如何检索照片的本地化文件名。例如,给定路径

c:\images\jellyfish.png-win7浏览器和内置的图像查看器程序都显示法语win7的单词“Méduses”。这是否适用于其他版本的windows

GetFileTitle只删除了扩展名和文件夹路径,给了我“水母”,这不是我想要的,在阅读了MSDN和google之后,Windows Media格式的界面在这里似乎没有帮助。要么我已经失去了谷歌搜索技能,要么这是一个非常糟糕的记录。请帮忙


谢谢

我不太清楚这个案例(我从未遇到过这种形式的本地化文件名),但我所知道的获得系统目录和标准Windows小程序等的本地化文件名的唯一官方支持方式是使用IShellFolder::GetDisplayNameOf

简单地说,您需要为文件(SHParseDisplayName)获取一个PIDL,绑定到其父文件夹(SHBindToParent),然后使用SHGDN_INFOLDER标志查询显示名称


附录:一种更简单的方法(我完全忘记了)是使用SHGetFileInfo获得带有SHGFI_DISPLAYNAME标志的显示名。这意味着你不需要到处乱搞PIDL。SHGetFileInfo本质上是一个围绕各种shell COM类(如IShellFolder)的包装器-无论哪种方式,关键是使用shell获取显示名称,而不是底层API函数。

嘿,这是最有见地的!虽然我没有完全按照您所描述的那样尝试,但您已经引导我走上了正确的道路:)请修改它,使其使用HRESULT hr=SHGetFileInfo(tcFilename,-1,&sfi,sizeof(sfi),SHGFI_DISPLAYNAME);这显示了我想要的名字。我没有尝试你的确切步骤,因为它们对我来说似乎是多余的。我的意思是,SHParseDisplayName后面跟一个GetDisplayName两者似乎指的是同一件事——“显示名”,必须事先输入到第一个函数中(因此必须是已知的——不是我的情况)。谢谢SHGetFileInfo也可以做同样的事情,我通常使用底层的COM接口,所以忘记了这一点。SHParseDisplayName函数有点用词不当,因为它实际解析的是一个“解析名称”——有关区别,请参阅IShellFolder::GetDisplayNameOf上的文档(特别是SHGDN_FORPARSING标志)。如果查看jpg的扩展属性(F stop、camera maker等)(在Windows 7中使用Windows资源管理器)它们包括一个所有权属性。我想这就是你在图像查看器中看到的。如果示例图片中水母图片的标题在我的安装中不是空白的,我会对此更有信心。