So, damit ich den Code nicht verliere, kommt der gleich mal in die CodeLibrary 8)
Ihr kennt bestimmt alle den Bilder-Ordner, Favoriten-Ordner und andere, welche sich im Explorer gesondert darstellen. Dieser Code zeigt lediglich, wie man das Icon ändern kann und einen Info-Tipp anzeigt. Es ist kein Beispiel für eine andere Dateiansicht, dazu wird die Datei
folder.htt gebraucht, und das habe ich noch nicht getan.
Im Verzeichnis, welches sich gesondert darstellen soll, muss ein Datei
desktop.ini enthalten sein. Diese sollte die Attribute
faHidden und
faSysFile haben. Der Aufbau ist denkbar einfach.
Code:
[.ShellClassInfo]
IconFile=folder.ico
IconIndex=0
InfoTip=Mein schöner Folder.
Hier wird die Datei
folder.ico fürs Icon genutzt. Da nur der Dateiname angegeben wurde, wird die Datei auch im entsprechenden Verzeichnis erwartet. Auch hier sollten die Attribute analog zu denen der
desktop.ini gesetzt sein.
Damit der Windows-Explorer die
desktop.ini auch lädt, muss dieses dem System mitgeteilt werden. Dazu gibt es die Funktion
PathMakeSystemFolder, welche durch Delphi nicht bereitgestellt wird und daher separat importiert werden muss. Verfügbar ist die ab dem IE 4.0.
Delphi-Quellcode:
function PathMakeSystemFolder(pszPath: LPSTR): BOOL; stdcall; external
'shlwapi.dll' name 'PathMakeSystemFolderA';
Windows bietet für diese Funktion keine Gegenfunktion
, deshalb muss man das durch das korrigieren der Verzeichnisattribute von Hand erledigen.
Die folgende Funktion ermöglicht es, diese erweiterte Darstellung an- und auszuschalten. Sie erwartet als ersten das Verzeichnis, dessen Attribute angepasst werden sollen und als zweiten Parameter
True für die spezielle Ansincht, ansonsten
False.
Delphi-Quellcode:
procedure SetDesktopIni(Path: String; ShowSpecialSettings: Boolean);
var
pPath: array[0..MAX_PATH] of Char;
begin
if AnsiLastChar(Path)^ = '\' then
SetLength(Path, Pred(Length(Path)));
StrPCopy(pPath, Path);
if ShowSpecialSettings then
begin
PathMakeSystemFolder(pPath);
end else begin
SetFileAttributes(pPath, GetFileAttributes(pPath) and (
not (faSysFile or faReadOnly)));
end;
end;
...
...