ShellIconOverlayIdentifiers-为什么这么少?


84

在这一点上,每个人都知道ShellIconOverlayIdentifiers(来自MSDN)的数量是有限制的:

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

我可以理解Windows 95中的15个重叠式限制。但是,在存在RAM,大量内核和GPU的情况下,是否有一些技术原因导致现代操作系统中的数量如此之少?

为什么不能配置此值?

在给出“性能”答案之前,请考虑: Windows允许进行配置,以便您可以杀死性能...为什么要专门选择此问题?


为什么将此标签标记为“ tortoisesvn”?我想念什么吗?
科迪·格雷

19
我以为我很聪明,因为tortoisesvn是处理图标过多限制时最常提到的应用程序-主要是因为它占用了9个可用插槽。删除标签。
rbellamy

1
Windows 10上的限制仍然相同。也不知道为什么。
Gohan,2016年

Answers:


86

除非这里碰巧有Windows Shell团队的工作人员,否则我怀疑您将获得真正解决技术限制以及它们如何影响设计选择的答案。但我会尝试...

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

您还应该考虑,这很可能是有意识的设计选择,而不是强加的限制。Raymond Chen(实际上在Shell团队工作的人)发布了一个博客条目,以回应有关Windows 7删除“共享手”覆盖物的传闻。他提出了一个令人信服的论点,即图标叠加实际上不是显示信息的理想方式(超出了系统限制为15个的事实)[强调添加]:

一般来说,覆盖不是一种很好的信息呈现方式, 因为每个图标只能有一个覆盖,每个ImageList最多可以覆盖15个覆盖。如果有两个或多个应用于某个项目的叠加层,则一个将获胜而另一个则会丢失,这时,作为确定对项目应用哪些属性的一种方法,该叠加层的值会减小,因为唯一的确定方法是当您根本看不到任何重叠时,就是缺少属性。(如果看到其他叠加层,则无法确定是因为缺少属性还是因为显示了其他叠加层而不是您的属性。)

在我看来,在大多数现实情况下,添加到外壳上的额外杂物根本不值得。Windows Shell团队显然得出了相同的结论,并削减了“共享手”的标记。雷蒙德的直接解释:

鉴于人们使用计算机的方式发生了变化,共享信息越来越成为默认状态。当您设置家庭组时,几乎所有内容都将被共享。为了消除视觉混乱,将信息移至“详细信息”窗格。

而且,我知道您明确要求不要提及性能,但是Windows确实确实试图阻止您脚踏实地。用户需要外壳中的响应能力,并且覆盖图标可能会对此产生干扰。作为进一步的证据,它们不是优先考虑的问题,同一位Raymond Chen的追随者在博客中写道

具有自私的性能视图的应用程序的另一个示例来自开发图标叠加处理程序的公司。Shell将覆盖计算视为低优先级项目,因为在屏幕上显示图标更为重要,以便用户可以开始执行他们想做的任何事情。装饰可以稍后再来。该公司想知道是否有一种方法可以改善性能,甚至在图标出现之前就将其覆盖在屏幕上,从而展示出对“性能”的一种自私的解释。


15
反应出色。因此,也许更好的问题是“对于图标叠加层,有什么替代方法可以在文件/文件夹的状态上呈现相同的即时可视队列?” 在我看来,由于雷蒙德·陈(Raymond Chen)提到的确切原因-使用模糊的文件位置边界和状态问题,使用图标做更多的事情来识别内容类型变得越来越重要。
rbellamy

3
我非常怀疑这既不是有意识的设计选择,也不是强加的限制,而是很久以前(大约Win 95)做出的一项致命的设计决定,并且由于安装了用户群而从未解决。最愚蠢的决定是,每个覆盖扩展名只能支持一个图标覆盖,并且对于每个文件,shell只会询问“应用?”。这应该已经是每个覆盖支持图标的数组,每个文件的外壳询问“哪个图标覆盖?”,对此扩展可能会回答:“我不应用”作为一个选项。
基思·罗伯逊

9
有趣的是,MS通过ShellIconOverlayIdentifiers在Win10之前用OneDrive crud混淆了我的注册表项,从而拥抱了这一点。对于使用TortoiseSVN / GIT之类的开发人员来说,这些叠加层至关重要,并且为什么只能显示一个叠加层是一个为什么
Alex McMillan

2
在Windows 10坏掉的所有事物中,@ Alex远远低于我的列表。决定将OneDrive强加于用户显然是市场部门而不是Shell团队的决定。没有人预算时间和金钱来改进外壳程序映像列表以使其易于使用。
科迪·格雷

6
这不是可接受的答案。我知道其中一部分来自Microsoft本身,因此,对于Microsoft的方法是不可接受的。参见我的示例:我已经同步了DropBox,Google Drive,Mega,OneDrive和Tortoise SVN的文件夹,并且我真诚地希望在所有文件夹上正确看到所有覆盖,但是我不能这样做,因为这个愚蠢的限制。
卡洛斯·费托萨·菲略

13

科迪对实际问题做出了出色的回应。至于为什么15个而不是其他一些数字,该限制被放入ImageList控件本身中。


4

正如科迪·格雷(Cody Gray)所解释的那样,这一切都很好,但坦率地说,这是完全没有想象力的,而且据幕后报道,听起来有些沮丧。

在2015年和Windows 10中,肯定可以并且需要有一个更好的功能,正如我注意到存在的三十个叠加层,并且必须对我最想看到的叠加层进行优先级排序,这并不是您希望大多数人担心的。我还看到像Box这样竞争激烈的供应商过度竞争以试图确定自己的优先级,而这永远不会有任何好处。

这是可能的:如果多重覆盖的图标具有通用的覆盖指示符,该怎么办?像Google Chrome Apps按钮那样的多种颜色的小型矩形矩阵?单独覆盖将只显示长列表中的覆盖。

然后,当鼠标指针碰到图标时,一个小的弹出窗口会收集所有图标变体以供查看(以较小的图标尺寸或更大的图标尺寸)。当您将鼠标悬停在上方时,每个覆盖的图标都会通过工具提示宣布其含义。

现在,您可以拥有所需的所有图标叠加层,各种云中的状态,存储库指示以及Tortoise工具等等。


2
叠加层背后的想法是,您应该能够“一目了然”识别观察对象的状态。您的计划虽然有创意,但需要“动手操作”才能显示信息。并不是说我有更好的解决方案...
rbellamy

如果必须将它们放在弹出窗口中,为什么不将信息放在信息栏或预览窗格中或UI的其他位置?覆盖图标的全部要点是它们实际上是覆盖的,一眼就可以看到。
科迪·格雷
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.