Bug dans TOpenDialog : ofNoDereferenceLinks sans effet.
cs_fadiese
Messages postés15Date d'inscriptionvendredi 10 janvier 2003StatutMembreDernière intervention 9 novembre 2009
-
29 juin 2007 à 16:03
cs_fadiese
Messages postés15Date d'inscriptionvendredi 10 janvier 2003StatutMembreDernière intervention 9 novembre 2009
-
30 juin 2007 à 10:44
Bonjour à tous,
Mon besoin est de récupérer au moyen d'un TOpenDialog (filtré sur *.lnk), le fichier visé par le raccourci afin de l'utiliser via un ShellExecute.
Donc, si j'ai bien saisi, indiquer le flag ofNoDereferenceLinks dans un TOpenDialog force la boîte à renvoyer le nom du raccourci et non le nom du fichier/dossier auquel le raccourci fait reférence.
Mais quel que soit l'état de ce flag, la boîte renvoie systématiquement le bidule.lnk
Bizarrement, la chose fontionnait correctement il y a quelques jours, j'ai vérifié la version de commdlg32.dll, cherché de partout sur le net, et rien, aucune piste...
Ps : j'ai même reécrit mon code pour n'utiliser que les API, mais mêmes résultats.
Help !!
fa
A voir également:
Bug dans TOpenDialog : ofNoDereferenceLinks sans effet.
japee
Messages postés1727Date d'inscriptionvendredi 27 décembre 2002StatutModérateurDernière intervention 6 novembre 20218 29 juin 2007 à 21:25
Salut,
Je constate la même chose (sous D4 pro) : que je mette ou pas [ofNoDereferenceLinks] à true ne change rien au comportement du TOpenDialog qui retourne toujours le path du raccourci en FileName. A se demander si cette option a un jour fonctionné ???
Moi à ta place, je ne me prendrais pas la tête avec ça. J'utiliserais une fonction retournant le chemin contenue dans le fichier *.link.
japee
Messages postés1727Date d'inscriptionvendredi 27 décembre 2002StatutModérateurDernière intervention 6 novembre 20218 29 juin 2007 à 22:55
Tiens, essaye ça.
Je crée une TOpenDialog à chaque fois (et je le détruis), car pour une raison qui m'échappe, InitialDir se positionne dans le path du raccourci et ne peut jamais être réinitialisé...
Donc :
uses ShlObj, ComObj, ActiveX; // Dialogs
function GetPathFromLink(const Link: string): string;
var
AnObj : IUnknown;
ShLink : IShellLink;
PFile : IPersistFile;
pfd : TWin32FindData;
begin
Result := Link;
AnObj := CreateComObject(CLSID_ShellLink);
ShLink := AnObj as IShellLink;
PFile := AnObj as IPersistFile;
if PFile.Load(Pointer(WideString(Result)), OF_READ) <> S_OK then
Exit;
ShLink.GetPath(PChar(Result), MAX_PATH, pfd, 0);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
with TOpenDialog.Create(Self) do
try
Filter := 'Raccourcis (*.lnk)|*.lnk';
InitialDir := 'D:\Documents and Settings\UserName\SendTo\';
if Execute then
Label1.Caption := GetPathFromLink(FileName);
finally
Free;
end;
end;
cs_fadiese
Messages postés15Date d'inscriptionvendredi 10 janvier 2003StatutMembreDernière intervention 9 novembre 2009 30 juin 2007 à 10:44
Merci,
j'utilise moi aussi par défaut la méthode avec IShellLink, mais j'espérais réduire encore un peu la taille de mon log en utilisant le moins d'uses possible....
M'enfin, c'est quand même bizarre que cette library ne fonctionne pas correctement.