esigvb
Messages postés24Date d'inscriptionmercredi 16 mars 2005StatutMembreDernière intervention25 mars 2009
-
31 mai 2006 à 08:14
korntex5
Messages postés10Date d'inscriptionjeudi 7 août 2003StatutMembreDernière intervention25 mai 2008
-
25 mai 2008 à 10:42
Bonjour,
Je recherche à connaitre la cible d'un raccourci.
Voici comment je fais mon raccourci :
procedure CreerRacourci(Repertoire_du_raccourci, Cible_du_raccourci, Description : string);
var
ShellLink : IShellLink;
begin
If UpperCase(extractFileExt(Cible_du_raccourci)) <> '.LNK' Then Cible_du_raccourci := Cible_du_raccourci+'.lnk';
ShellLink := CreateComObject(CLSID_ShellLink) as IShellLink;
ShellLink.SetDescription(PAnsiChar(Description));
ShellLink.SetPath(PAnsiChar(Repertoire_du_raccourci));
ShellLink.SetShowCmd(SW_SHOW);
(ShellLink as IpersistFile).Save(StringToOleStr(Cible_du_raccourci), true);
end;
Je suppose que pour connaitre le raccourci après, il faut utiliser ShellLink, mais je ne sais pas quoi mettre après.
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 31 mai 2006 à 14:00
Salut,
voici un petit bout de code que j'avais utilisé il y a longtemps déjà
la base du code n'est pas de moi (je l'avais récuperé je ne sais plus ou sur le net) je l'ai juste complété et réduit.
il existe peut être méthode plus courte mais en attendant elle fonctionne (testé Ok sous D4 pro):
Tu mets un Bouton un Label et un Mémo sur une form et tu complètes comme ceci :
if UpperCase(ExtractFileExt(LinkPath)) <> '.LNK'then begin ShowMessage('Erreur: '+LinkPath+' n''est pas unRacourci valide');
exit; // Si ce n'est pas un racourci on quitte
end;
// access to the two interfaces of the object
AnObj : = CreateComObject(CLSID_ShellLink);
ShLink := AnObj as IShellLink;
PFile := AnObj as IPersistFile;
// Load with a WideString filename
WFileName := LinkPath;
PFile.Load(PWChar(WFileName),STGM_READ);
esigvb
Messages postés24Date d'inscriptionmercredi 16 mars 2005StatutMembreDernière intervention25 mars 2009 31 mai 2006 à 15:52
Salut Cirec,
Merci de ta réponse. Ca marche super bien (Delphi 2005), ta méthode donne toutes les informations du raccourci. Je n'avais besoin que de connaitre la cible, alors le code est très cours. Je garde bien ta source de côté...
Ci-dessous, la procédure au minimum pour connaitre la cible du raccourci.
procedure TForm2.Connaitre_la_cible(Chemin_du_raccourci: String);
var
Unknown : IUnknown;
ShellLink : IShellLink;
PersistFile : IPersistFile;
WFileName : WideString;
Cible_du_raccourci : String;
X1 : Array [0..255] Of Char;
Data : TWin32FindData;
begin
if UpperCase(ExtractFileExt(Chemin_du_raccourci)) <> '.LNK' then
begin
ShowMessage('Erreur: '+Chemin_du_raccourci+' n''est pas unRacourci valide');
exit; // Si ce n'est pas un racourci on quitte
end;
// Accéder aux deux interfaces de l'objet
Unknown := CreateComObject(CLSID_ShellLink);
ShellLink := Unknown as IShellLink;
PersistFile := Unknown as IPersistFile;
// Chargement du raccourci
WFileName := Chemin_du_raccourci;
PersistFile.Load(PWChar(WFileName),STGM_READ);
// Récupère le path de la cible
ShellLink.GetPath( @X1,MAX_PATH,Data,SLGP_UNCPRIORITY);
Cible_du_raccourci := StrPas(@X1);
// Affiche le résultat
Label1.Caption:='Cible : '+ Cible_du_raccourci;
end;
Merci encore à toi Cirec, pour ta réponse claire comme d'habitude.
Merci.
korntex5
Messages postés10Date d'inscriptionjeudi 7 août 2003StatutMembreDernière intervention25 mai 2008 25 mai 2008 à 10:42
Je remet en forme
procedure TForm2.Connaitre_la_cible(Chemin_du_raccourci: String);
var Unknown : IUnknown;
ShellLink : IShellLink;
PersistFile : IPersistFile;
WFileName : WideString;
Cible_du_raccourci : String;
X1 : Array [0..255] Of Char;
Data : TWin32FindData;
begin
if UpperCase(ExtractFileExt(Chemin_du_raccourci)) <> '.LNK' then
begin
ShowMessage('Erreur: '+Chemin_du_raccourci+' n''est pas unRacourci valide');
exit; // Si ce n'est pas un racourci on quitte
end;
// Accéder aux deux interfaces de l'objet
Unknown := CreateComObject(CLSID_ShellLink);
ShellLink := Unknown as IShellLink;
PersistFile := Unknown as IPersistFile;
// Chargement du raccourci
WFileName := Chemin_du_raccourci; PersistFile.Load(PWChar(WFileName),STGM_READ);
// Récupère le path de la cible
ShellLink.GetPath( @X1,MAX_PATH,Data,SLGP_UNCPRIORITY);
Cible_du_raccourci := StrPas(@X1); // Affiche le résultat Label1.
Caption:='Cible : '+ Cible_du_raccourci;
end;