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

C++Builder Discussion :

Recuperer l'icone d'un fichier


Sujet :

C++Builder

  1. #1
    Nouveau membre du Club
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2002
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2002
    Messages : 35
    Points : 34
    Points
    34
    Par défaut Recuperer l'icone d'un fichier
    Salut,
    Pour recuperer l'icone d'un fichier sur un disque local j'utilise ce code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SHFILEINFO info;
    DWORD result = SHGetFileInfo("c:\\fichier.exe",
                                   0,
                                   &info,
                                   sizeof(info),
                                   SHGFI_SMALLICON |
                                   SHGFI_SHELLICONSIZE |
                                   SHGFI_SYSICONINDEX);
    Je voudrais savoir comment je peu faire pour recuperer l'icone d'un fichier situer sur internet et que a la place de "c:\\fichier.exe" je puisse avoir "www.site.com/fichier.exe"

    Merci

  2. #2
    Membre régulier
    Avatar de bebeours
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 103
    Points : 123
    Points
    123
    Par défaut
    Bonjour,

    Tu seras tout d'abord obligé de télécharger complètement sur ton disque le fichier.exe pour pouvoir extraire l'icone. Regarde les composants Indy pour télécharger un fichier via HTTP.

  3. #3
    Nouveau membre du Club
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2002
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2002
    Messages : 35
    Points : 34
    Points
    34
    Par défaut
    Merci mais en fait je veux connaitre l'icone sans telecharger le fichier un peu comme ftp expert que affiche l'icone acoté des nom des fichier presente sur le serveur

  4. #4
    Membre régulier
    Avatar de bebeours
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 103
    Points : 123
    Points
    123
    Par défaut
    Ok, je comprends mieux ce que tu souhaites faire. Tu n'as donc pas besoin de télécharger le fichier, tu dois juste extraire son extension (à partir de son nom, c'est pas trop dur, regarde la fonction ExtractFileExt) et à partir de cette extension tu dois retrouver l'icone qui lui est associée (par ton OS local, c'est à dire Windows). Il doit exister une fonction de l'api windows pour réaliser ceci mais je ne la connais pas.

  5. #5
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Salut

    tu as
    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
    ExtractAssociatedIcon
    The ExtractAssociatedIcon function returns a handle to an indexed icon found in a file or an icon found in an associated executable file. 
     
    HICON ExtractAssociatedIcon(
      HINSTANCE hInst,    // application instance handle
      LPTSTR lpIconPath,  // file name
      LPWORD lpiIcon      // icon index
    );
    Parameters
    hInst 
    [in] Specifies the instance of the application calling the function. 
    lpIconPath 
    [in] Pointer to a string that specifies the full path and file name of the file that contains the icon. The function extracts the icon handle from that file, or from an executable file associated with that file. 
    If the icon handle is obtained from an executable file, the function stores the full path and file name of that executable in the string pointed to by lpIconPath. 
     
    lpiIcon 
    [in] Pointer to a WORD that specifies the index of the icon whose handle is to be obtained. 
    If the icon handle is obtained from an executable file, the function stores the icon's identifier in the WORD pointed to by lpiIcon. 
     
    Return Values
    If the function succeeds, the return value is an icon handle. If the icon is extracted from an associated executable file, the function stores the full path and file name of the executable file in the string pointed to by lpIconPath, and stores the icon's identifier in the WORD pointed to by lpiIcon. 
     
    If the function fails, the return value is NULL. 
     
    Remarks
    The ExtractAssociatedIcon function first looks for the indexed icon in the file specified by lpIconPath. If the function cannot obtain the icon handle from that file, and the file has an associated executable file, it looks in that executable file for an icon. Associations with executable files are based on file name extensions, are stored in the per-user part of the registry, and can be defined using File Manager's Associate command.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  6. #6
    Nouveau membre du Club
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2002
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2002
    Messages : 35
    Points : 34
    Points
    34
    Par défaut
    Salut,
    Ca a l'air sympa comme fonction mais ta pas un bout de code pour comment elle marche car j'ai pas reussi

    Merci

  7. #7
    Nouveau membre du Club
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2002
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2002
    Messages : 35
    Points : 34
    Points
    34
    Par défaut
    Voila le code qui me provoque une erreur de violation a chaque fois que le fichier existe ou pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    HICON Icon;
    LPWORD IconIndex;
     
    Icon = ExtractAssociatedIcon(Application->Handle,"C:\\d.txt.exe",IconIndex);
     
    DrawIcon(Form1->Canvas->Handle, 10, 10, Icon);

  8. #8
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Salut

    J'ai testé celà avec BCB 3, il marche bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    	WORD pIcon = 0;
    	char buffer[MAX_PATH];
    	// strcpy(buffer, "C:\\Program Files\\I_View\\I_VIEW32.EXE");
        strcpy(buffer, "C:\\_NavCClt.Log");
    	HICON hicon = ExtractAssociatedIcon(m_hinst, buffer, &pIcon);
    	if (hicon == NULL)
    	{
    		MessageBox(NULL, "Raté", "Icon", MB_OK);
    		return;
    	}
        DrawIcon(Form1->Canvas->Handle, 10, 10, hicon);
    	DestroyIcon(hicon);
    m_hinst est récupéré par le WinMain.
    Je suppose qu'il faut détruire hicon, mais ce n'est pas précisé dans la doc .
    N'oublie pas de tester les retours de fonctions, c'est pour ça que ça plante !
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  9. #9
    Nouveau membre du Club
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2002
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2002
    Messages : 35
    Points : 34
    Points
    34
    Par défaut
    J'ai placer ce code dans un evenement et ca compile que si je change m_hinst par Application->Handle sinon il me dit qu'il me dit symbole non definie

    voila le code que j'ai utiliser mais ca m'ffiche pas d'icone
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
       WORD pIcon = 0;
       char buffer[MAX_PATH];
       strcpy(buffer, "C:\\NavCClt.Log");
       HICON hicon = ExtractAssociatedIcon(Application->Handle, buffer, &pIcon);
       if (hicon == NULL)
       {
          MessageBox(NULL, "Raté", "Icon", MB_OK);
          return;
       }
        DrawIcon(Form1->Canvas->Handle, 10, 10, hicon);
       DestroyIcon(hicon);
    Merci

  10. #10
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Il faut absolument un handle d'instance sinon ça ne marche pas !
    Voilà le code du WinMain :
    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
    HINSTANCE m_hinst;
    //---------------------------------------------------------------------------
    WINAPI WinMain(HINSTANCE hinst, HINSTANCE, LPSTR, int)
    {
        try
        {
            m_hinst = hinst;
            Application->Initialize();
            Application->CreateForm(__classid(TForm1), &Form1);
            Application->Run();
        }
        catch (Exception &exception)
        {
            Application->ShowException(&exception);
        }
        return 0;
    }
    Dans ton unit1.Cpp tu déclares
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    extern HINSTANCE m_hinst;
    As-tu un fichier "C:\\NavCClt.Log" sur ton ordi ?
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  11. #11
    Nouveau membre du Club
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2002
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2002
    Messages : 35
    Points : 34
    Points
    34
    Par défaut
    ca compile parfaitement maintenant mais l'icone ne s'affiche pas que je crée ou pas le fichier. Normalement cette fonction doit renvoyer l'icone associer au type de fichier que le fichier existe ou pas. Si tu as une idée


    Merci

  12. #12
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Je ne sais pas, lorsque je donne un nom bidon, la fonction affiche une icône par défaut, lorsque le fichier existe, j'ai la bonne icône. Celà vient peut-être de ta base de registres.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  13. #13
    CGi
    CGi est déconnecté
    Expert éminent
    Avatar de CGi
    Inscrit en
    Mars 2002
    Messages
    1 030
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 1 030
    Points : 8 202
    Points
    8 202
    Par défaut
    BCB fourni un handle d'instance : HInstance
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    //...
    HICON hicon = ExtractAssociatedIcon(HInstance, buffer, &pIcon); 
    //...
    Site : http://chgi.developpez.com

    Pourquoi faire simple quand on peut faire compliqué ? (Jacques Rouxel)

  14. #14
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Tu le dis toi-même CGi
    Pourquoi faire simple quand on peut faire compliqué ?
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

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

Discussions similaires

  1. Recuperer icone d'un fichier
    Par Astik21 dans le forum Windows Forms
    Réponses: 7
    Dernier message: 08/08/2014, 19h38
  2. Recuperer l'icone d'un fichier
    Par draco951 dans le forum C#
    Réponses: 4
    Dernier message: 27/08/2012, 07h58
  3. Recuperer l'index d'une icone dans un fichier exe
    Par sylvaine dans le forum Imagerie
    Réponses: 3
    Dernier message: 10/11/2008, 01h02
  4. [FICHIERS]recuperer l'icone
    Par tyrann dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 19/09/2005, 19h38
  5. Recuperer le nom d'un fichier
    Par elvivo dans le forum C
    Réponses: 5
    Dernier message: 27/12/2002, 15h44

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