2010-11-22 112 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