AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Problem beim Auslesen von .lnk-Dateien
Thema durchsuchen
Ansicht
Themen-Optionen

Problem beim Auslesen von .lnk-Dateien

Ein Thema von Edlmann · begonnen am 19. Nov 2010 · letzter Beitrag vom 19. Nov 2010
Antwort Antwort
Edlmann

Registriert seit: 19. Nov 2010
212 Beiträge
 
#1

Problem beim Auslesen von .lnk-Dateien

  Alt 19. Nov 2010, 11:46
Guten Nachmittag liebe DP, ich versuche zurzeit, mir meine eigene Schnellstartleiste
zu erstellen, und hierfür muss ich die Icons von .lnk Dateien auslesen.
Hierzu benutze ich eine Funktion, die ich hier
http://www.delphipraxis.net/55412-ic...b-*-lnk-3.html
geschrieben von Martin K gefunden habe, doch ich habe auch schon verschieden andere ausprobiert.
Bei allen habe ich dasselbe Problem: Das Icon des Programms wird erfolgreich ausgelesen, jedoch von
dem Standardmäßigem "Dateityp nicht zugeordnet-Icon" überlagert wird. Anbei ein Screenshot, der deutlich macht
was ich meine. Nun wollt ich fragen ob einer von euch eine Lösung dazu weiß.
Danke im Vorraus,
Edlmann

Hier nochmal die Funktion:

Delphi-Quellcode:
function FileIcon(FileName: String): TIcon;
var FileInfo: TSHFileInfo; AIcon: TIcon;
begin
  FillChar(FileInfo,SizeOf(FileInfo),#0);
  SHGetFileInfo(PChar(FileName),0,FileInfo,SizeOf(FileInfo),SHGFI_ICON or SHGFI_LARGEICON);
  AIcon:=TIcon.Create;
  Try
    AIcon.Handle:=FileInfo.HIcon;
    AIcon.Transparent:=True;
  Except end;
  Result:=AIcon;
end;
Miniaturansicht angehängter Grafiken
icons-messed-up.jpg  
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Problem beim Auslesen von .lnk-Dateien

  Alt 19. Nov 2010, 11:52
Bist Du sicher, dass das an der Funktion liegt? Oder lädst Du die Dinger evtl. in Images, in denen bereits das "Nicht zugeordnet"-Icon geladen wurde?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Edlmann

Registriert seit: 19. Nov 2010
212 Beiträge
 
#3

AW: Problem beim Auslesen von .lnk-Dateien

  Alt 19. Nov 2010, 11:59
Aufrufen tue ich die Funktion wie folgt:

Delphi-Quellcode:
for x := 0 to 7 do
  for y := 0 to 7 do
    if x*y <= ListBox1.Items.Count then
      Image1.Canvas.Draw(x*34, y*34, FileIcon(ListBox1.Items.Strings[x*y]));
(Die .lnk Pfade stehen in der ListBox1)

Und bei normalen Dateitypen funktioniert die Funktion auch astrein, nur bei .lnk Dateien passiert dies.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.136 Beiträge
 
Delphi 12 Athens
 
#4

AW: Problem beim Auslesen von .lnk-Dateien

  Alt 19. Nov 2010, 12:04
Erstmal was zur Speicherverwaltung:
(abgesehn davon, daß es eher unklug ist, ein Objekt so zurückzugeben, da man das Prinzip "der Verursacher/Ersteller gibt's auf gleicher Ebene wieder frei" nicht einhalten kann)
Bei einer Exception würde das Object in AIcon als Speicherleck zurückbleiben.
Delphi-Quellcode:
AIcon := TIcon.Create;
try
  AIcon.Handle := FileInfo.HIcon;
  AIcon.Transparent := True;
except
  AIcon.Free; // bei Fehler freigeben
end;
Result := AIcon;
Delphi-Quellcode:
function FileIcon(FileName: String): TIcon;
var FileInfo: TSHFileInfo;
begin
  FillChar(FileInfo, SizeOf(FileInfo), #0);
  if SHGetFileInfo(PChar(FileName), 0, FileInfo, SizeOf(FileInfo), SHGFI_ICON) <> 0 then
    RaiseLastOSError;
  Result := TIcon.Create;
  try
    Result.Handle := FileInfo.HIcon;
    Result.Transparent := True;
  except
    Result.Free;
  end;
end;
(SHGFI_LARGEICON könnte man auch weglassen ... das ist eh 0)

So, zum Problem.
Hmmm, notfalls wirst du wohl in die LNK-Dateien reinsehn müssen.
(irgendwo gab's in der DP auch 'nen Code zum Auslesen)
Da schauen ob ein Icon zugeordnet ist.
- wenn ja, dann dieses nehmen
- wenn nein, dann über deine Funktion das Icon der Zieldatei besorgen
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Problem beim Auslesen von .lnk-Dateien

  Alt 19. Nov 2010, 12:24
Der erste Punkt lag mir auch schon auf der Seele. Ich persönlich würde aus der Funktion ja eine Prozedur machen, die das zu befüllende Icon entgegennimmt.
Delphi-Quellcode:
procedure GetFileIcon(const FileName: String; aIcon: TIcon);
var FileInfo: TSHFileInfo;
begin
  Assert(Assigned(aIcon));
  FillChar(FileInfo, SizeOf(FileInfo), #0);
  if SHGetFileInfo(PChar(FileName), 0, FileInfo, SizeOf(FileInfo), SHGFI_ICON) <> 0 then
    RaiseLastOSError;
  aIcon.Handle := FileInfo.HIcon;
  aIcon.Transparent := True;
end;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Edlmann

Registriert seit: 19. Nov 2010
212 Beiträge
 
#6

AW: Problem beim Auslesen von .lnk-Dateien

  Alt 19. Nov 2010, 12:34
Okey, dann ist es jetzt wenigstens stilistisch korrekt

Aber zurück zu meinem Problem. Im Forum steht, dass die Prozedur funktioniert und
auch korrekte Ergebnisse liefert. Kann es daran liegen dass ich Windows 7 (64-bit)
benutze? Vielleicht werden die .lnk Dateien da ja anders verarbeitet?

Eine Prozedur zum Nachverfolgen der Icons habe ich hier auch schon gefunden, diese sind
jedoch ungleich komplizierter, und von daher wollt ich erstmal nachfragen ob es nicht
auch auf einfache weise geht

Danke schonmal,
Edlmann
  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 20:01 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