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

Delphi Discussion :

Recupérer l'icône d'une application cachée


Sujet :

Delphi

  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur développement en retraite
    Inscrit en
    Juin 2002
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement en retraite
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2002
    Messages : 401
    Points : 300
    Points
    300
    Par défaut Recupérer l'icône d'une application cachée
    Bonjour,

    Mon application doit lancer une application qui se cache je ne sais trop où. C'est une application installée à partir du Microsoft Store.
    J'arrive à lancer cette application via un fichier lien :
    C:\Users\nom d'utilisateur\AppData\Local\Microsoft\WindowsApps\AffinityPhoto2.exe
    Je voudrais récupérer l'icône de cette application, que je lance par un shelExecute.
    Avant (je savais où était l'executable) je la récupérais comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if SHGetFileInfo(PWideChar(MonAppliExterne),
                  FILE_ATTRIBUTE_NORMAL, Info, SizeOf(Info),
                  SHGFI_ICON or SHGFI_LARGEICON or SHGFI_SYSICONINDEX or SHGFI_USEFILEATTRIBUTES)
    Malheureusement ce fichier lien ne contient rien et cette fonction ne me renvoie pas l'icône recherchée !

    Comment récupérer cette icône ?
    Merci

  2. #2
    Membre actif
    Homme Profil pro
    libre
    Inscrit en
    Juin 2019
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : libre

    Informations forums :
    Inscription : Juin 2019
    Messages : 205
    Points : 292
    Points
    292
    Par défaut
    Tu peux la récupérer via le handle de l'application

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    var
     Ic:TIcon;
     hd,hwnd:integer;
    begin
      Ic:=TIcon.Create;
      hwnd:=$0C00D1E; // handle de la form de l'application
      hd := SendMessage(hwnd ,WM_GETICON,1,0);
      if hd = 0 then
         hd := GetClassLong(hwnd, GCL_HICON);
      Ic.Handle:=hd;
      Canvas.Draw(0,0,Ic);
      Ic.Free;
    end;

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur développement en retraite
    Inscrit en
    Juin 2002
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement en retraite
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2002
    Messages : 401
    Points : 300
    Points
    300
    Par défaut
    Merci wheel pour ta réponse.

    Dans ton exemple, il faut le handle de l'application donc elle doit être lancée et ouverte.
    Je veux récupérer l'icône de l'application sans la démarrer pour proposer un bouton avec l'icône pour que l'utilisateur la choisisse parmi d'autre et l'ouvre.

  4. #4
    Membre actif
    Homme Profil pro
    libre
    Inscrit en
    Juin 2019
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : libre

    Informations forums :
    Inscription : Juin 2019
    Messages : 205
    Points : 292
    Points
    292
    Par défaut
    Je veux récupérer l'icône de l'application sans la démarrer pour proposer un bouton avec l'icône pour que l'utilisateur la choisisse parmi d'autre et l'ouvre.
    Ça ne change pas grande chose une fois récupérée tu pourrais l'enregistrer dans un fichier (TIcon.SaveToFile) et que vous pouvez l'utiliser ultérieurement et la mettre dans une ImageList qui va lui octroyer un handle ..

    essaie de la récupérer via l'image index de explorer

    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
     
    uses ShellAPI,  CommCtrl;
     
    ...
    var
     Info : TSHFileInfo;
     Ic:TIcon;
     ImagesList:THandle;
    begin
    AFileName :='C:\Users\nom d'utilisateur\AppData\Local\Microsoft\WindowsApps\AffinityPhoto2.exe ';
      ImagesList := SHGetFileInfo('C:\', 0, Info, SizeOf(Info), SHGFI_SYSICONINDEX or SHGFI_LARGEICON);
     
      SHGetFileInfo(PChar(AFileName),
                  FILE_ATTRIBUTE_NORMAL, Info, SizeOf(Info),
                  SHGFI_ICON or SHGFI_LARGEICON or SHGFI_SYSICONINDEX or SHGFI_USEFILEATTRIBUTES);
     
      Ic:=TIcon.Create;
     
      Ic.Handle:= ImageList_GetIcon(ImagesList , Info.iIcon,0);
     
      Canvas.Draw(0,0,Ic);
     
      Ic.Free;
    end;
    si l'application est lancée à partir d'un raccourci tu passes son adresse a cette fonction pour trouver l’icône.

  5. #5
    Membre averti
    Homme Profil pro
    Ingénieur développement en retraite
    Inscrit en
    Juin 2002
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement en retraite
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2002
    Messages : 401
    Points : 300
    Points
    300
    Par défaut
    Effectivement je peux toujours l'enregistrer une fois que j'y ai eu accès, si j'y ai accès... Je vais essayer.

    Par contre ShGetFileInfo ne fonctionne pas car le fichier qui permet de lancer l'appli est un fichier de taille nulle qui n'est qu'un lien vers le vrai executable caché dans la sandbox de windows d'après le peu d'infos que j'ai trouvé.
    C'est une appli installée via le MicrosoftStore.
    Si quelqu’un sait comment la retrouver et si on peut y avoir accès directement ?

Discussions similaires

  1. Comment changer l'icône d'une application linux
    Par maxdoukou dans le forum GLUT
    Réponses: 3
    Dernier message: 11/05/2012, 18h49
  2. ajouter des icônes dans une application
    Par d'Oursse dans le forum Windows
    Réponses: 5
    Dernier message: 30/10/2010, 09h29
  3. Changer l'icône d'une application
    Par fred_sell dans le forum Windows
    Réponses: 6
    Dernier message: 29/07/2009, 22h32
  4. Réponses: 5
    Dernier message: 01/10/2007, 23h27
  5. Ajouter une icône d'une application dans le barre des tâches
    Par Lorponos dans le forum Autres Logiciels
    Réponses: 11
    Dernier message: 13/05/2006, 19h41

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