2010-11-22 116 views
1

我拼命地试图猜测如何获取照片的本地化文件名,给定该文件的路径。例如,给定路径GetFileTitle的本地化版本?

c:\ images \ jellyfish.png - Win 7资源管理器和内置的图像查看器程序都显示单词“Méduses”为法语胜利7.这是否适用于其他版本的窗户?

GetFileTitle只删除扩展名和文件夹路径给我'水母'这是不是我以后,通过MSDN和谷歌阅读后,似乎Windows媒体格式的http://msdn.microsoft.com/en-us/library/dd798508(v=VS.85).aspx接口在这里没有帮助。要么我已经失去了Google的搜索技巧,要么这个记录很糟糕。请帮助 ?

谢谢

+0

如果您查看jpg(使用Windows 7中的Windows资源管理器)的扩展属性(F stop,相机制造商等),它们包含Title属性。我认为这就是你在图像查看器中看到的。如果Sample Picture中的水母照片的标题对我的安装不是空白,我会对此更有信心。 – 2010-11-23 00:12:06

回答

3

我不知道有关这个案子的具体(我从来没有遇到过这种形式的本地化的文件名),但唯一正式支持的办法,我知道的,以获得本地化的文件名的系统目录,并标准的Windows小程序等,是使用IShellFolder :: GetDisplayNameOf。

简而言之,您需要获取文件的PIDL(SHParseDisplayName),绑定到其父文件夹(SHBindToParent),然后使用SHGDN_INFOLDER标志查询显示名称。

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

+0

嘿,那是最有洞察力的!虽然我没有完全按照您所描述的方式尝试,但是您已经将我带入了正确的轨道:)请修改它,以便它使用HRESULT hr = SHGetFileInfo(tcFilename,-1,&sfi,sizeof(sfi),SHGFI_DISPLAYNAME);这揭示了我之后的名字。我没有尝试你的确切步骤,因为它们对我来说似乎是多余的。我的意思是,SHParseDisplayName后跟一个GetDisplayNameOf似乎都指向相同的东西 - 必须先提供给第​​一个函数的“显示名称”(因此必须是已知的 - 而不是我的情况)。谢谢! – kellogs 2010-11-22 23:44:43