Das wäre der Code (etwas abgewandelt), den ich zum Auslesen von Verknüpfungen verwende.
Eigentlich kann es nur an diesem liegen.
Der Prozedur übergibst Du den vollständigen Dateinamen einer Verknüpfung und postest mir dann, was in der ShowMessage angezeigt wird:
Delphi-Quellcode:
uses
{...} ActiveX, ShlObj, ComObj;
procedure NewItemLnk(
const FileName:
String);
var s, t:
String; ShellLink: IShellLink; PersistFile: IPersistFile; FileInfo: TWin32FindData;
begin
t := '
Datei nicht vorhanden oder sonstiger Fehler';
if SUCCEEDED(CoCreateInstance(CLSID_ShellLink,
nil,CLSCTX_INPROC_SERVER,IShellLink,ShellLink))
then
begin
PersistFile:=ShellLink
as IPersistFile;
PersistFile.Load(StringToOleStr(FileName),STGM_READ);
SetLength(s,MAX_PATH+1);
if ShellLink.GetPath(PChar(s),MAX_PATH,FileInfo,SLR_ANY_MATCH)=0
then
begin
t := '
Name:' +#9+ ExtractFileName(ChangeFileExt(FileName,'
')) +#13#10;
t := t + '
Datei:' +#9+ PChar(s) +#13#10;
ShellLink.GetArguments(PChar(s),MAX_PATH);
t := t + '
Parameter:' +#9+ PChar(s) +#13#10;
//Befehl setzt sich aus Datei und Parameter zusammen, ist zum Testen aber nicht relevant
t := t + '
Ort:' +#9+ ExcludeTrailingPathDelimiter(ExtractFilePath(FileName)) +#13#10;
//auch Beschreibung und die Fenstergröße tun hier nichts zur Sache
end;
end;
ShowMessage(t);
end;