ber diesen Code lese ich die Datei aus auf die eine Verknpfung zeigt. (variable link ist dabei die verknpfung selbst und in der variable buff steht nach aufruf die datei auf die die Verknpfung 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 Verknpfungen aus dem Windows XP Startmen Pfad auslese, dann zeigen die Verknpfungen auf die Festplatte D, obwohl Sie eigentlich auf Laufwerk E zeigen mssten. 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 ߧ܃YTT
Z `SOQ A PO :i +00 /E:\ B 1 4/7 PROGRA~1 * ニ4x4/7 P r o g r a m m e N 1 4Oq MSNGAM~1 6 ニ4Oq46 M S N G a m i n g Z o n e < 1 4Pq Windows & ニ4Oq46 W i n d o w s F 2 Q - ` bckgzm.exe , ニ4Pq4O; 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 /!8O&|~,
Q@ /!8O&|~,
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?