AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi SHGetFileInfo und 'lnk-files'
Thema durchsuchen
Ansicht
Themen-Optionen

SHGetFileInfo und 'lnk-files'

Offene Frage von "Daxon"
Ein Thema von xtrnrfe · begonnen am 16. Dez 2006 · letzter Beitrag vom 6. Nov 2009
Antwort Antwort
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#1

Re: SHGetFileInfo und 'lnk-files'

  Alt 16. Dez 2006, 23:53
Bei lnk Verknüpfungen wirst Du wohl das Ziel der Verknüpfung (die Datei, auf die die Verknüpfung verweist) auslesen müssen und von dieser dann das Icon nehmen.
Wie das geht, findest Du alles über die Suche

[Nachtrag]
Da fällt mir grad ein, es geht auch einfacher:
Da das Icon der lnk ja nicht unbedingt das der Datei, auf die die Verknüpfung verweist, sein muss,
kann man auch den Pfad zum Icon und den IconIndex aus der Verknüpfung direkt auslesen.

Diese Funktion liest eine Verknüpfung komplett aus, was IconPath und IconIndex sind sollte wohl klar sein
Du kannst diese Funktion auf Deine Bedürfnisse anpassen und das was Du nicht brauchst weglassen.
Beachte: Die Funktion liefert False, falls die lnk-Datei nicht existiert oder keine gültige lnk-Datei ist.
Delphi-Quellcode:
function ReadLnkFile(const LnkFileName: String; { out Path, Arguments, WorkingDirectory, Description: String; out HotKey: Word; out ShowCmd: Integer; } out IconPath: String; out IconIndex: Integer): Boolean;
var
  Path: String; // <--- das muss dann noch dazu
  ShellLink: IShellLink;
  PersistFile: IPersistFile;
  FileInfo: TWin32FindData;
begin
  Result:=False;
  if SUCCEEDED(CoCreateInstance(CLSID_ShellLink,nil,CLSCTX_INPROC_SERVER,IShellLink,ShellLink)) then
  begin
    PersistFile:=ShellLink as IPersistFile;
    if SUCCEEDED(PersistFile.Load(StringToOleStr(LnkFileName),STGM_READ)) then
    with ShellLink do
    begin
      SetLength(Path,MAX_PATH+1);
      if SUCCEEDED(GetPath(PChar(Path),MAX_PATH,FileInfo,SLR_ANY_MATCH)) then
      begin
        Path:=PChar(Path);
        Result:=True;
      { SetLength(Arguments,MAX_PATH+1);
        GetArguments(PChar(Arguments),MAX_PATH);
        Arguments:=PChar(Arguments);
        SetLength(WorkingDirectory,MAX_PATH+1);
        GetWorkingDirectory(PChar(WorkingDirectory),MAX_PATH);
        WorkingDirectory:=PChar(WorkingDirectory);
        SetLength(Description,MAX_PATH+1);
        GetDescription(PChar(Description),MAX_PATH);
        Description:=PChar(Description);
        GetHotkey(HotKey);
        GetShowCmd(ShowCmd); }

        SetLength(IconPath,MAX_PATH+1);
        GetIconLocation(PChar(IconPath),MAX_PATH,IconIndex);
        IconPath:=PChar(IconPath);
        if IconPath='then
          IconPath:=Path;
      end
    { else
        Path:=''; }

    end;
  end;
end;
Evtl. musst Du noch diese Units einbinden, damit es funktioniert:
ShlObj, ComObj, ActiveX

//Edit:
Den Teil den Du weglassen kannst, hab ich einfach mal auskommentiert.
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  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 01:58 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