IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

API, COM et SDKs Delphi Discussion :

[WinAPI] Infos extensions fichiers


Sujet :

API, COM et SDKs Delphi

  1. #1
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut [WinAPI] Infos extensions fichiers
    Salut
    je voudrais pouvoir récupérer, d'après une extension de fichier, l'icone associé et aussi le nom que lui donne windows (Ex: pour .mp3 c'est "Winamp Media File") sans passser par la base de registre parce que c'est un peu lourd... Est-ce qu'il existe des fonctions API ou autres qui permettent de faire ça?

    Autre question : Une fois que j'ai récupéré le fichier dans lequel se trouve l'icone, si le fichier est du type "Bidule.dll,%1" (Le premier icone dans la librairie Bidule.dll), comment faut-il s'y prendre pour extraire cet icone et le stocker dans un TBitmap par exemple?

    Merci d'avance

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    685
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 685
    Points : 1 608
    Points
    1 608
    Par défaut
    Sans passer par la base de registre ça me paraît impossible !

    Il y a un article complet ici à ce sujet :
    http://www.latiumsoftware.com/en/pascal/0006.php
    (regarde en particulier la fonction GetAssociatedSmallIcon)

  3. #3
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut
    OK merci

    Et pour l'autre question?
    Est-ce que dans la DLL, directement se trouve un fonction qui renvoie un HBITMAP ou il y a une fonction toute prête qui fait ça?

    Merci d'avance

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 298
    Points : 318
    Points
    318
    Par défaut
    Moi j'utilise un méthode différente (récupérée sur Internet) : Dans un premier temps, je crée une imagelist contenant les icones systèmes, et grâce à la fonction GetExtIconIndex je récupere l'index de l'icone associée à l'extension dans l'imagelist ainsi que le type de fichier.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    // Partie Création de l'image liste
        // Créer une image list avec les icones correspondant aux extensions de fichiers
        Self.SysImage := TImageList.Create(nil);	// Quel AOwner ???
        Self.SysImage.ShareImages := true;
        Self.SysImage.Handle := SHGetFileInfo('', 0, SHFileInfo, SizeOF(SHFileInfo), SHGFI_SYSICONINDEX or SHGFI_SMALLICON);
     
     
    //
    // Récupère l'index de l'icone associée à l'extension ainsi que son type
    //
    // Parametres:
    //
    //
    function GetExtIconIndex(Ext: String; Attributs: DWORD; var TypeFichier :string): Integer;
    var
    	SHFileInfo: TSHFileInfo;
    begin
    	//Il faut le "." avant
       	if Ext[1] <> '.' then
        	Ext := '.' + Ext;
     
    	// En cas d'erreur
        Result := -1;
        TypeFichier := '';
     
        // On récolte les info pour l'extension
    	//http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/functions/shgetfileinfo.asp
        if SHGetFileInfo(PChar(Ext), Attributs, SHFileInfo, SizeOf(TSHFileInfo),
                 SHGFI_SYSICONINDEX or SHGFI_USEFILEATTRIBUTES or SHGFI_TYPENAME) <> 0 then
        begin
            TypeFichier := SHFileInfo.szTypeName; //Quel est le type de fichier
            Result := SHFileInfo.iIcon; //index de l'icone dans l'image list du systeme
    	end;
    end;

  5. #5
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut
    OK merci!!
    la méthode de cpdump fonctionne à merveille

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Tester et récupérer des infos sur fichier distant
    Par cybertj dans le forum Langage
    Réponses: 2
    Dernier message: 17/05/2006, 09h18
  2. récuperer des infos dasn fichier xml
    Par alliance dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 14/02/2006, 16h57
  3. [info]Les fichiers .class
    Par vinzzzz dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 29/03/2005, 00h43
  4. [info] compresser fichier...?
    Par doudine dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 06/01/2005, 13h53
  5. Réponses: 3
    Dernier message: 25/07/2002, 10h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo