gabrixl
Goto Top

Ordner Icon wird nicht korrekt angezeigt

Guten Tag

Habe mir ein Programm erstellt, mit welchem man Ordner Icons ziemlich einfach festlegen kann.
Das funktioniert eigentlich immer, nur manchmal wird das dann im Explorer-Dropdown eines Laufwerkes angezeigt, aber sonst nicht. (Siehe Bild im Anhang)
Sobald ich das Icon dann von Hand nochmal setze (Rechtsklick, Eigenschaften), wird es wieder korrekt angezeigt.
Weiss jemand was man dagegen tun kann? (In einem Programm realisierbar, wäre optimal)

Programm Funktionsweise:
Erstellt Desktop.ini im Ordner
Lässt cmd laufen mit "attrib +R (Pfad)"
macht ein Refresh des Ordners

Vielen Dank im Voraus!

Lg
15-03-2018 11-37-40

Content-ID: 368202

Url: https://administrator.de/contentid/368202

Ausgedruckt am: 23.11.2024 um 16:11 Uhr

nepixl
nepixl 15.03.2018 aktualisiert um 11:45:40 Uhr
Goto Top
Hallo,

Habe mir ein Programm erstellt, mit welchem man Ordner Icons ziemlich einfach festlegen kann.
Programm dann so schreiben, dass es immer funktioniert. Diese Manchmalfunktion ist lästig.

Bzgl deinem Screen: mit "cracks" machst Du dich hier seeeehr beliebt.
Das ist hier ein Adminforum - kein gutefrage.de -ersatz!

Gruß
gabrixl
gabrixl 15.03.2018 aktualisiert um 11:50:49 Uhr
Goto Top
Hi

Programm dann so schreiben, dass es immer funktioniert. Diese Manchmalfunktion ist lästig.
Deshalb frage ich... 1 + 1 = 2

Bzgl deinem Screen: mit "cracks" machst Du dich hier seeeehr beliebt.
Ist mir egal wie beliebt ich hier bin, ist meine Sache wie der Ordner heisst.
Pjordorf
Pjordorf 15.03.2018 um 12:09:02 Uhr
Goto Top
Hallo,

Zitat von @gabrixl:
Deshalb frage ich... 1 + 1 = 2
Und? Gibst du uns deinen Quellcode damit wir wissen was du wie und wo gemacht hast und es nachstellen können. Da du in der Rubrik Windows 7 geschrieben hast dann noch bitte sagen auf welchen OSen das Probleme macht oder laufen (nicht nur manchmal) muss. wier setzen uns dann hin und machen das für dich, aber erts wenn du uns deine Kontonummer mitteilst damit wir uns etwas abbuchen können (nur ein bischen, nicht viel). face-smile

Ist mir egal wie beliebt ich hier bin, ist meine Sache wie der Ordner heisst.
Nicht deine Bilder machen dich unbeliebt, deine Antworten tun das schon. Man hätte ja den Ordner auch MickeyMaus nennen können....

Vielleicht nimmst du dir mal die Zeit deine Frage so zu Schreiben damit wir hier verstehen was du eigentlich hast bzw. willst. Ich jedenfalls verstehe nicht wo dein Problem zu suchen ist.

Gruß,
Peter
colinardo
colinardo 15.03.2018 aktualisiert um 14:41:24 Uhr
Goto Top
Powershell
$dlg = New-Object System.Windows.Forms.FolderBrowserDialog
$dlg.ShowNewFolderButton = $true
if($dlg.ShowDialog() -eq 'OK'){  
   $folderpath = $dlg.SelectedPath
 }else{return}


$dlg = New-Object System.Windows.Forms.OpenFileDialog
$dlg.Filter = "Icons | *.exe;*.ico"  
$dlg.Title = "Select icon for folder"  
if($dlg.ShowDialog() -eq 'OK'){  
    $iconpath = $dlg.FileNames
}else{
    return
}


# Ordner muss das System-Attribut haben damit das Icon sichtbar wird
(Get-Item $folderpath).Attributes = 'Directory, System'  

# desktop.ini für das Ordner-Icon erstellen
@"  
[.ShellClassInfo]
IconResource=$iconpath,0
"@ | sc "$folderpath\desktop.ini" -Force  
# Desktop.ini Attribute hidden/system setzen
[System.IO.File]::SetAttributes("$folderpath\desktop.ini", [System.IO.FileAttributes]::Hidden)  
# Refresh
(Get-Item $folderpath).Refresh()
gabrixl
gabrixl 15.03.2018 um 14:23:47 Uhr
Goto Top
Hi

Und? Gibst du uns deinen Quellcode damit wir wissen was du wie und wo gemacht hast und es nachstellen können. Da du in der Rubrik Windows 7 geschrieben hast dann noch bitte sagen auf welchen OSen das Probleme macht oder laufen (nicht nur manchmal) muss. wier setzen uns dann hin und machen das für dich, aber erts wenn du uns deine Kontonummer mitteilst damit wir uns etwas abbuchen können (nur ein bischen, nicht viel). face-smile
Könnt gerne paar qualitative Cracks haben zur Belohnung ;) (Nicht zu ernst nehmen)

Hab das Programm bisher nur auf Win 7 und 10, das ist aufgetreten als ich viele Icons miteinander geändert habe. Dies habe ich aber öfters gemacht und das Problem ist nur einmal aufgetreten.
Könnte es an der Application.DoEvents Methode liegen? Die soll ja anscheinend nicht beliebt sein und eher unschön zu verwenden.


Der Loop im Code, soll das Aktualisieren des Ordner Icons beschleunigen.

Geschrieben ist es mit Visual Basic Windows Forms Application.

Hier der Code, welcher das Icon ändert:
Dim iconPath As String = OpenFileDialog1.FileName
Dim output As String = "[.ShellClassInfo]" & vbNewLine & "IconResource=" & iconPath & ",0"  


 If File.Exists(iconPath) Then
                Dim dirInf As New DirectoryInfo(strPath)

                File.Delete(strPath & "\Desktop.ini")  
                File.WriteAllText(strPath & "\Desktop.ini", output)  
                File.SetAttributes(strPath & "\Desktop.ini", FileAttributes.Hidden)  

                p1.StartInfo = New ProcessStartInfo("cmd.exe", "/c attrib +R " & strPath)  
                p1.StartInfo.CreateNoWindow = True
                p1.StartInfo.WindowStyle = ProcessWindowStyle.Hidden
                p1.Start()
                p1.WaitForExit()

                txtb_loading.Clear()

                For i = 1 To 19
                    Application.DoEvents()
                    dirInf.Refresh()
                    Threading.Thread.Sleep(100)
                    txtb_loading.AppendText("▁▁")  
                Next
End If

Nicht deine Bilder machen dich unbeliebt, deine Antworten tun das schon. Man hätte ja den Ordner auch MickeyMaus nennen können....
Ich habe nur in dieser Form geantwortet, weil ich auch eine Antwort in dieser Form erhalten habe. You get what you give...

Vielleicht nimmst du dir mal die Zeit deine Frage so zu Schreiben damit wir hier verstehen was du eigentlich hast bzw. willst. Ich jedenfalls verstehe nicht wo dein Problem zu suchen ist.
Ich weiss leider auch nicht wo mein Problem zu suchen ist, habe einiges an Recherche betrieben bevor ich hier gefragt habe...

An alle die ich verärgert habe mit meiner Antwort, die Antwort von Pixl hat mich auch verärgert. Also tut mir sehr leid wenn sich irgend jemand ausser Pixl darüber aufgeregt hat, das war nicht mein Ziel.

Lg
colinardo
colinardo 15.03.2018 aktualisiert um 14:44:00 Uhr
Goto Top
Der Ordner sollte das "System" Attribut erhalten damit das Icon erscheint! S. Powershell code oben.
gabrixl
gabrixl 15.03.2018 um 14:43:53 Uhr
Goto Top
Mein Code welcher ich in der Antwort unten gepostet habe, tut dasselbe.
colinardo
colinardo 15.03.2018 aktualisiert um 14:44:57 Uhr
Goto Top
Zitat von @gabrixl:

Mein Code welcher ich in der Antwort unten gepostet habe, tut dasselbe.
Nein. Siehe meinen letzten Kommentar.
gabrixl
gabrixl 15.03.2018 um 14:44:49 Uhr
Goto Top
Erhält er auch... Und wenn ich über cmd dem Ordner das Attribut erneut gebe passiert ebenfalls keine Veränderung.
gabrixl
gabrixl 15.03.2018 um 14:45:08 Uhr
Goto Top
Was bitte tut er nicht was deiner tut?
gabrixl
gabrixl 15.03.2018 aktualisiert um 14:50:53 Uhr
Goto Top
p1.StartInfo = New ProcessStartInfo("cmd.exe", "/c attrib +R " & strPath)  
p1.StartInfo.CreateNoWindow = True
 p1.StartInfo.WindowStyle = ProcessWindowStyle.Hidden
p1.Start()
p1.WaitForExit()
Erhält der Ordner auch und wie gesagt, wenn ich dem Ordner das Attribut erneut manuell gebe, passiert trotzdem nichts.
colinardo
colinardo 15.03.2018 aktualisiert um 14:49:26 Uhr
Goto Top
Zitat von @gabrixl:

Was bitte tut er nicht was deiner tut?
Habe ich oben schon zwei mal geschrieben! Du aktivierst für den Ordner nicht das System Attribut. Du machst nur die ini readonly sonst nichts und das reicht eben nicht.
gabrixl
gabrixl 15.03.2018 aktualisiert um 14:58:50 Uhr
Goto Top
Entschuldige, habe das +R mit +S verwechselt.

Habe dem Ordner jetzt manuell über cmd noch das +S Attribut gegeben, leider keine Änderung.
Finde es einfach ultra seltsam das er es im Dropdown anzeigt und oben in der Pfadangabe auch (sobald ich den Ordner öffne).

Braucht er das +S? Habe es immer mit +R gemacht und danach ist das Icon erschienen.

Mein Code oben macht folgendes:
Dekstop.ini erstellen (versteckt)
Dem Ordner das +R Attribut geben
colinardo
colinardo 15.03.2018 aktualisiert um 15:01:57 Uhr
Goto Top
Zitat von @gabrixl:
Braucht er das +S? Habe es immer mit +R gemacht und danach ist das Icon erschienen.
Ja das S ist nötig aber auf den Ordner nicht die ini.

Was mir gerade bei dir auffällt, du hast die Exploreransicht auf der rechten Seite auf sehr große Symbole gestellt. Damit das Icon da dargestellt wird ist es nötig das das Icon auch große Versionen des Icons inkludiert hat, hat es das nicht wird es auch nicht dargestellt und durch das Standardicon ersetzt.

F5 drücken sollte man nach den Änderungen auch meistens.
gabrixl
gabrixl 15.03.2018 aktualisiert um 15:10:59 Uhr
Goto Top
Danke vielmals das du so schnell antwortest!

Okay, werde es im Code anpassen.
Die Icons haben alle 512x512. Sollten dann bei dieser Grösse nicht alle mit dem Standard Icon dargestellt werden? Was meinst Du?

Das dirInf.Refresh() simuliert ein F5 beim angegebenen Verzeichnis
Pjordorf
Pjordorf 15.03.2018 um 15:17:28 Uhr
Goto Top
Hallo,

Zitat von @gabrixl:
Die Icons haben alle 512x512.
Wo sollen deine Tapeten überall gezeigt werden? Im ernst, größer als 256*256 ist nicht konform.
https://www.codeproject.com/Articles/1067619/What-Icon-Sizes-Are-Used-by ...;
https://www.creativefreedom.co.uk/icon-designers-blog/windows-7-icon-siz ...
https://stackoverflow.com/questions/3236115/which-icon-sizes-should-my-w ...

Gruß,
Peter
colinardo
colinardo 15.03.2018 aktualisiert um 15:19:39 Uhr
Goto Top
Zitat von @gabrixl:
Das dirInf.Refresh() simuliert ein F5 beim angegebenen Verzeichnis
Das meint man gemeinhin, ist aber nicht das selbe. Der Explorer ist faul und beachtet das oft nicht.
gabrixl
gabrixl 15.03.2018 um 15:19:49 Uhr
Goto Top
Muss mich korrigieren, bin davon ausgegangen, sind aber nur 128x128.
colinardo
colinardo 15.03.2018 aktualisiert um 15:23:09 Uhr
Goto Top
Mach die Ansicht einfach mal kleiner. Strg+Mausrad und danach F5 und 256er mach ich bei meinen Icons immer mit rein, natürlich nur zus. zu den anderen Größen 16,24,32,...
Pjordorf
Pjordorf 15.03.2018 um 15:21:02 Uhr
Goto Top
Hallo,

Zitat von @gabrixl:
sind aber nur 128x128.
Und wo sind die 256*256, 16*16 usw.?

Gruß,
Peter
gabrixl
gabrixl 15.03.2018 um 15:27:39 Uhr
Goto Top
Habe nur eine grösse, 128x128

Egal welches Icon ich den Problem-Ordner gebe, es bleibt das Standard Icon, bis ich sie auf "kleine Symbole" einstelle.

Habe nun dem Ordner games dasselbe Icon wie data gegeben. Wenn ich jetzt mit Ctrl + Mausrad ein Tick scrolle, ist das Icon für games und images wieder weg.

Weiss nicht wo das Problem liegen kann, an dem Icon wohl kaum, ist ja die selbe Datei wie bei data?

Lg
15-03-2018 15-26-05
15-03-2018 15-25-35
Pjordorf
Pjordorf 15.03.2018 um 15:34:21 Uhr
Goto Top
gabrixl
gabrixl 15.03.2018 um 15:47:21 Uhr
Goto Top
Danke für die Links, werde es zuhause mal ausprobieren.

Lg
gabrixl
gabrixl 15.03.2018 um 15:50:28 Uhr
Goto Top
Gibt es ne Methode das wirklich zu simulieren, ohne das der Explorer zu faul ist? (Ausser SendKeys)
colinardo
Lösung colinardo 15.03.2018 aktualisiert um 16:19:57 Uhr
Goto Top
Zitat von @gabrixl:

Gibt es ne Methode das wirklich zu simulieren, ohne das der Explorer zu faul ist? (Ausser SendKeys)
Nein keine direkte. Du kannst zwar direkt über Win32 alle Explorer Windows enumerieren und das durch eine WM_MESSAGE forcieren, bringt dir aber nicht viel.

Mach dir "standardkonforme" Icons dann braucht der Explorer deine Icons nicht extra aus einem 128er Format runter und hoch skalieren, was genau solche Caching-Fehler die du gerade bei dir siehst verursacht.
Beispiel:
screenshot