programatically change icon on folder

Posted on 2008-10-16
Last Modified: 2012-08-13
Hi Experts,

I have a program where the user creates a project consisting of a Access database and some pictures. I collect all files for a project in a folder and want it to look a little bit more professional by changing the icon of the folder to my own. How do I do that? I want to assign my own icon to the folder when I create it...

Question by:PerryDaynac

Expert Comment

ID: 22730195
I've found this example but it's in C#.
Say something if you need help converting to

Expert Comment

ID: 22730386
PerryDaynac; you have to add a file "Desktop.ini" into the folder that you want to change the icon
Then add the next code to that file ...


close and save the file "Desktop.ini" and your folder will have the icon that you deside.
All of this, you can do it with VB...

Ing. Fernando D. Giletta
San Fco. Cba. Argentina.

Accepted Solution

FER_G earned 250 total points
ID: 22730647
PerryDaynac; I put the code that you just need into the code snippet, so take a look and prove it!

Ing. Fernando D. Giletta
San Fco. Cba. Argentina.
Private Declare Function SetFileAttributes Lib "kernel32" Alias "SetFileAttributesA" (ByVal lpFileName As String, ByVal dwFileAttributes As Long) As Long

Sub SetFolderIcon(ByVal sFolderPath As String, ByVal sIconFile As String, Optional ByVal iIconIndex As Long = 0)

    Dim sContent As String

    Dim sDesktopFile As String

    Dim bExists As Boolean

    Dim handle As Integer


    On Error Resume Next

    'if folder and icon file exist

    bExists = (GetAttr(sFolderPath) And vbDirectory) <> 0 And (GetAttr _

        (sIconFile) And vbDirectory) = 0

    If bExists = False Or Err.Number <> 0 Then Exit Sub


    ' file content

    sContent = "[.ShellClassInfo]" & vbCrLf & "IconFile=" & sIconFile & _

        vbCrLf & "IconIndex=" & iIconIndex


    'path of "desktop.ini" file

    sDesktopFile = sFolderPath & IIf(Right$(sFolderPath, 1) = "\", "", "\") & "Desktop.ini"


    'change the file attr to delete it if it already exist

    SetFileAttributes sDesktopFile, vbNormal 'Se setea a visible el estado del archivo para poder eliminarolo.

    If (Dir(sDesktopFile) <> "") Then Kill (sDesktopFile)


    ' open the file and write the content

    handle = FreeFile

    Open sDesktopFile For Output As #handle

    Print #handle, sContent;

    Close #handle


    ' make the file hidden and the folder read only

    SetFileAttributes sDesktopFile, vbHidden

    SetFileAttributes sFolderPath, vbReadOnly


    MsgBox "ICON SET!!!"

End Sub

Open in new window

How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline


Author Closing Comment

ID: 31506658
Brilliant Fernando!!
Works like a clock...
I have another question up about protecting the folder with a password, if you know how to do that aswell
Thank You

Expert Comment

ID: 23722144

Expert Comment

ID: 23722377
It doesn't like programmatical setting of system file attributes, but you can use SyncShell (or if you don't want to go find SyncShell on the web, just plain old "Shell") to do this quite easily. This will set the attributes of Desktop.ini to both "system" and "hidden"

It's not necessary to set the folder path to read only, btw?

    SyncShell "cmd.exe /c attrib """ & sFolderPath & "\Desktop.ini"" +s +h", vbHide

Featured Post

Why You Should Analyze Threat Actor TTPs

After years of analyzing threat actor behavior, it’s become clear that at any given time there are specific tactics, techniques, and procedures (TTPs) that are particularly prevalent. By analyzing and understanding these TTPs, you can dramatically enhance your security program.

Join & Write a Comment

The debugging module of the VB 6 IDE can be accessed by way of the Debug menu item. That menu item can normally be found in the IDE's main menu line as shown in this picture.   There is also a companion Debug Toolbar that looks like the followin…
Background What I'm presenting in this article is the result of 2 conditions in my work area: We have a SQL Server production environment but no development or test environment; andWe have an MS Access front end using tables in SQL Server but we a…
Get people started with the utilization of class modules. Class modules can be a powerful tool in Microsoft Access. They allow you to create self-contained objects that encapsulate functionality. They can easily hide the complexity of a process from…
Show developers how to use a criteria form to limit the data that appears on an Access report. It is a common requirement that users can specify the criteria for a report at runtime. The easiest way to accomplish this is using a criteria form that a…

760 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

20 Experts available now in Live!

Get 1:1 Help Now