AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Link einer Verknüpfung auslesen
Thema durchsuchen
Ansicht
Themen-Optionen

Link einer Verknüpfung auslesen

Ein Thema von mumu · begonnen am 12. Mai 2006 · letzter Beitrag vom 13. Mai 2006
Antwort Antwort
mumu

Registriert seit: 28. Okt 2003
Ort: Bamberg
519 Beiträge
 
#1

Link einer Verknüpfung auslesen

  Alt 12. Mai 2006, 11:16
Ü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?
  Mit Zitat antworten Zitat
mumu

Registriert seit: 28. Okt 2003
Ort: Bamberg
519 Beiträge
 
#2

Re: Link einer Verknüpfung auslesen

  Alt 12. Mai 2006, 12:40
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?
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#3

Re: Link einer Verknüpfung auslesen

  Alt 12. Mai 2006, 14:28
Ich würde dir empfehlen, die Funktion ShellLinkResolve aus der JCL (Unit JclShell) zu verwenden.
Diese Funktion ist bestimmt besser als deine, da dutzendfach getestet.
http://sourceforge.net/projects/jcl
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);
Andreas
  Mit Zitat antworten Zitat
mumu

Registriert seit: 28. Okt 2003
Ort: Bamberg
519 Beiträge
 
#4

Re: Link einer Verknüpfung auslesen

  Alt 12. Mai 2006, 14:53
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 nämlich direkt den falschen link anzeigt, wenn ich ihn mir anschau. jedoch unter windows xp wird er korrekt dargestellt.

woran kann das liegen?
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#5

Re: Link einer Verknüpfung auslesen

  Alt 12. Mai 2006, 16:44
Zitat von mumu:
ich glaub es liegt eher direkt an windows. weil windows 2000 nämlich direkt den falschen link anzeigt, wenn ich ihn mir anschau. jedoch unter windows xp wird er korrekt dargestellt.
Dann würde ich mal prüfen, ob der aktuellste Servicepack installiert ist und ggf. installieren.
Evtl. findet sich auch etwas bei MS in der Knowledge Base.
Andreas
  Mit Zitat antworten Zitat
mumu

Registriert seit: 28. Okt 2003
Ort: Bamberg
519 Beiträge
 
#6

Re: Link einer Verknüpfung auslesen

  Alt 13. Mai 2006, 12:25
hmm naja service packs usw... sind alle installiert.

weiß nicht, irgendwie kommt mir das so vor, als würde das boot-laufwerk in den link eingefügt. und je nachdem von welchem laufwerk ich starte, wird dieser laufwerksbuchstabe als basis für 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...
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:23 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz