![]() |
Link einer Verknpfung auslesen
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:
Das funktioniert eigentlich alles wunderbar. Nur folgendes Problem:
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; 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:
eigentlich ist hier nix mit %SystemRoot% oder hnliches? Warum ist der Pfad auf diese Datei aber trotzdem
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 D:\Programme\MSN Gaming Zone\Windows\bckgzm.exe wenn ich ihn unter Windows 2000 ber den oben genannten Code auslese? |
Re: Link einer Verknpfung auslesen
ich hab auch schon probiert SLGP_UNCPRIORITY durch SLGP_RAWPATH zu ersetzen. ohne erfolg.
ich hab mal in windows 2000 mir das Dokumente und Einstellungen - AllUsers - Startmen angeschaut. Wenn ich mir die Links anschau, dann verweisen wirklich alle komplett auf D:\..., wenn ich Sie mir unter Windows XP anschau, die Links, dann verweisen diese korrekterweise auf E:\... woran kann das liegen? |
Re: Link einer Verknpfung auslesen
Ich wrde dir empfehlen, die Funktion ShellLinkResolve aus der JCL (Unit JclShell) zu verwenden.
Diese Funktion ist bestimmt besser als deine, da dutzendfach getestet. ![]() Kleiner Auszug aus dem Sourcecode
Delphi-Quellcode:
PersistFile := ShellLink as IPersistFile;
// PersistFile.Load fails if the filename is not fully qualified // AHA: hast du das beachtet ? FullPath := ExpandFileName(FileName); MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, PChar(FullPath), -1, LinkName, MAX_PATH); Result := PersistFile.Load(LinkName, STGM_READ); |
Re: Link einer Verknpfung auslesen
ja das hab ich auch schon ausprobiert. auch mit anderen fertigen funktionen von swissdelphicenter oder so funktionierts nicht.
ich glaub es liegt eher direkt an windows. weil windows 2000 nmlich direkt den falschen link anzeigt, wenn ich ihn mir anschau. jedoch unter windows xp wird er korrekt dargestellt. woran kann das liegen? |
Re: Link einer Verknpfung auslesen
Zitat:
Evtl. findet sich auch etwas bei MS in der Knowledge Base. |
Re: Link einer Verknpfung auslesen
hmm naja service packs usw... sind alle installiert.
wei nicht, irgendwie kommt mir das so vor, als wrde das boot-laufwerk in den link eingefgt. und je nachdem von welchem laufwerk ich starte, wird dieser laufwerksbuchstabe als basis fr den link genommen. nur ich hab mir ja den link mal angeschaut und da ist eigentlich der laufwerksbuchstabe fest eincodiert und nicht irgendwie ber ein %variable% oder so... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:56 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz