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

PRTG Network Monitor: Intuitive Network Monitoring

Network Monitoring is essential to ensure that computer systems and network devices are running. Use PRTG to monitor LANs, servers, websites, applications and devices, bandwidth, virtual environments, remote systems, IoT, and many more. PRTG is easy to set up & use.


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

Migrating Your Company's PCs

To keep pace with competitors, businesses must keep employees productive, and that means providing them with the latest technology. This document provides the tips and tricks you need to help you migrate an outdated PC fleet to new desktops, laptops, and tablets.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

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…
I was working on a PowerPoint add-in the other day and a client asked me "can you implement a feature which processes a chart when it's pasted into a slide from another deck?". It got me wondering how to hook into built-in ribbon events in Office.
Get people started with the process of using Access VBA to control Excel using automation, Microsoft Access can control other applications. An example is the ability to programmatically talk to Excel. Using automation, an Access application can laun…
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…

773 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