I'm writing a Windows service application in C# with FileSystemWatcher
.
How can I add status icons to files and folders in Windows Explorer similar to how Dropbox or SVN do it?
You should develop an overlay icon handler and register it into the system.
Here you can find a partially working example written in C#.
Some MSDN documentation here and here.
For anyone still interessted in this question:
Here is a codeproject link which describes the process in great detail.
It uses the SharpShell library, which can also be found on nuget.
Code, from the codeproject, looks something like that:
[ComVisible(true)]
public class ReadOnlyFileIconOverlayHandler : SharpIconOverlayHandler
{
protected override int GetPriority()
{
// The read only icon overlay is very low priority.
return 90;
}
protected override bool CanShowOverlay(string path, FILE_ATTRIBUTE attributes)
{
try
{
// Get the file attributes.
var fileAttributes = new FileInfo(path);
// Return true if the file is read only, meaning we'll show the overlay.
return fileAttributes.IsReadOnly;
}
catch (Exception) { return false; }
}
protected override System.Drawing.Icon GetOverlayIcon()
{
// Return the read only icon.
return Properties.Resources.ReadOnly;
}
}
I've never play with this, but I think it's the right way.
First make the folder a System Folder, then create a Desktop.ini file and apply the change inside.
[.ShellClassInfo]
InfoTip=@Shell32.dll,-12690
IconFile=%SystemRoot%\system32\SHELL32.dll
IconIndex=-238