Über diesen Code lese ich die Datei aus auf die eine Verknüpfung zeigt. (variable link ist dabei die verknüpfung selbst und in der variable buff steht nach aufruf die datei auf die die Verknüpfung zeigt.
Delphi-Quellcode:
var
MyObject: IUnknown;
MySLink: IShellLink;
MyPFile: IPersistFile;
FileInfo: TWin32FINDDATA;
WidePath: array[0..MAX_PATH] of WideChar;
Buff: array[0..MAX_PATH] of Char;
begin
MyObject := CreateComObject(CLSID_ShellLink);
MyPFile := MyObject as IPersistFile;
MySLink := MyObject as IShellLink;
StringToWideChar(link, WidePath, SizeOf(WidePath));
MyPFile.Load(WidePath, STGM_READ);
MySLink.GetPath(Buff, Max_PATH, FileInfo, SLGP_UNCPRIORITY);
end;
Das funktioniert eigentlich alles wunderbar. Nur folgendes Problem:
Ich hab 2 Betriebssysteme installiert (Windows 2000 auf Laufwerk D und XP auf Laufwerk E).
Wenn ich jetzt unter Windows 2000 bestimmte Verknüpfungen aus dem Windows XP Startmenü Pfad auslese, dann zeigen die Verknüpfungen auf die Festplatte D, obwohl Sie eigentlich auf Laufwerk E zeigen müssten. Ich hab mir mal den Inhalt einer lnk datei (die sich im Windows XP Startmenü befindet) unter windows 2000 anzeigen lassen.
Delphi-Quellcode:
L À FŸ Øߧ܃YÆTT
ÀÝZÆ `½™SOÂQ¦ A PàOÐ ê:i¢Ø +00 /E:\ B 1 ˆ4/7 PROGRA~1 * ニ4¥xˆ4/7 P r o g r a m m e N 1 †4Oq MSNGAM~1 6 ニ4Oqˆ4Ð6 M S N G a m i n g Z o n e < 1 †4Pq Windows & ニ4Oqˆ4Ð6 W i n d o w s F 2 Q¦ - ` bckgzm.exe , ニ4Pqˆ4O; b c k g z m . e x e h 7 g
o Windows XP E:\Programme\MSN Gaming Zone\Windows\bckgzm.exe 7 @ E : \ P r o g r a m m e \ M S N G a m i n g Z o n e \ W i n d o w s \ b c k g r e s . d l l , - 1 2 1 3 ; . . \ . . \ . . \ . . \ . . \ P r o g r a m m e \ M S N G a m i n g Z o n e \ W i n d o w s \ b c k g z m . e x e % H O M E D R I V E % % H O M E P A T H % ` *X laptop /þ!‰8ûO«&‘Ì«|×£™~ÅÚ¨,
Q@ /þ!‰8ûO«&‘Ì«|×£™~ÅÚ¨,
Q@ *& o
eigentlich ist hier nix mit %SystemRoot% oder ähnliches? Warum ist der Pfad auf diese Datei aber trotzdem
D:\Programme\MSN Gaming Zone\Windows\bckgzm.exe wenn ich ihn unter Windows 2000 über den oben genannten Code auslese?