没办法的,只能用多个IShellIconOverlayIdentifier实现,每个对应一个图标。可以放在一个dll中。SVN这样的程序也是用多个IShellIconOverlayIdentifier实现的,可以去看一下注册表中的SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiers,每项都对应一个。另外,图标覆盖是有总数限制的,超出限制个数的就无效了,优先使用刚才那个注册表项前面的。

解决方案 »

  1.   

    首先感谢 iamshuke,不过有几点我不太明白,SVN和类似程序确实实现多个ShellIconOverlayIdentifiers,但是通过查CLSID,发现它多个都是对应一个DLL,我不明白如何通过Explorer进行交互,另外发现:
    1.Explorer是根据注册表顺序加载的,如果两个icon覆盖对应一个文件,会只加载第一个;
    2.即使调整GetPriority中的优先级,还是加载第一个,图标不变化如果您有类似经验加我QQ:285077416,谢谢您了;
      

  2.   

    GetOverlayInfo的第四个参数赋值为ISIOI_ICONINDEX 指明包含多个图标
    第三个参数的值(索引值)可以用case语句给出
    每次覆盖图标要重启explorer
      

  3.   

    我在资源上放了个例程:http://download.csdn.net/detail/iamshuke/3892561在1个dll中实现了4个IShellIconOverlayIdentifier
      

  4.   

    谢谢iamshuke 哥,我收到你的代码了,这个问题终于能结束了
      

  5.   

    可以不可以告诉我IShellIconOverlayIdentifier 里面的那个三个函数怎么用啊,我没有看到我做的东西的效果
      

  6.   

    如何使用非绝对路径下的图标呢?比如这个DLL要在别的计算机上注册,不可能手动把图标拷过去,在建一个一模一样的路径吧?求教!!