Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Dateiicon ermitteln schlägt fehl (https://www.delphipraxis.net/109883-dateiicon-ermitteln-schlaegt-fehl.html)

Mazel 9. Mär 2008 15:40


Dateiicon ermitteln schlägt fehl
 
Hallo,

normal kann und habe ich Dateiicons immer so auslesen können:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
 SHFileInfo: TSHFileInfo;

begin
  SHGetFileInfo(PChar('C:\WINDOWS\explorer.exe'), 0, SHFileInfo, SizeOf(SHFileInfo), SHGFI_ICON or SHGFI_SMALLICON);
  Image1.Picture.Icon.Handle := SHFileInfo.hIcon;
end;
Ich habe die Funktion aus einem anderen Programm, herausgenommen und in eine neue Anwendung gesteckt. Jetzt habe ich das Problem, dass Dateien mit der Endung *.msc nicht das eigentliche Icon liefern sondern immer das Icon für eine nicht verknüpfte Datei. In der alten Anwendung funktioniert dies aber. Beispiel: 'C:\WINDOWS\system32\ciadv.msc'

Weis jemand warum das so ist?

Jens Schumann 9. Mär 2008 16:57

Re: Dateiicon ermitteln schlägt fehl
 
Hallo,
versuche es mal damit.
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_USEFILEATTRIBUTES or SHGFI_ICON or SHGFI_SMALLICON) <> 0) then
  try
    Icon.Handle := CopyIcon(SHFileInfo.hIcon);
  finally
    DestroyIcon(SHFileInfo.hIcon);
  end;
end;

Mazel 10. Mär 2008 15:20

Re: Dateiicon ermitteln schlägt fehl
 
Hallo Jens,

ich habe deine Prozedur einfach jetzt so übernommen, doch leider auch hier das selbe Problem. Es wird nicht das richtige Dateiicon zurückgegeben. Ich verstehe nicht voran das liegen soll. Wie gesagt, in der alten Anwendung, von der ich nur noch ein paar Codereste habe, habe ich die eine Prozedur genommen und in die neue Anwendung gesetzt. Bei allen Dateien geht es, bis auf die *.msc.

Mazel 11. Mär 2008 19:28

Re: Dateiicon ermitteln schlägt fehl
 
Keiner eine Idee woran das liegen könnte?

Kann jemand eventuell einen der beiden Codes testen oder in ein kleines Programm setzen und mir zum Test übergeben?

Würde schon gern den Grund erfahren wollen, warum die Icons von *.msc Dateien nicht angezeigt werden.

toms 11. Mär 2008 19:49

Re: Dateiicon ermitteln schlägt fehl
 
Hallo, du musst noch CoInitialize aufrufen dann wird das richtige Icon extrahiert.

Delphi-Quellcode:
initialization
  CoInitialize(nil);

finalization
  CoUnInitialize;

Mazel 12. Mär 2008 16:09

Re: Dateiicon ermitteln schlägt fehl
 
Hi,

wie ich gerade mitbekommen habe, war die Unit ActiveX nicht mit eingebunden, an die habe ich gar nicht mehr gedacht. Bei beiden Prozeduren wird sie aber nicht benötigt, aber CoCInitialize; und CoUnInitialize; sind dort wohl deklariert. Diese beiden Funktionen habe ich aber in der alten Anwendung nicht gebraucht aber ActiveX war eingebunden.

Irgendwie versteh ich das nicht.


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