windowsfileicons

Can I Assign a Custom Icon to a File Type


Is there a way i can associate a file type like (.php, .css, .js) to a custom icon, even when the file has been associate with a program.

for example on my computer .php is associated to sublime text, and when i encounter .php on my file system it show ST's icon, is there a way to make it change to a custom icon like the good ol' elephant, but still be associated with ST i.e when i click the file it still open's in ST(== sublime text).


Solution

  • I know how to do it for filetypes assigned to Notepad++.

    In Windows 10, Notepad++ keeps hijacking the icons of filetypes that you open (by default) in Notepad++. It was very difficult to break that behaviour, but I finally got it working!

     

    Preparations

    1. Registry permissions
    Open the Windos registry, and give yourself enough "permissions" for the folders HKEY_CLASSES_ROOT and HKEY_CURRENT_USER. I'm not sure myself what are the minimum settings for the whole procedure to succeed. You've got to play a bit with the settings. Anytime you get an error message in the coming procedure, go back to this step and increase your registry permissions.

    2. Make some custom icons
    Make some custom icons, for example in the folder C:\ICONS\. I use the following website https://iconverticons.com/online/ to convert 256x256 png-files into ico-files.

    3. Install Notepad++
    Just get Notepad++. Nothing special here.

    4. Open a terminal with admin rights
    Type cmd in the windows search bar. Right click on the CMD-icon that appears and choose "Run as administrator" in the popup window.

     

    Registry hacking

    Disclaimer: changing your registry can potentially cause damage to your Windows installation. I have written down the procedure below with best intentions, but I deny any responsibility in case something goes wrong.
    Note: I DON'T recommend to use this procedure for .bat files. This is a very important file-type for Windows. So I don't know what would happen if you delete its standard registry keys.

    The procedure below describes how to assign a custom icon - which you created in C:\ICONS\abcfile.ico - to all *.abc files.

    1. Registry hacking, part one
    The first registry key you should add is HKEY_CLASSES_ROOT\.abc. In case this key already exists, you might want to delete it. Use the following command to delete the key and all its subkeys:

    > REG DELETE HKEY_CLASSES_ROOT\.abc /f
    

    The following figure shows how we will (re)build this registry key and all its subkeys:

    enter image description here

    You can do it manually or run the following commands:

    > REG ADD HKEY_CLASSES_ROOT\.abc /ve /t REG_SZ /d "abc_auto_file"
    > REG ADD HKEY_CLASSES_ROOT\.abc /v BrowserFlags /t REG_DWORD /d 0x00000000
    > REG ADD HKEY_CLASSES_ROOT\.abc /v EditFlags /t REG_DWORD /d 0x00000000
    > REG ADD HKEY_CLASSES_ROOT\.abc /v PerceivedType /t REG_SZ /d "text"
    > REG ADD HKEY_CLASSES_ROOT\.abc\DefaultIcon /ve /t REG_SZ /d "C:\ICONS\abcfile.ico,0"
    

    2. Registry hacking, part two
    The second registry key you should add is HKEY_CLASSES_ROOT\abc_auto_file. In case this key already exists, you might want to delete it. Use the following command to delete the key and all its subkeys:

    > REG DELETE HKEY_CLASSES_ROOT\abc_auto_file /f
    

    The following figure shows how we will (re)build this registry key and all its subkeys:

    enter image description here

    You can do it manually or run the following commands:

    > REG ADD HKEY_CLASSES_ROOT\abc_auto_file /ve /t REG_SZ
    > REG ADD HKEY_CLASSES_ROOT\abc_auto_file\DefaultIcon /ve /t REG_SZ /d "C:\ICONS\abcfile.ico"
    > REG ADD HKEY_CLASSES_ROOT\abc_auto_file\shell /ve /t REG_SZ
    > REG ADD HKEY_CLASSES_ROOT\abc_auto_file\shell\edit /ve /t REG_SZ
    > REG ADD HKEY_CLASSES_ROOT\abc_auto_file\shell\edit\command /ve /t 
    > REG_EXPAND_SZ /d "\"C:\Program Files (x86)\Notepad++\notepad++.exe\" \"^%1\""
    > REG ADD HKEY_CLASSES_ROOT\abc_auto_file\shell\open /ve /t REG_SZ
    > REG ADD HKEY_CLASSES_ROOT\abc_auto_file\shell\open\command /ve /t 
    > REG_EXPAND_SZ /d "\"C:\Program Files (x86)\Notepad++\notepad++.exe\" \"^%1\""
    

    3. Registry hacking, part three
    The second registry key you should add is HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.abc. In case this key already exists, you might want to delete it. Use the following command to delete the key and all its subkeys:

    > REG DELETE HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.abc /f
    

    The following figure shows how we will (re)build this registry key and all its subkeys:

    enter image description here

    You can do it manually or run the following commands:

    > REG ADD HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.abc /ve /t REG_SZ
    > REG ADD HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.abc\OpenWithList /ve /t REG_SZ
    > REG ADD HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.abc\OpenWithProgids /ve /t REG_SZ
    > REG ADD HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.abc\OpenWithProgids /v "C:\Program Files (x86)\Notepad++\notepad++.exe" /t REG_NONE /d 0
    > REG ADD HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.abc\OpenWithProgids /v abc_auto_file /t REG_NONE /d 0
    

     

    Refresh icon cache

    The following command should refresh the Windows icon cache:

    > %windir%\system32\ie4uinit.exe -show
    

     

    Assign Notepad++ to the filetype

    I've noticed that - sometimes - the changes only take effect after assigning Notepad++ as the default program to open the filetype. This is how to do that:

     

    Finish

    Normally the icon has changed now! And all files of that particular filetype will have the custom icon. They will open by default in Notepad++.

    Perhaps you should again refresh the icon cache:

    > %windir%\system32\ie4uinit.exe -show
    

    or restart your system to let it take effect (although restarting wasn't needed for me).