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; |
Partager