namespace SyncFileIconOverlay
{
[ComVisible(true)]
public class SyncFileIconOverlay:SharpIconOverlayHandler
{
protected override int GetPriority()
{
// The read only icon overlay is very low priority
return 90;
}
public int PriorityGetter()
{
return GetPriority();
}
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 true;
}
catch (Exception)
{
return false;
}
}
public bool CanShowOverlayGetter(string path)
{
return CanShowOverlay(path, FILE_ATTRIBUTE.FILE_ATTRIBUTE_NORMAL);
}
protected override System.Drawing.Icon GetOverlayIcon()
{
// Return the read only icon
return Properties.Resources.ReadOnly;
}
public System.Drawing.Icon OverlayIconGetter()
{
return GetOverlayIcon();
}
}
}
https://www.codeproject.com/Articles/545781/NET-Shell-Extensions-Shell-Icon-Overlay-Handlersから見つけた上記のコードを使用しています
これはクラス ライブラリにあり、overlayicon が必要なときに winform アプリケーションからこの dll を参照します。PriorityGetter を呼び出してから、CanShowOverlayGetter を確認して、最後に OverlayIconGetter を呼び出します。CanShowOverlay 関数がファイルに対して true を返す場合、オーバーレイ アイコンが変更されますが、問題はありません。システムは、dll を登録してエクスプローラーを再起動するときに何もせずに、コンピューター内のすべてのファイルに対してこれを使用しますか?プログラムから動的に取得されるファイル。どうすればこの感謝を達成できるか分かりますか!!!