![]() |
Icon via SHGetFileInfo und GUID unter Vista ermitteln
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 ![]()
Delphi-Quellcode:
Danke, Bumbi
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; |
Re: Icon via SHGetFileInfo und GUID unter Vista ermitteln
Wofür stehen denn die doppelten Doppelpunkte
unter XP bzw. unter Vista DEINER Meinung nach? |
Re: Icon via SHGetFileInfo und GUID unter Vista ermitteln
Ich hatte angenommen, um anzugeben, dass es sich nicht um ein Laufwerk handelt. Liege Ich damit falsch?
|
Re: Icon via SHGetFileInfo und GUID unter Vista ermitteln
Zitat:
Unter Vista brauchst Du aber etwas andere Rechte für die Registry. Reine Leserechte z.B.? |
Re: Icon via SHGetFileInfo und GUID unter Vista ermitteln
Habe wohl vergessen, zu schreiben, dass es mit normalen Verzeichnissen etc funktioniert, wie es soll.
Da es mit den GUIDs auch nicht funktioniert, wenn Ich es als Administrator ausführe, denke Ich, kann ich Berechtigungsprobleme ausschließen. Dass man unter Vista etwas anderes als die Doppelpunkte verwenden muss, könnte Ich mir auch vorstellen, nur finde Ich da über Google etc keine Erklärung für. --Bumbi |
Re: Icon via SHGetFileInfo und GUID unter Vista ermitteln
In einer Function werden wohl die doppelten Doppelpunkte durch irgendwas anderes ersetzt, oder?
Beim Starten Deines Programms muß also als erstes überprüft werden, ob Dein Programmm unter XP oder Vista läuft. Je nach dem muß die Function (für die doppelten Doppelpunkte) anders reagieren. Denke ich mir mal so... Edith sagt "Denken unter Windows ist Glückssache". Wo sie Recht hat, hat sie Recht :-( Ein XP-Admin hat viel mehr Rechte als ein Vista-Admin - in den Windows-Ordnern... |
Re: Icon via SHGetFileInfo und GUID unter Vista ermitteln
Bleibt nur noch die Frage, was Ich sonst vorne dran setze :wall:
--Bumbi |
Re: Icon via SHGetFileInfo und GUID unter Vista ermitteln
Moin Bumbi,
schau Dir doch mal das Beispiel für SHGetFileInfo im PSDK (oder MSDN) an. Dort werden nicht die GUIDs verwendet, sondern es wird, mit Hilfe von SHGetFolderLocation und dem CSIDL_*-Wert (z.B. CSIDL_BITBUCKET) ein PIDL für das Objekt geholt, und damit dann SHGetFileInfo aufgerufen. Vielleicht funktioniert dieser Weg ja auch unter Vista. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:30 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz