Verzeichnis Icon zuweisen
Verzeichnis Icon zuweisen
Hallo Leute,
Wie kann man unter Windows den Verzeichnissen (Ordnern) ein Symbol zuweisen?
Kann man sowas auch mit API oder sogar PB intern machen?
Gruß
Scarabol
Wie kann man unter Windows den Verzeichnissen (Ordnern) ein Symbol zuweisen?
Kann man sowas auch mit API oder sogar PB intern machen?
Gruß
Scarabol
Abgeschlossen Projekte:
Schreibmaschine, Bildschirmlupe, Wings3DtoOgreMeshConverter
Watch: PureArea
PB-V: 4
WinXP
Schreibmaschine, Bildschirmlupe, Wings3DtoOgreMeshConverter
Watch: PureArea
PB-V: 4
WinXP
Geht PB-Intern.
Musst in dem Ordner ne Datei erstellen. "Desktop.ini"
und das hier reinschreiben
MfG, TomS
Musst in dem Ordner ne Datei erstellen. "Desktop.ini"
und das hier reinschreiben
Code: Alles auswählen
[.ShellClassInfo]
IconFile=pfad_zu_icon.ico
IconIndex=0
Habs versucht funktioniert aber leider nicht, wieso?
[Edit]
Das Icon stammt zwar von mir hab aber mal ne Desktop.ini aus nem anderen Ordner kopiert, bei dem es funktioniert, aber es funktioniert trotzdem nicht.
Kann es sein das ich die Datei irgendwie Systemintern registrieren muss?
[/Edit]
Code: Alles auswählen
Dir$ = "P:\Purebasic\"
File$ = "P:\Purebasic\PBIcon.ico"
If ReadFile(1, Dir$+"Desktop.ini")
MessageRequester("info", "info")
End
Else
If CreateFile(1, Dir$+"Desktop.ini")
WriteStringN(1, "[.ShellClassInfo]")
WriteStringN(1, "IconFile="+File$)
WriteStringN(1, "IconIndex=0")
CloseFile(1)
End
Else
Debug "Error"
EndIf
EndIf
Das Icon stammt zwar von mir hab aber mal ne Desktop.ini aus nem anderen Ordner kopiert, bei dem es funktioniert, aber es funktioniert trotzdem nicht.
Kann es sein das ich die Datei irgendwie Systemintern registrieren muss?
[/Edit]
Abgeschlossen Projekte:
Schreibmaschine, Bildschirmlupe, Wings3DtoOgreMeshConverter
Watch: PureArea
PB-V: 4
WinXP
Schreibmaschine, Bildschirmlupe, Wings3DtoOgreMeshConverter
Watch: PureArea
PB-V: 4
WinXP
Hallo Scarabol,
du musst dem Verzeichnis, indem die "Desktop.ini" ist, das System-Attribut setzen:
Mfg DerProgger
du musst dem Verzeichnis, indem die "Desktop.ini" ist, das System-Attribut setzen:
Code: Alles auswählen
SetFileAttributes("P:\Purebasic",#PB_FileSystem_System)
Vielen Dank Leute!
Es funktioniert alles und ich hab das ganze mal in ne Procedure gepackt.
Gruß
Scarabol
Es funktioniert alles und ich hab das ganze mal in ne Procedure gepackt.
Code: Alles auswählen
Procedure SetDirectoryIcon(Directory$, Icon$)
; ©2007 by Scarabol
SetFileAttributes(Directory$, #PB_FileSystem_Hidden|#PB_FileSystem_System|#PB_FileSystem_Archive)
File1 = ReadFile(#PB_Any, Directory$+"Desktop.ini")
If File1
FileName$ = GetTemporaryDirectory()+"Temp_Desktop+"+RSet(Str(Random(999)), 3, " ")+".ini"
File2 = CreateFile(#PB_Any, FileName$)
While Eof(File1) = 0
String$ = ReadString(File1)
If FindString(String$, "IconFile", 0)
WriteStringN(File2, "IconFile="+Icon$)
Else
WriteStringN(File2, String$)
EndIf
Wend
CloseFile(File2)
CloseFile(File1)
DeleteFile(Directory$+"Desktop.ini")
RenameFile(FileName$, Directory$+"Desktop.ini")
ProcedureReturn 1
Else
File1 = CreateFile(#PB_Any, Directory$+"Desktop.ini")
If File1
WriteStringN(File1, "[.ShellClassInfo]")
WriteStringN(File1, "IconFile="+Icon$)
WriteStringN(File1, "IconIndex=0")
CloseFile(File1)
Else
ProcedureReturn 0
EndIf
EndIf
EndProcedure
SetDirectoryIcon("P:\Purebasic\", "P:\Purebasic\PBIcon.ico")
Scarabol
Zuletzt geändert von Scarabol am 23.01.2007 15:49, insgesamt 1-mal geändert.
Abgeschlossen Projekte:
Schreibmaschine, Bildschirmlupe, Wings3DtoOgreMeshConverter
Watch: PureArea
PB-V: 4
WinXP
Schreibmaschine, Bildschirmlupe, Wings3DtoOgreMeshConverter
Watch: PureArea
PB-V: 4
WinXP
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
aaah.. cool. danke für den hinweis.DerProgger hat geschrieben:Hallo Scarabol,
du musst dem Verzeichnis, indem die "Desktop.ini" ist, das System-Attribut setzen:Mfg DerProggerCode: Alles auswählen
SetFileAttributes("P:\Purebasic",#PB_FileSystem_System)
..das hatte mir noch gefehlt, um aus einfachen ordnern richtige Bildordner zu machen,
wie der ordner "Eigene Bilder" mit großem vorschaufenster und so.
das gind auch über die Desktop.ini, und funktionierte auch nich überall,
wahrscheinlich weil das system-flag fehlte.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Korrekt ist das aber nicht
Ordner werden nur ReadOnly gesetzt, System kann man dort nicht setzen.
Windows ändert das aber automatisch.
Etwas kürzer:
Hier kriegt die Desktop.ini auch gleich die passenden Attribute verpasst.
Gruß
Thomas

Ordner werden nur ReadOnly gesetzt, System kann man dort nicht setzen.
Windows ändert das aber automatisch.
Etwas kürzer:
Code: Alles auswählen
Procedure SetDirectoryIcon(Dir.s, Icon.s)
SetFileAttributes(Dir, #PB_FileSystem_ReadOnly)
DeleteFile(Dir + "Desktop.ini")
If CreatePreferences(Dir + "Desktop.ini")
PreferenceGroup(".ShellClassInfo")
WritePreferenceString("IconFile", Icon)
WritePreferenceLong("IconIndex", 0)
ClosePreferences()
SetFileAttributes(Dir + "Desktop.ini", #PB_FileSystem_Hidden|#PB_FileSystem_System|#PB_FileSystem_Archive)
EndIf
EndProcedure
Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Kann man ja anpassen mit OpenPreference, wenns nicht klappt create
Aber das Systemflag für Ordner ist verkehrt, ReadOnly ist korrekt

Aber das Systemflag für Ordner ist verkehrt, ReadOnly ist korrekt
Code: Alles auswählen
Procedure SetDirectoryIcon(Dir.s, Icon.s)
SetFileAttributes(Dir, #PB_FileSystem_ReadOnly)
If Not OpenPreferences(Dir + "Desktop.ini")
CreatePreferences(Dir + "Desktop.ini")
EndIf
PreferenceGroup(".ShellClassInfo")
WritePreferenceString("IconFile", Icon)
WritePreferenceLong("IconIndex", 0)
ClosePreferences()
EndProcedure
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

ts-soft hat geschrieben:Aber das Systemflag für Ordner ist verkehrt, ReadOnly ist korrekt
Das ReadOnly-Attribut funktioniert aber auchUse the following procedure to customize a folder's style with Desktop.ini:
* Use PathMakeSystemFolder to make the folder a system folder. You can also make a folder a system folder from the command line by using attrib +s FolderName.
* Create a Desktop.ini file for the folder. You should mark it as hidden and read-only to protect it from being modified.
Quelle: Klick

Mfg DerProgger