Bonjour à tous

J'ai besoin de savoir si un .LNK pointe vers un fichier ou un répertoire. Je veux donc vérifier ce point en lisant le nom du fichier ou répertoire pointé par le lien.

Consulté (notamment) ces adresses :
http://www.developpez.net/forums/d54...nk-raccourcis/

http://www.developpez.net/forums/d34...contenu-d-lnk/

J'ai retenu ce code :
Ds les USUS : ShlObj, ActiveX, ComObj;

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
const
   TAILLE_BUFFER = 1024;
   IID_IPersistFile: TGUID = (D1: $0000010B; D2: $0000; D3: $0000; D4: ($C0, $00, $00, $00, $00, $00, $00, $46));

type
   ArrayChar = array[0..TAILLE_BUFFER] of Char;

Var  // globales
  // POUR LIRE LE F.LNK -------------------------
  PersistFile: IPersistFile;
  FileNameW: array[0..MAX_PATH] of WideChar;
  ShellLink: IShellLink;
  fd: TWin32FindData;
  ProLink: ArrayChar;
  I: Word;
  J: Integer;
  // --------------------------------------------



procedure TForm1.Btn_LireClick(Sender: TObject);
Var
  Nom_F_Lnk : String;
  Lst_Test_Fn : TStringList;

begin

  Nom_F_LNK := 'GLOSSAIRES.lnk';  // Le fichier .LNK est ds le répertoire courant
  Form1.Lab_Aff_F_Lnk.Caption := UpperCase(Nom_F_LNK);

  Lst_Test_Fn := Lire_Infos_F_LNK(Nom_F_LNK);
  Lst_Test_Fn.SaveToFile('Z-RESULTAT.TMP');

end;


Function Lire_Infos_F_LNK(szChemin: String): TStringList;
Var
  Nom_F_Lnk : string;
  Lst_Retour : TStringList;

begin

      Lst_Retour := TStringList.Create;
      CoInitialize(nil);
      try
         OleCheck(CoCreateInstance(CLSID_ShellLink, nil, CLSCTX_INPROC_SERVER, IID_IShellLinkA, ShellLink));
         try
            OleCheck(ShellLink.QueryInterface(IID_IPersistFile, PersistFile));
            try
               MultiByteToWideChar(CP_ACP, 0, @szChemin[1], -1, FileNameW, MAX_PATH);
               OleCheck(PersistFile.Load(FileNameW, STGM_READ));		// C'est là que ça plante
               ShellLink.GetPath(ProLink, Max_Path, fd, SLGP_UNCPRIORITY);
               Lst_Retour.Add(ProLink);
            finally
            end;
         finally
         end;
      finally
         CoUninitialize;
      end;
end;
Plantage avec le message (Erreur 2) "Fichier spécifié introuvable". Pourquoi ?