ShellIconOverlayIdentifiers - 为什么这么少?

rbe*_*amy 84 windows icons windows-explorer windows-shell

此时,每个人都知道ShellIconOverlayIdentifiers(来自MSDN)的数量有限制:

系统可以支持的不同图标叠加处理程序的数量受系统图像列表中可用于图标叠加的空间量的限制.目前有15个插槽用于图标覆盖,其中一些是由系统保留的.因此,只有在没有令人满意的替代方案时才应实施图标叠加处理程序

我可以理解Windows 95中的15个覆盖限制.但是在一个有Gigs of RAM,众多内核和GPU的环境中,现代操作系统中有这么低数量的技术原因吗?

为什么这个值不可配置?

在给出"性能"答案之前,请考虑: Windows允许配置,以便您可以杀死性能......为什么要特别选择这个问题?

Cod*_*ray 84

除非这里的某个人碰巧在Windows Shell团队工作,否则我怀疑你会得到一个真正解决技术限制以及它们如何影响设计选择的答案.但我会试试......

我的猜测是没有任何技术限制,或者至少现在没有技术限制.真正的原因可能是没有人花时间坐下来更新代码,设计和规范来解除这个限制.默认情况下不会实现功能,仅仅因为计算环境在过去几年中发生了变化并不意味着有人坐下来重新编写Windows以充分利用所有这些更改.

您还应该考虑这很可能是有意识的设计选择,而不是强加的限制.雷蒙德陈(究竟是谁的外壳团队合作)发表了博客条目回答有关Windows 7的沸沸扬扬删除"共享手"覆盖.他提出了一个令人信服的论点,即图标叠加真的不是一种显示信息的理想方式(超出系统限制为15的事实)[强调补充]:

一般来说,叠加不是一种呈现信息的好方法, 因为每个图标只能有一个叠加,每个ImageList限制为15个叠加.如果有两个或多个叠加层适用于某个项目,那么一个将胜出而其他叠加将失败,此时叠加层的值作为一种确定哪些属性适用于某个项目的方式会减少,因为唯一的方法是确定当你看不到任何叠加时,属性丢失了.(如果您看到其他一些叠加层,则无法判断是否因为您的属性丢失或是因为显示其他叠加层而不是您的属性.)

对我来说,在大多数真实案例中添加到shell中的额外混乱根本不值得,这似乎是合理的.Windows Shell团队显然得出了相同的结论并削减了"共享手"覆盖.雷蒙德的直接解释:

鉴于人们使用计算机的方式发生了变化,共享信息正变得越来越多地处于默认状态.当你设置一个家庭组时,几乎所有东西都将被共享.要删除视觉混乱,信息将移至"详细信息"窗格.

并且,我知道你特别要求不要提及性能,但是Windows确实试图让你不要让自己陷入困境.用户需要shell中的响应能力,而叠加图标可能会干扰这一点.作为进一步的证据,证明他们是不是优先,另一篇博客中由同雷蒙德陈惩戒:

另一个具有自私的性能视图的应用程序示例来自开发图标叠加处理程序的公司.shell将重叠计算视为低优先级项,因为在屏幕上获取图标更重要,这样用户就可以开始做他们想做的任何事情了.装饰品可以晚一点来.这家公司想知道是否有一种方法可以改善他们的表现,甚至在图标出现之前将其叠加到屏幕上,展示了对"表现"的非凡自私的解释.

  • 出色的回应.所以也许更好的问题是"图标叠加的替代方法是什么是在文件/文件夹的状态上呈现相同的即时可视队列?" 在我看来,使用图标来识别内容类型正变得越来越重要,因为Raymond Chen提到的确切原因 - 文件位置边界的模糊,状态MATTERS. (15认同)
  • 有趣的是MS已经通过使用OneDrive crud从Win10中弄乱我的`ShellIconOverlayIdentifiers`注册表项来接受这一点.对于使用像TortoiseSVN/GIT这样的东西的开发人员来说,这些叠加是至关重要的,只有一个可以显示的事实是*为什么*. (9认同)
  • 这不是一个可接受的答案.我知道它的一部分来自微软本身,因此,不接受微软的方法.看看我的例子:我已经同步DropBox,Google Drive,Mega,OneDrive和Tortoise SVN的文件夹,我真的很想在所有文件夹上看到所有叠加,但我不能因为这个愚蠢的限制. (6认同)
  • 我非常怀疑它既不是有意识的设计选择,也不是强加的限制,但很久以前(大约是Win 95)做出了一个愚蠢的设计决定,并且由于已安装的用户群而从未修复过.最愚蠢的决定是每个覆盖扩展只能支持一个图标覆盖,而对于每个文件,外壳只询问"适用?".*应该*每个叠加层都支持一个图标数组,并且对于每个文件,shell会询问"哪个图标叠加?",扩展可能会将"我不申请"作为一个选项回答. (3认同)
  • 在Windows 10破坏的所有事情中,@ Alex,这一点远远落在我的名单上.决定将OneDrive强加给用户显然是由营销部门而不是shell团队决定的.没有人预算时间和金钱返回并改进shell图像列表以使其用户友好. (2认同)

小智 13

Cody对实际问题的出色反应.至于为什么15而不是其他一些数字,限制被引入ImageList控件本身.