求助文件夹共享也会在原有的图标下面出现个手的图标效果:
类似快捷方式会在原有的图标左下方重叠个小箭头的图标

解决方案 »

  1.   

    不知道用什么方法
    要是任务紧急的话,我会首先取出该类文件原来默认的图标(关于这点搜索一下容易找到)
    然后准备一套透明的附加图,如手形、锁、箭头等,然后用GID+自己绘出来先用着再说
      

  2.   

    http://www.codeproject.com/KB/shell/systemiconsimagelist.aspx
      

  3.   

    这是网上的一段用delphi写的片段
    Delphi编写定制显示叠加图标的Shell扩展
    图标叠加扩展处理器主要实现接口 IShellIconOverlayIdentifier
    http://www.relatedtechnology.cn/web/info_hrsojlosrzffrrosjcc.html我写成c#的,注册完dll,修改完注册表后,新开一个资源管理器看却没有效果,好像哪里还有问题,写得不对,也不清楚dll到底有没有调用,还是只读没判断对,所以仅供参考了
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Runtime.InteropServices ;[Guid("6F9619FF-8B86-D011-B42D-00C04FC964FF")] 
    interface IShellIconOverlayIdentifier
    {
        int IsMemberOf(Char[] pwszPath,ushort dwAttrib);
       int GetOverlayInfo(Char[]  pwszIconFile,int cchMax,ref int pIndex,ref ushort pdwFlags);
        int GetPriority(out int pIPriority);
    }public class Class1 : IShellIconOverlayIdentifier
    {
        int S_OK = 0;
        int S_FALSE = 1;
        int faReadonly = 1;
        ushort ISIOI_ICONFILE = 1;    public int IsMemberOf(char[] pwszPath, ushort dwAttrib)
        {
            if ((dwAttrib & faReadonly) == faReadonly)
                return S_OK;
            else
                return S_FALSE;
        }    public int GetPriority(out int pIPriority)
        {
            pIPriority = 0;
            return S_OK;
        }    public int GetOverlayInfo(char[] pwszIconFile, int cchMax, ref int pIndex, ref ushort pdwFlags)
        {
            String OverlayPath = @"c:\x.ico";
            StringBuilder SB = new StringBuilder(OverlayPath, cchMax);
            pdwFlags = ISIOI_ICONFILE;
            return S_OK;
        }
    }
    [assembly: ComVisible(true)]
    COM互操作打勾注册dll regasm c:\classlibrary1.dll注册表:
    HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiers\ShellExt\ 新建项:{6F9619FF-8B86-D011-B42D-00C04FC964FF}HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Shell Extensions\Approved 新建二进制值:{6F9619FF-8B86-D011-B42D-00C04FC964FF}
      

  4.   

    因为c#的dll 没有 dllmain,所以机制可能也有问题
      

  5.   

    另外 GetOverlayInfo里还有一句
     SB.CopyTo(0, pwszIconFile, cchMax, SB.Length);
      

  6.   

    .Net 4.0之前微软不支持用托管代码写shell扩展。
      

  7.   

    其实我个人觉得,那并不是叠加, 用过vs 2008的朋友 都知道。 vs2008 创建的 sln ,和2005的就不一样。
     一个左上角标的是 9,一个是8 ,为什么相同的文件类型 icon却不一样。。 后来看了一个文章。 是对shell扩展。 虽然不支持,但是还是可以实现的。我当时碰到过和你差不多少的问题。 用了这做法就做出来了,。 参考