Autor Beitrag
Harry M.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 754

Win 2000, XP
D2005
BeitragVerfasst: Mo 29.08.05 10:28 
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.

_________________
Gruß Harry
Et spes me per dies sine te ducat et amor me ferat, si dolor spem tollit.
LigH
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 239

Win98SE, Win2000SP4
D7
BeitragVerfasst: 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
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Mo 29.08.05 17:31 
Wenn du das Dateisymbol von bestimmten Dateien auslesen willst, geht das mit folgender Methode am schnellsten:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
// uses ShellApi
var
  FileInfo: SHFileInfo;
begin
  SHGetFileInfo(PChar({Dateiname}), 0, FileInfo, SizeOf(FileInfo), SHGFI_ICON);
  // dann z.B.:
  Image1.Picture.Icon.Handle := FileInfo.hIcon;
end;


Ansonsten kannst du mit dieser Funktion das Symbol auslesen, wenn nur die Dateinamenserweiterung bekannt ist:
ausblenden volle Höhe 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:
// uses Registry
function GetIconFromExt(const Ext: String; SmallIcon: Boolean): hIcon; // Dateinamenserweiterung mit "." am Anfang!
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:
ausblenden Delphi-Quelltext
1:
Image1.Picture.Icon.Handle := GetIconFromExt('.txt', False);					


Moderiert von user profile iconGausi: Code- durch Delphi-Tags ersetzt.
Harry M. Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 754

Win 2000, XP
D2005
BeitragVerfasst: Mo 29.08.05 17:38 
Jo. Thx. Ich gucke mir das heute abend an.

_________________
Gruß Harry
Et spes me per dies sine te ducat et amor me ferat, si dolor spem tollit.
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 29.08.05 20:13 
Das Symbol von bekannten Dateiendungen lässt sich auch mit SHGetFileInfo ermitteln. Als Attribut wird einfach FILE_ATTRIBUTE_NORMAL benutzt:
ausblenden Delphi-Quelltext
1:
SHGetFileInfo('.txt',FILE_ATTRIBUTE_NORMAL,...);					

usw.
bl@ckcomb
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Di 30.08.05 12:24 
user profile iconMathiasSimmack hat folgendes geschrieben:
Das Symbol von bekannten Dateiendungen lässt sich auch mit SHGetFileInfo ermitteln. Als Attribut wird einfach FILE_ATTRIBUTE_NORMAL benutzt:
ausblenden Delphi-Quelltext
1:
SHGetFileInfo('.txt',FILE_ATTRIBUTE_NORMAL,...);					

usw.

Stimmt, ist mir auch neu :wink:
Kleine Ergänzung:
ausblenden Quelltext
1:
SHGetFileInfo('.txt', FILE_ATTRIBUTE_NORMAL, FileInfo, SizeOf(FileInfo), SHGFI_ICON or SHGFI_USEFILEATTRIBUTES);