| |
|
|
- Seite 1 - |
|
Julian Schmidt | Hallo, würd gerne per XProfan das Icon von einen Verzeichnis ändern. Bin leider noch nicht in der Shell32.dll fündig geworden. Und bräuchte Hilfe bei der Umsetzung.
Gruß |
|
|
| |
|
|
| |
|
- Seite 2 - |
|
|
Julian Schmidt | Ok, das scheint zu funktionieren.
Allerdings scheint Windows trotzdem meine Desktop.ini nicht anzunehmen.
Schau mal. [...] Kommen da bei dir die Ordner-Icons nach dem Ausführen. |
|
|
| |
|
|
|
| Richtig, aktualisiert auch bei mir (XP) nicht.
Habe mal RegDump gemacht vor und nach Änderung -
scheint in der Reg sich dadurch nichts zu ändern.
Aber schau mal hier steht was: [...] [...] |
|
|
| |
|
|
|
Julian Schmidt | Klappt immernoch nicht richtig. KompilierenMarkierenSeparierenDef PathMakeSystemFolder(1) !"Shlwapi", "PathMakeSystemFolderA"
Def DateiName(1) SubStr$(@$(1),-1,"\\")
Def DateiEndung(1) SubStr$(@$(1),-1,".")
Def DateiPfad(1) Translate$(@$(1),("\\" + DateiName(@$(1))),"")+"\\"
Var Programm$=Par$((Upper$(DateiName(Par$(0)))="PROFAN.EXE") or (Upper$(DateiName(Par$(0)))="XPROFAN.EXE"))
Declare Folder$, Icon$, DesktopIni$
Var l&=Create("List", 0)
ClearList
ChDir DateiPfad(Programm$)
AddFiles *"*.ICO"
MoveListToHandle(l&)
whileloop 1, Getcount(l&)
Icon$=GetString$(l&,&loop-1)
Folder$=DateiPfad(DateiPfad(Programm$)+Trim$(Mid$(Icon$,Len(DateiPfad(Programm$)+"\\Icons\\"),9999)))
DesktopIni$ = Folder$ + "Desktop.ini"
Ifnot DirExists(Folder$)
MkDir Folder$
EndIf
If DirExists(Folder$)
PathMakeSystemFolder(Folder$)
If FileExists(DesktopIni$)
Erase DesktopIni$
EndIf
WriteIni DesktopIni$,".ShellClassInfo","IconResource"=Icon$+", 0"
WriteIni DesktopIni$,"ViewState","Mode"=""
WriteIni DesktopIni$,"ViewState","Vid"=""
WriteIni DesktopIni$,"ViewState","FolderType"="Generic"
SetFAttr DesktopIni$, $06
EndIf
EndWhile
|
|
|
| |
|
|
|
| Schau mal die APIs liefern bei mir 0, auch immer den Returnwert von Apis beachten.
MS schreibt: Returns nonzero if successful, or zero otherwise.
Strings sind leider auch nicht gleich Strings. Besonders Roland seine Strings oder eher durch die Art und Weise wie er sie verwaltet, sind nicht immer für Übergaben an APIs brauchbar z.B. wenn die GC ( [...] ) zu früh zuschlägt da nicht selbst organisiert.
Da helfen nProc-Strings oder eher die APIs in nProcs rufen, da nProcs eine echte eigene Stringverwaltung inne haben und nativ Strings erzeugen ganz reine und feine wie M$ sie wünscht. KompilierenMarkierenSeparieren {$cleq}
{$compiler c:\dev\xprofan11\11}
{$runtime c:\dev\xprofan11\11}
Def GetFileAttr(1) !"Kernel32", "GetFileAttributesA"
Def DateiName(1) SubStr$(@$(1),-1,"\\")
Def DateiEndung(1) SubStr$(@$(1),-1,".")
Def DateiPfad(1) Translate$(@$(1),("\\" + DateiName(@$(1))),"")+"\\"
Var Programm$=Par$((Upper$(DateiName(Par$(0)))="PROFAN.EXE") or (Upper$(DateiName(Par$(0)))="XPROFAN.EXE"))
Declare Folder$, Icon$, DesktopIni$
Var l&=Create("List", 0)
ClearList
ChDir DateiPfad(Programm$)
AddFiles *"*.ICO"
MoveListToHandle(l&)
whileloop 1, Getcount(l&)
Icon$=GetString$(l&,&loop-1)
Folder$=DateiPfad(DateiPfad(Programm$)+Trim$(Mid$(Icon$,Len(DateiPfad(Programm$)+"\\Icons\\"),9999)))
DesktopIni$ = Folder$ + "Desktop.ini"
Ifnot DirExists(Folder$)
MkDir Folder$
EndIf
If DirExists(Folder$)
print folder$
print "A:";nSetFileAttr(Folder$, $4)
If FileExists(DesktopIni$)
Erase DesktopIni$
EndIf
assign #1,DesktopIni$
rewrite #1
/*
WriteIni DesktopIni$,".ShellClassInfo","IconResource"=Icon$+", 0"
WriteIni DesktopIni$,"ViewState","Mode"=""
WriteIni DesktopIni$,"ViewState","Vid"=""
WriteIni DesktopIni$,"ViewState","FolderType"="Generic"
*/
print #1,"[.ShellClassInfo]"
print #1,"IconFile=%SystemRoot%\\system32\\SHELL32.dll"
print #1,"IconIndex=15"
print #1,"[ViewState]"
print #1,"FolderType=Generic"
close #1
nSetFileAttr(DesktopIni$, $06)
nSetFileAttr(Folder$, $4)
EndIf
EndWhile
waitinput
nProc nSetFileAttr(string s,long m){
return SetFileAttributesA(s,m)
}
|
|
|
| |
|
|
|
Julian Schmidt | Cool, klappt. Naja zumindest wenn der Ordner leer ist. Wenn er gefüllt ist geht es nicht. Ist das von Microschrott nicht vorgesehen oder bekommt man das auch noch irgendwie hin? |
|
|
| |
|
|
|
| Ich weiß es ehrlich gesagt nicht und fürchte, da hilft nur Probieren. |
|
|
| |
|
|
|
Julian Schmidt | Ich denke das geht nicht. Wurde auch hier geschrieben. [...] Hat jemand ein bessere Idee als einen Neuen Ordner zu erstellen dort die Desktop.ini abzulegen, Rechte zu setzen und anschließend alle Dateien und Unterordner in den neuen Ordner zu verschieben. |
|
|
| |
|
|
|
| Ja, ich! Nicht kopieren sondern verschieben!
Spätestens wenn sich eine Datei nicht verschieben lässt ists aber auch wieder unlustig. Ergo ganze Desktop.ini-Gedöns nur für neue Ordner die man z.B. selbst erstellt. |
|
|
| |
|
|
|
| Ja, ich! Nicht kopieren sondern verschieben!
Spätestens wenn sich eine Datei nicht verschieben lässt ists aber auch wieder unlustig. Ergo ganze Desktop.ini-Gedöns nur für neue Ordner die man z.B. selbst erstellt.
Gehen müsste es aber dennoch immer irgendwie denn der Explorer tät ja so! |
|
|
| |
|
|
|
Julian Schmidt | iF (25.05.13)
Gehen müsste es aber dennoch immer irgendwie denn der Explorer tät ja so!
Jup, nur wie findet man raus wie der Explorer das macht?
[OFFTOPIC]Doppelpost ^^[/OFFTOPIC] |
|
|
| |
|
|
|
| Könnte man API-Mon ansetzen aber das wir speziell beim Explorer vielleicht tendentiell gewissermassen zum Horror. |
|
|
| |
|
|
|
Julian Schmidt | Echt schade. Hab wirklich gehofft das man das irgendwie hinbekommt.
Übrings. Mit diesen Registry-Hack[...] kann man statt Readonly auch System zu Kennzeichnung von Individualisierten Ordnern verwenden. Evtl. nicht mit Win7 kompatible. |
|
|
| |
|
|