Einzelnen Beitrag anzeigen

Bumbi

Registriert seit: 11. Mär 2008
4 Beiträge
 
#1

Icon via SHGetFileInfo und GUID unter Vista ermitteln

  Alt 1. Jun 2008, 12:14
Huhu :)
Ich würde gerne die Icons von "besonderen" Windows-Verzeichnissen benutzen (Systemsteuerung, Netzwerkverbindungen, Papierkorb etc). Bis XP klappt das auch wunderbar mit SHGetFileInfo, nur unter Vista gibts dann 'ne 0 als Icon-Handle. Die GUID's dieser Verzeichnisse bleiben auch die gleichen (über Registry geprüft).
Bisher habe Ich dafür eine erweiterte Funktion von Sunlight7 benutzt:
Delphi-Quellcode:
const
   BuSpecialFile_WorkStation = '::{20D04FE0-3AEA-1069-A2D8-08002B30309D}';
   BuSpecialFile_Network = '::{208D2C60-3AEA-1069-A2D7-08002B30309D}';
   BuSpecialFile_NetworkConnections = '::{7007ACC7-3202-11D1-AAD2-00805FC1270E}';
   BuSpecialFile_Search = '::{1f4de370-d627-11d1-ba4f-00a0c91eedba}';
   BuSpecialFile_RecycleBin = '::{645FF040-5081-101B-9F08-00AA002F954E}';
   BuSpecialFile_PrinterAndFax = '::{2227A280-3AEA-1069-A2DE-08002B30309D}';
   BuSpecialFile_Explorer = '::{450D8FBA-AD25-11D0-98A8-0800361B1103}';
   BuSpecialFile_ScheduledTasks = '::{D6277990-4C6A-11CF-8D87-00AA0060F5BF}';
   BuSpecialFile_SearchResults = '::{e17d4fc0-5564-11d1-83f2-00a0c90dc849}';

   BuSpecialFile_SystemControl = '::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\::{21EC2020-3AEA-1069-A2DD-08002B30309D}';
   BuSpecialFile_SystemControl_Print = '::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\::{21EC2020-3AEA-1069-A2DD-08002B30309D}\::{2227A280-3AEA-1069-A2DE-08002B30309D}';
   BuSpecialFile_SystemControl_Tasks = '::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\::{21EC2020-3AEA-1069-A2DD-08002B30309D}\::{D6277990-4C6A-11CF-8D87-00AA0060F5BF}';
   BuSpecialFile_SystemControl_Network = '::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\::{21EC2020-3AEA-1069-A2DD-08002B30309D}\::{7007ACC7-3202-11D1-AAD2-00805FC1270E}';
   BuSpecialFile_SystemControl_ScannerAndCamera = '::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\::{21EC2020-3AEA-1069-A2DD-08002B30309D}\::{E211B736-43FD-11D1-9EFB-0000F8757FCD}';

function BuGetFileIcon(const Name:String;const Large:Boolean=false;Opened:Boolean=false;Selected:Boolean=false;Overlayed:Boolean=false;LinkOverlay:Boolean=false):HIcon;
var
  FileInfo: TSHFileInfo;
  Flags: Integer;
begin
  ZeroMemory(@FileInfo, SizeOf(FileInfo));
  Flags := SHGFI_ICON;
  if Opened then
    Flags := Flags or SHGFI_OPENICON;
  if Selected then
    Flags := Flags or SHGFI_SELECTED;
  if Overlayed then
    Flags := Flags or SHGFI_ADDOVERLAYS;
  if LinkOverlay then
    Flags := Flags or SHGFI_LINKOVERLAY;
  if Large then
    Flags := Flags or SHGFI_LARGEICON
  else
    Flags := Flags or SHGFI_SMALLICON;
  SHGetFileInfo(PChar(Name), 0, FileInfo, SizeOf(FileInfo), Flags);
  Result := FileInfo.hIcon;
end;
Danke, Bumbi
Thiemo
  Mit Zitat antworten Zitat