Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Dateitypen und deren Icon auslesen (Problem) (https://www.delphipraxis.net/118836-dateitypen-und-deren-icon-auslesen-problem.html)

delphinia 15. Aug 2008 22:51


Dateitypen und deren Icon auslesen (Problem)
 
Servus,

eines vorweg, wie ich dateitypen und deren Icons auslese ist mir bekannt ABER
es gibt Dateitypen die NICHT auf normalen Wegen angesprochen werden zb: Normaler weg
.txt -> txtfile
HKEY_CLASSES_ROOT\txtfile\DefaultIcon
Hier steht das Icon so weit so gut!


ABER zum Beispiel das Programm Alcohol 120% macht es anders nur wie?

Das der Eintrag für den Typen CCD
Code:
[HKEY_CLASSES_ROOT\AlcoholImageFile]
@=""
"EditFlags"=dword:00000000

[HKEY_CLASSES_ROOT\AlcoholImageFile\DefaultIcon]
@="%1"

[HKEY_CLASSES_ROOT\AlcoholImageFile\ShellEx]

[HKEY_CLASSES_ROOT\AlcoholImageFile\ShellEx\ContextMenuHandlers]

[HKEY_CLASSES_ROOT\AlcoholImageFile\ShellEx\ContextMenuHandlers\AlcoholShellEx]
@="{32020A01-506E-484D-A2A8-BE3CF17601C3}"

[HKEY_CLASSES_ROOT\AlcoholImageFile\ShellEx\IconHandler]
@="{32020A01-506E-484D-A2A8-BE3CF17601C3}"


Habe herausgefunden mit hilfe des Explorers das eine DLL für die Icons per regsvr32 registriert wurde. Deregistriere ich diese File, kann auch der Explorere das icon zum besagten Typen nicht anzeigen...

Kann mir aber nun jemand erkläre wie das geht?
Wie ich das nutzten kann?

mkinzler 15. Aug 2008 22:54

Re: Dateitypen und deren Icon auslesen (Problem)
 
Es wird eine ShellExtension verwendet

delphinia 15. Aug 2008 23:09

Re: Dateitypen und deren Icon auslesen (Problem)
 
Hmm sowwit wie es heisst war ich auch schon!
Nur wie kann ich ein solches Icon ausgebe in meinem IconChange?


Es geht mit aber nicht um einen EIntrag im Menü des Exploreres sonder um die Icons der Dateitypen die irgendwie damit zusammen hängen!

MathiasSimmack 16. Aug 2008 08:53

Re: Dateitypen und deren Icon auslesen (Problem)
 
Hier im Forum suchenSHGetFileInfo enthält alles, was du benötigst.

extrem 16. Aug 2008 09:12

Re: Dateitypen und deren Icon auslesen (Problem)
 
...Icons für Dateiverknüpfungen herausfinden

delphinia 16. Aug 2008 09:29

Re: Dateitypen und deren Icon auslesen (Problem)
 
NICHT verknüpfungen! Sondern Typen!

delphinia 16. Aug 2008 09:32

Re: Dateitypen und deren Icon auslesen (Problem)
 
Zitat:

Zitat von MathiasSimmack
Hier im Forum suchenSHGetFileInfo enthält alles, was du benötigst.

DAS ist mmir klar, das ich es damit bekommen könnte!
ABer es geht ja auch dann ums ändern des Icons! Oder kann ich dies dann auf normalen Wege tun?

delphinia 16. Aug 2008 10:14

Re: Dateitypen und deren Icon auslesen (Problem)
 
Es geht NICHT mit -> SHGetFileInfo... es wird mir dann KEIN Icon angezeigt bzw das Windows Icon für nicht definierte Typen!
Wenn ich dann im Gegensatz es mit der Endung TXT versuche wird mir das Icon angezeigt

Delphi-Quellcode:
procedure GetAssociatedIconEx(const Filename: string; Icon: TIcon);
var
  SHFileInfo: TSHFileInfo;
begin
  FillChar(SHFileInfo, SizeOf(TSHFileInfo), 0);
  if (SHGetFileInfo(PChar(Filename), FILE_ATTRIBUTE_NORMAL, SHFileInfo, SizeOf(TSHFileInfo), SHGFI_ICON or SHGFI_USEFILEATTRIBUTES) <> 0) then
  try
    Icon.Handle := CopyIcon(SHFileInfo.hIcon);
  finally
    DestroyIcon(SHFileInfo.hIcon);
  end;
end;

// GEHT
procedure TExtMan_form.FlatButton1Click(Sender: TObject);
begin
  GetAssociatedIconEx('Test.txt', Icon.Picture.Icon);
end;

// GEHT NICHT
procedure TExtMan_form.FlatButton2Click(Sender: TObject);
begin
  GetAssociatedIconEx('Test.ccd, Icon.Picture.Icon);
end;

extrem 16. Aug 2008 12:30

Re: Dateitypen und deren Icon auslesen (Problem)
 
Delphi-Quellcode:
uses
  ActiveX;

...

procedure GetAssociatedIconEx(const Filename: string; Icon: TIcon);
var
  SHFileInfo: TSHFileInfo;
begin
  FillChar(SHFileInfo, SizeOf(TSHFileInfo), 0);
  if (SHGetFileInfo(PChar(Filename), FILE_ATTRIBUTE_NORMAL, SHFileInfo, SizeOf(TSHFileInfo), SHGFI_ICON or SHGFI_USEFILEATTRIBUTES) <&gt; 0) then
  try
    Icon.Handle := CopyIcon(SHFileInfo.hIcon);
  finally
    DestroyIcon(SHFileInfo.hIcon);
  end;
end;

procedure TExtMan_form.FlatButton2Click(Sender: TObject);
begin
  GetAssociatedIconEx('Test.ccd', Icon.Picture.Icon);
end;

...

initialization
  CoInitialize(nil);

finalization
  CoUnInitialize;

end.
Versuche es mal mit CoInitialize, dann geht es bei mir wenn man die unit ActiveX mit einbindet.

delphinia 16. Aug 2008 12:39

Re: Dateitypen und deren Icon auslesen (Problem)
 
Jo so geht es tatsächlich!
WAS ist daran nun soo viel besser? Was passiert da nun?

Danke erstmal. So wie verhält es sich mit dem Ändern des Icons? Das geschieht dann auf normalen Wege?
DefaulIcon Eintrag in der Registry?


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:04 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