8

I want to have certain folders show a picture I made my own instead of having to use the properties and specifying an *.ico file. Is there a way to use a *.jpg or *.png or *.gif or something like that instead? Or a program / script that allows me to more easily tell that folder to use an image I have.

I don't want to manually convert them because that's tedious to do. I'm planning to do this quite often, as a form of recognition when navigating my folder structure. No, search is not an alternative solution...

Judith
  • 673
  • 5
  • 18

3 Answers3

11

As far as I know, for an icon on Windows you must use an .ico file. Although in Win9x days one could get away by using a renamed .bmp, but they look just terrible next to fancy Aero icons – especially since a typical ICO contains several image sizes with transparency layers.

You can use ImageMagick to convert a PNG image to an ICO file:

convert foo.png foo.ico

or if you have PNGs of several sizes,

convert foo-*.png foo.ico

The other part, making Windows use your icon, is easier:

  1. Create a desktop.ini file in your directory, with the following contents:

    [.ShellClassInfo]
    IconFile=folder.ico
    IconIndex=0
    

    Relative paths for IconFile should be supported; they will also work over the network.

    See this MSDN article for detailed instructions on setting the folder icon programmatically.

  2. Mark the directory as either "Read-only" (preferred) or "System":

    attrib +r Music
    

    Without this, Explorer won't even look for desktop.ini customizations, for performance reasons (as explained in The Old New Thing).

  3. Optionally mark desktop.ini as hidden, so that it won't clutter the file list:

    attrib +h +s desktop.ini
    
Glorfindel
  • 4,158
grawity
  • 501,077
2

Nope, .ICO files are used (exclusively) for the Icons of folders (since, well, they're Icons ;) ).

You're best/only bet is to convert the image file(s) to the .ICO format.

Perhaps check out these for some ideas/utilities to make the conversion easier on you:

Personally I like Axialis' IconWorkshop for all my .ICO needs. :)

As for injecting/assigning them without using the Properties, that's a different story, and actually pretty easy.

You can specify it by creating/modifying the desktop.ini (text) file in the folder you wish to apply the icon to. Note: this file is a 'hidden' and 'system' file.

Example desktop.ini:

[.ShellClassInfo]
IconResource=C:\Users\techie007\Documents\myNukeBall.ico,0
0

Public Sub Change_Folder_Icon()

Dim FSO As Object
Dim folderPath As String, DesktopIni As String

folderPath = "C:\Users\user_name\Desktop\my_folder"

If Right(folderPath, 1) <> "&quot; Then folderPath = folderPath & "&quot; DesktopIni = folderPath & "Desktop.ini"

Set FSO = CreateObject("Scripting.FileSystemObject")

With FSO .GetFolder(folderPath).Attributes = System

If .FileExists(DesktopIni) Then .DeleteFile DesktopIni

With .CreateTextFile(DesktopIni, True)
    .WriteLine &quot;[.ShellClassInfo]&quot;
    ' Windows 10 Icons
    '.WriteLine &quot;IconFile=%SystemRoot%\system32\SHELL32.dll&quot;
    '.WriteLine &quot;IconIndex=12&quot;

    ' Custom icon
    .WriteLine &quot;IconFile=C:\Users\user_name\Desktop\my_folder\Icon.ico&quot;
    .WriteLine &quot;IconIndex=0&quot;
    .Close
End With

.GetFile(DesktopIni).Attributes = Hidden

End With

End Sub