Hmm...
Also meine Funktion liefert mir nicht die Länge sondern ein HRESULT zurück und das ist immer 0...
Hier mal mein kompletter Code, es geht um das Auslesen von Verknüpfungen (*.lnk):
So funktiert's einwandfrei, danke für eure Hilfe!
Delphi-Quellcode:
procedure ReadLink(const FileName: String;
out Path, Arguments, Directory, Description, IconPath: String;
out IconIndex, ShowCmd: Integer;
out HotKey: Word);
var
ShellLink: IShellLink;
PersistFile: IPersistFile;
FileInfo: TWin32FindData;
begin
OleCheck(CoCreateInstance(CLSID_ShellLink, nil, CLSCTX_INPROC_SERVER, IShellLink, ShellLink));
PersistFile:=ShellLink as IPersistFile;
PersistFile.Load(StringToOleStr(FileName), STGM_READ);
SetLength(Path, MAX_PATH+1);
SetLength(Arguments, MAX_PATH+1);
SetLength(Directory, MAX_PATH+1);
SetLength(Description, MAX_PATH+1);
SetLength(IconPath, MAX_PATH+1);
with ShellLink do
begin
if GetPath(PChar(Path), MAX_PATH, FileInfo, SLR_ANY_MATCH)<>0 then
ShowMessage('Verknüpfung existiert nicht.');
GetArguments(PChar(Arguments), MAX_PATH);
GetWorkingDirectory(PChar(Directory), MAX_PATH);
GetDescription(PChar(Description), MAX_PATH);
GetIconLocation(PChar(IconPath), MAX_PATH, IconIndex);
GetShowCmd(ShowCmd);
GetHotKey(HotKey);
end;
Path := PChar(Path);
Arguments := PChar(Arguments);
Directory := PChar(Directory);
Description := PChar(Description);
IconPath := PChar(IconPath);
end;
//Edit:
Prozedur etwas übersichtlicher gemacht