Entwickler-Ecke
Dateizugriff - Symbol von Verknüpfung aus Registry lesen
Harry M. - Mo 29.08.05 10:28
Titel: Symbol von Verknüpfung aus Registry lesen
Wie genau kann ich aus HKEY_CLASSES_ROOT den Phat zur Exe finden mit dem der Dateityp verknüpft ist. So möchte ich erreichen das mir in einem Image das Icon angezeigt wird wenn ich die Extesion angebe.
In HKEY_CLASSES_ROOT steht irgendwie soviel :oops: Wie ich das Symbol der Exe bekomme und aus der Registry lese weiß ich.
LigH - Mo 29.08.05 17:18
Normalerweise fängt man bei der Dateiendung an - in diesem Zweig ist zwar meist nicht schon das Icon zu finden, dafür aber die Klasse, in der das Icon steht.
Konkretes Beispiel:
Icon für *.pas-Dateien:
1) HKCR\.pas\ => BDS.PasFile (von der Dateiendung zur allgemeinen Klasse)
2) HKCR\BDS.PasFile\DefaultIcon\ => "E:\Programme\Borland\BDS\3.0\Bin\delphicoreide90.bpl",4
bl@ckcomb - Mo 29.08.05 17:31
Wenn du das Dateisymbol von bestimmten Dateien auslesen willst, geht das mit folgender Methode am schnellsten:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| var FileInfo: SHFileInfo; begin SHGetFileInfo(PChar(), 0, FileInfo, SizeOf(FileInfo), SHGFI_ICON); Image1.Picture.Icon.Handle := FileInfo.hIcon; end; |
Ansonsten kannst du mit dieser Funktion das Symbol auslesen, wenn nur die Dateinamenserweiterung bekannt ist:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47:
| function GetIconFromExt(const Ext: String; SmallIcon: Boolean): hIcon; var Reg: TRegistry; s: String; sl: TStrings; i, c: Integer; icon_large, icon_small: hIcon; begin Result := 0; Reg := TRegistry.Create(KEY_READ); Reg.RootKey := HKEY_CLASSES_ROOT; If Reg.OpenKey(Ext, False) Then begin s := Reg.ReadString(''); Reg.CloseKey; If (s <> '') and Reg.OpenKey(s+'\DefaultIcon', False) Then begin sl := TStringList.Create; sl.CommaText := Reg.ReadString(''); If sl.Count > 0 Then begin If sl.Count > 1 Then begin Val(sl[1], i, c); If c <> 0 Then i := 1; end else i := 1; ExtractIconEx(PChar(sl[0]), i, icon_large, icon_small, 1); If SmallIcon Then begin DestroyIcon(icon_large); Result := icon_small; end else begin DestroyIcon(icon_small); Result := icon_large; end; end; sl.Free; end; end; Reg.Free; end; |
Beispiel:
Delphi-Quelltext
1:
| Image1.Picture.Icon.Handle := GetIconFromExt('.txt', False); |
Moderiert von
Gausi: Code- durch Delphi-Tags ersetzt.
Harry M. - Mo 29.08.05 17:38
Jo. Thx. Ich gucke mir das heute abend an.
Delete - Mo 29.08.05 20:13
Das Symbol von bekannten Datei
endungen lässt sich auch mit
SHGetFileInfo ermitteln. Als Attribut wird einfach
FILE_ATTRIBUTE_NORMAL benutzt:
Delphi-Quelltext
1:
| SHGetFileInfo('.txt',FILE_ATTRIBUTE_NORMAL,...); |
usw.
bl@ckcomb - Di 30.08.05 12:24
MathiasSimmack hat folgendes geschrieben: |
Das Symbol von bekannten Dateiendungen lässt sich auch mit SHGetFileInfo ermitteln. Als Attribut wird einfach FILE_ATTRIBUTE_NORMAL benutzt:
Delphi-Quelltext 1:
| SHGetFileInfo('.txt',FILE_ATTRIBUTE_NORMAL,...); |
usw. |
Stimmt, ist mir auch neu :wink:
Kleine Ergänzung:
Quelltext
1:
| SHGetFileInfo('.txt', FILE_ATTRIBUTE_NORMAL, FileInfo, SizeOf(FileInfo), SHGFI_ICON or SHGFI_USEFILEATTRIBUTES); |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!