2010-11-22 35 views
1

写真のローカライズされたファイル名がそのファイルへのパスでどのように取得されるかを推測しようとしています。たとえば、パスが与えられた場合GetFileTitleのローカライズ版ですか?

c:\ images \ jellyfish.png - Win 7のエクスプローラとビルドインされた画像ビューアプログラムの両方でフランス語の勝利のために "メドゥス"という単語が表示されます7.これは他のバージョンの窓?

GetFileTitleは私に「jellyfish」を与えてくれた拡張子とフォルダのパスのみを削除し、MSDNとgoogleを読んだ後にはWindows Media Formatのhttp://msdn.microsoft.com/en-us/library/dd798508(v=VS.85).aspxインターフェイスがここで役に立たないようです。私は私のグーグル・スキルを失ったか、これは非常によく文書化されていません。助けてください ?

は、私は特にこのケースについてはよく分からない(私はその形式でローカライズされたファイル名に遭遇したことがありません)が、システムディレクトリのローカライズされたファイル名を取得するために私の知っている唯一の公式にサポートされている方法と、あなたに

+0

(Windows 7ではWindowsエクスプローラを使用して)jpgの拡張プロパティ(F stop、カメラメーカーなど)を見ると、Titleプロパティが含まれています。私はあなたがイメージビューアで見ているものだと思います。サンプル写真のクラゲの写真のタイトルが私のインスタレーションのために空でないならば、これについてもっと自信があります。 –

答えて

3

に感謝します標準のWindowsアプレットなどは、IShellFolder :: GetDisplayNameOfを使用します。

簡単に言えば、ファイル(SHParseDisplayName)のPIDLを取得し、親フォルダ(SHBindToParent)にバインドして、SHGDN_INFOLDERフラグを使用して表示名を照会する必要があります。

補足:(私が完全に忘れた)さらに簡単な方法は、SHGetFileInfoを使用してSHGFI_DISPLAYNAMEフラグで表示名を取得することです。つまり、PIDLを使用する必要はありません。 SHGetFileInfoは本質的に、IShellFolderのような様々なシェルCOMクラスを包むラッパーです。いずれの場合でも、キーは、基礎となるAPI関数ではなく表示名を取得するためにシェルを使用することです。

+0

ねえ、それは最も洞察力があった! HRESULT hr = SHGetFileInfo(tcFilename、-1、&sfi、sizeof(sfi)、SHGFI_DISPLAYNAME)を使用するように修正してください。それは私が後にした名前を明らかにする。彼らが私に重複しているように見えたので、私はあなたの正確なステップを試みなかった。つまり、SHParseDisplayNameとGetDisplayNameOfの両方が同じものを参照しているように見えます - 先行する最初の関数に渡されなければならない '表示名'(したがって、既にわかっている必要があります。ありがとう! – kellogs

+0

SHGetFileInfoは同じことをすることができます。私は通常、基本となるCOMインターフェイスを使用していますので、忘れてしまいました。 SHParseDisplayName関数は、実際に解析するものが「解析名」であるため、誤った名前になります.IShellFolder :: GetDisplayNameOf(特にSHGDN_FORPARSINGフラグ)のドキュメントを参照してください。 –

関連する問題