Page 1 sur 1

Changer l'icone d'un raccourci

Publié : mar. 10/oct./2006 16:14
par Kwai chang caine
Bonjour à tous

J'ai créé un raccourci grace à la procedure

Code : Tout sélectionner

 CreateShellLink(Path$, Link$, Argument$, Description$, WorkingDirectory$, ShowCommand.l, HotKey.l, IconFile$, IconIndexInFile.l) 
J'ai 2 questions :

1/ Est il possible de choisir une icone "image.ico" avec cette procedure, au lieu d'etre obligé de fouiner dans une DLL

2/ Quelqu'un saurait il comment changer (par le code) l'icone d'un raccourci

Je vous souhaite une bonne journée

Publié : mar. 10/oct./2006 16:48
par Dorian
Pour le 1), il me semble que tu peux indiquer un fichier ico dans IconFile$.

Pas sûr mais bon sa semble logique.

Ensuite pour le 2), je sais pas. Il éxiste un moyen barbare de récupérer les infos du raccourci et d'en créer un nouveau avec l'icône désirée et les infos récupérées ^^.

J'avais prévenu que c'était barbare :lol:

Publié : mar. 10/oct./2006 18:31
par Droopy
Voila un code de je sais plus qui te renvoie le liens vers lequel pointe le raccourcis.
En le modifiant tu pourrais retrouver tous les éléments du raccourcis / en regénérer un nouveau avec tes paramètres ( nouvel icone ou autre )

Code : Tout sélectionner

Procedure.s ShortcutTarget(ShortcutFile$) 
  Result$ = "" 
  
  CoInitialize_(0) 
  If CoCreateInstance_(?CLSID_ShellLink, 0, 1,?IID_IShellLink, @ShellLink.IShellLinkA) = #S_OK 
    
    If ShellLink\QueryInterface(?IID_IPersistFile, @LinkFile.IPersistFile) = #S_OK 
      
      *buffer = AllocateMemory(1000) 
      If *buffer 
        
        MultiByteToWideChar_(#CP_ACP, 0, @ShortcutFile$, -1, *buffer, 1000) 
        
        If LinkFile\Load(*buffer, 0) = #S_OK 
          
          If ShellLink\Resolve(0, 1) = #S_OK 
            
            RtlZeroMemory_(*buffer, 1000) 
            ShellLink\GetPath(*buffer, 1000, 0, 0) 
            Result$ = PeekS(*buffer)              
            
          EndIf 
          
        EndIf 
        
        FreeMemory(*buffer) 
      EndIf 
      
      LinkFile\Release() 
    EndIf 
    
    ShellLink\Release()  
  EndIf 
  
  CoUninitialize_() 
  
  ProcedureReturn Result$ 
  
  DataSection 
  CLSID_ShellLink: 
  ; 00021401-0000-0000-C000-000000000046 
  Data.l $00021401 
  Data.w $0000,$0000      
  Data.b $C0,$00,$00,$00,$00,$00,$00,$46 
  
  IID_IShellLink: 
  ; DEFINE_SHLGUID(IID_IShellLinkA,         0x000214EEL, 0, 0); 
  ; C000-000000000046 
  Data.l $000214EE 
  Data.w $0000,$0000 
  Data.b $C0,$00,$00,$00,$00,$00,$00,$46 
  
  IID_IPersistFile: 
  ; 0000010b-0000-0000-C000-000000000046 
  Data.l $0000010B 
  Data.w $0000,$0000 
  Data.b $C0,$00,$00,$00,$00,$00,$00,$46 
  EndDataSection 
EndProcedure
Sinon pour la création d'un raccourcis / choix de l'icone --> Dans la Droopy Lib il y a la fonction CreateShortcut ( Le code source est fourni avec la Lib ) :wink:

Publié : mer. 11/oct./2006 5:26
par Kwai chang caine
Merci à tous les 2 de votre réponse

@Dorian

1/ J'ai pourtant éssayé de mettre un chemin complet de l'icone et cela ne marchait pas, je reessayerais aujourd'hui, je m'y suis peut etre mal pris à la premiere...

2/ Tout le bleme pour moi est justement de récupérer les données du raccourci (même en barbare, c'est souvent le language préférés de mes codes de débutant :P ), j'avais trouvé la cible mais le reste .......ya pas grand chose sur les raccourcis dans les forums et pourtant on les utilises tout le temps, si ça c'est pas un paradoxe... 8O

@Droopy

1/ Je te remercie beaucoup de ton code, je l'avais trouvé dans mes recherches avant de faire ce POST, mais il ne retournait que le fichier pointé comme tu me l'a dit.

La croix que je porte, c'est que je suis débutant et je reverais de le modifier si j'en comprenais une ligne (à part procedure et endprocedure :lol: :lol: ).
Si tu pouvais m'indiquer quelle ligne tu modifierais, ça me serais d'un grand secour.

2/ Apparement la droopy lib est devenu incontournable, d'apres ce que je lis sur le forum français et anglais, mais je suis passé en v4, j'ai trouvé aussi une droopy lib (non officielle) en v4. Peut on lui faire confiance ???

Encore merci de votre aide.
Bonne journée

Publié : mer. 11/oct./2006 8:00
par Droopy
Ce n'est pas moi qui l'ai modifié pour la v4.
J'ai détecté pas mal de bug lié à la compilation avec tailbite.
C'est pour cela que je reste en 3.94

Publié : mer. 11/oct./2006 8:38
par Kwai chang caine
@Droopy

C'est ce qui me semblais ....bon tanpis, j'attendrais la droopy v4 pour l'utiliser.

J'ai été obligé bien malgrés moi de passer à la v4 pour une tonne de raisons.
Maintenant c'est la galere entre les codes v3.94 qu'on trouve sur le net et les miens, il faut les deux IDE en parallele :

http://purebasic.forum-gratuit.com/viewtopic.php?t=5650

C'est la rançon du progrés, on peux lui pardonner ça, ce language est tellement top.

@Dorian

Pour la question tu avais raison, il suffit de mettre le chemin complet du *.ico pour qu'il le prenne en compte.
Je sais ou j'avais merdé, j'avais pas mis 0 dans index icone et la ça marche pas.

Encore merci à vous deux de votre aide précieuse.
Je vous souhaite une tres bonne journée.