Entwickler-Ecke

Dateizugriff - Ordnerhintergrund mit desktop.ini festlegen


Bergmann89 - Di 01.01.08 21:53
Titel: Ordnerhintergrund mit desktop.ini festlegen
HI,

ich hab jetzt rausgefunden, das man in der Desktop.ini von den einzellenen Ordnern einen Hintergrund für
den Ordner festlegen kann. Jetzt hab ich mir n Prog geschrieben, was die Desktop.ini editiert bzw. neu
schreibt, damit ich in den Ordnern Hintergrundbilder hab. Aber das wird nur in manchen Ordnern übernommen,
kann sein das ich da noch was anderes festlegen muss?!
Wenn jemand bescheid weiß, kann er mir dann bitte helfen, ich zermürb mir schin n ganzen tag den Kopf^^

MfG & Thx Bergmann.


Moderiert von user profile iconjasocul: Topic aus Windows API verschoben am Di 01.01.2008 um 22:24
Moderiert von user profile iconNarses: Topic aus Off Topic verschoben am Do 03.01.2008 um 12:49


DrRzf - Di 01.01.08 22:57

nur Spezielle Ordner woran du scheiterst ?
SystemOrdner oder sowas ?

EDIT:
guck mal da. ist das selbe projekt, villeicht kanst du dich ja mit dem author kurzschliessen.
http://www.delphi-forum.de/viewtopic.php?t=78310&highlight=desktop+ini


Bergmann89 - Mi 02.01.08 21:29

HI...
Ne, sind irgendwelche Ordner, die nich im zusammenhang mit
Windows stehen, kann auch n neuen ordner erstellen,mit dem
das dann nich geht. Aber wenn ich dann auf Eigenschaften
--> Anpassen --> Sysbol ändern klicke und ein beliebiges
Sysmbol auswähle, dann geht der hintergrund, sprich die
Desktop.ini wird dann erkannt. Also muss er ja irgendwas
mit dem ordmner gemacht haben! Naja ich wer mir ma den
Link angucken, THX


Fabian E. - Mi 02.01.08 23:04

Hast du den ordner in einen sytemordner umgewandelt?

wenn nicht dann geht das nicht...

gruß


Bergmann89 - Do 03.01.08 05:05

HI,
wenn ich dem Ordner n neues Icon geb, dann wird das doch kein Systemodner, oder?!
Weil wenn das Symbol einmal geändert wurde, dann geht das!

MfG Bergmann.


Yogu - Do 03.01.08 12:39

user profile iconBergmann89 hat folgendes geschrieben:
wenn ich dem Ordner n neues Icon geb, dann wird das doch kein Systemodner, oder?!
Da haste Recht, deswegen musst du ja den Ordner in einen Systemordner umwandeln, weil das nicht automatisch passiert.

user profile iconBergmann89 hat folgendes geschrieben:
Weil wenn das Symbol einmal geändert wurde, dann geht das!
Wenn du das Symbol einmal mit dem System-Dialog geänder hast, ist der Ordner ja ein Systemordner. Also kannst du auch die desktop.ini-Datei verändern, und das Symbol ändert sich.


DaKirsche - Do 03.01.08 12:51

Hey Bergmann89,
mal den betreffenden Abschnitt aus meinem Source:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
//Prozedur: Desktop.ini anlegen --> Änderungen speichern
procedure TForm1.SpeedButton4Click(Sender: TObject);
var
  tmpINI: TIniFile;
begin
if DirectoryExists(sUsedDirectory) then begin

tmpINI:= TIniFile.Create(sUsedDirectory+'Desktop.ini');
try
  with tmpINI do begin
    if s_NewIconFile<>'' then begin
      WriteString('.ShellClassInfo','IconFile',s_NewIconFile);
      WriteInteger('.ShellClassInfo','IconIndex',IconIndex);
    end;
    if Edit2.Text<>'' then
      WriteString('.ShellClassInfo','InfoTip',Edit2.Text);

    //WriteInteger('.ShellClassInfo','ConfirmFileOp',0);
    WriteString('ExtShellFolderViews','Default','{BE098140-A513-11D0-A3A4-00C04FD706EC}');
    if s_NewBackground<>'' then begin
      WriteString('{BE098140-A513-11D0-A3A4-00C04FD706EC}','IconArea_Image',s_NewBackground);
    end;
    WriteInteger('{BE098140-A513-11D0-A3A4-00C04FD706EC}','Attributes',1);
    if ColStr<>'' then
      WriteString('{BE098140-A513-11D0-A3A4-00C04FD706EC}','IconArea_Text',ColStr);
  end;
finally
tmpINI.UpdateFile;
    if Length(PChar(Edit1.text + 'Desktop.ini')) > 3 then
    begin
      SetFileAttributes(PChar(Copy( PChar(sUsedDirectory + 'Desktop.ini'), 1,LastChar(sUsedDirectory + 'Desktop.ini''\')-1)), FILE_ATTRIBUTE_SYSTEM);
  end;
  tmpINI.Free;
  SetFileAttributes(PChar(sUsedDirectory + 'Desktop.ini'),FILE_ATTRIBUTE_HIDDEN);

end;
if FileExists(sUsedDirectory+'Desktop.ini'then
  ShowMessageDlgEx('Der Speichervorgang war erfolgreich!','Speichern erfolgreich',101,MB_OK)
else
  ShowMessageDlgEx('Speichern war leider nicht erfolgreich!'+sLineBreak+'Bitte versuchen Sie es noch einmal!','Speichern fehlgeschlagen',101,MB_OK);
end
else
ShowMessageDlgEx('Das angegebene Verzeichnis existiert nicht!','ungültiges Verzeichnis',101,mb_ok);
end;


Du musst die INI-File zu einem Systemfile machen, damit das übernomen wird.

MFG
DaKirsche


Bergmann89 - Sa 05.01.08 16:10

HI,

habs hinbekommen, nur noch eine Frage, warum überprüfst du
ob der Pfad länger als 3 zeichen ist, allein "desktop.ini"
hat schon mehr als 3 Zeichen! also ist die Aussage immer war!?

MfG & Thx Bergmann.


Yogu - So 06.01.08 13:03

Er will damit überprüfen, ob sein Delphi noch funktioniert :mrgreen:

Ne, im Ernst, das würde mich allerdings auch mal interessieren! Oder setzt PChar bei dir manchmal aus!?


Silas - So 06.01.08 13:11

Soweit ich das versteh, will er damit überprüfen, ob es sich um einen Ordner und nicht um ein Laufwerk handelt ("C:\" oder "C:" wären damit ausgeschlossen). 'desktop.ini' muss natürlich aus der Abfrage raus.


DaKirsche - So 06.01.08 15:14

Oh... :gruebel: Naja...was das soll weiss ich auch im Moment nicht...wie gut, dass es Leute gibt, die sich den Quelltext angucken....

Werde das mal Revue passieren lassen und mal überlegen, wozu die Abfrage da war^^
Aber das mit den Laufwerken klingt schon ziemlich sinnvoll :nixweiss:

Naja...danke für den Hinweis...ich grübel dannmal los :gruebel: :autsch:
MFG
DaKirsche


36779 - Mo 25.11.13 22:31

Hallo,

... fast 6 Jahre später

ich habe gerade das Problem versucht nur mit Boardmitteln über die Konsole zu lösen, bekomme die Attribute aber nicht so gesetzt. hat da jemand eine Idee? Die Attribute vom Verzeichnis werden nicht gesetzt und die Ini darin meldet: Systemdatei/versteckte Datei wird nicht zurück gesetzt.

Den Code habe ich auch gerade gefunden bei http://edn.embarcadero.com/article/27508 von 2002, die Abfrage >3 Zeichen ist nur um Root-Verzeichnisse auszuschließen.

Grüße

edit: habs hinbekommen in der Konsole für alle Unterordner: for /d %%a in (e:\dir\*) do attrib +r "%%a"
# /r statt /d: rekursiv alle Unterebenen