2010-11-22 30 views
1

Je tente désespérément de deviner comment le nom de fichier localisé pour les photos peut être récupéré étant donné le chemin vers ce fichier. Par exemple, étant donné que le cheminversion localisée de GetFileTitle?

c: \ images \ jellyfish.png - Win 7 explorateur et le programme de visionneuse d'image intégré affichent tous les deux le mot "Méduses" pour une victoire française 7. Est-ce valable pour d'autres versions de les fenêtres ? GetFileTitle ne supprime l'extension et le chemin de dossier me donnant «méduse» ce qui n'est pas ce que je suis après, et après avoir lu MSDN et google, il semble que l'interface http://msdn.microsoft.com/en-us/library/dd798508(v=VS.85).aspx du format Windows Media ne aiderait pas ici. Soit j'ai perdu mes compétences en googling, soit cela est très mal documenté. Aidez-moi, s'il vous plaît ?

merci

+0

Si vous regardez les propriétés étendues (F arrêt, fabricant d'appareil photo, etc.) d'un jpg (en utilisant l'Explorateur Windows dans Windows 7), ils incluent une propriété Titre. Je pense que c'est ce que vous voyez dans la visionneuse d'images. Je me sentirais plus confiant à ce sujet si le titre de la photo de méduses dans Sample Pictures n'était pas vide pour mon installation. –

Répondre

3

Je ne suis pas sûr de ce cas en particulier (je ne l'ai jamais rencontré les noms de fichiers localisés sous cette forme), mais la seule façon soutenue officiellement que je connaisse pour obtenir les noms de fichiers localisés pour les répertoires du système et la les applets Windows standard, etc., doivent utiliser IShellFolder :: GetDisplayNameOf. Donc brièvement, vous devez obtenir un PIDL pour le fichier (SHParseDisplayName), lier à son dossier parent (SHBindToParent), puis interroger le nom d'affichage à l'aide de l'indicateur SHGDN_INFOLDER.

Addendum: Un moyen encore plus facile (que j'ai complètement oublié) est d'utiliser SHGetFileInfo pour obtenir le nom d'affichage avec l'indicateur SHGFI_DISPLAYNAME. Cela signifie que vous n'avez pas besoin de vous balader avec les PIDL. SHGetFileInfo est essentiellement un wrapper autour des différentes classes COM shell comme IShellFolder - de toute façon, la clé est d'utiliser le shell pour obtenir le nom d'affichage plutôt que les fonctions API sous-jacentes.

+0

Hé, c'était le plus perspicace! Bien que je ne l'ai pas essayé exactement comme vous l'avez décrit, vous m'avez conduit sur la bonne voie :) Veuillez le modifier afin qu'il utilise HRESULT hr = SHGetFileInfo (tcFilename, -1, & sfi, sizeof (sfi), SHGFI_DISPLAYNAME); ce qui révèle le nom que j'étais après. Je n'ai pas essayé vos pas exacts parce qu'ils me semblaient redondants. Je veux dire, SHParseDisplayName suivi d'un GetDisplayNameOf semblent tous deux se rapporter à la même chose - le 'nom d'affichage' qui doit être fourni à la première fonction a priori (donc doit être déjà connu - pas mon cas). Merci! – kellogs

+0

Vous avez raison que SHGetFileInfo peut faire la même chose, j'utilise généralement les interfaces COM sous-jacentes et j'ai donc oublié cela. La fonction SHParseDisplayName est un peu un abus de langage car ce qu'il analyse réellement est un "nom d'analyse" - voir les documents sur IShellFolder :: GetDisplayNameOf pour la distinction (en particulier, l'indicateur SHGDN_FORPARSING). –