桌面左下角的“战争与和平”——关于兼容技术的那些事儿

摘要

前几年是右下角的战争,现在演变成左下角的战争了,3Q之战还在进行中..下列文字是转发,并没有做广告的嫌疑!最近半年经历了桌面左下角的图标的一些技术产品冲突和技术求解的过程,值得记录一下。  桌面左下角是Windows 开始菜单,一直以来,Windows没有直接提供任务栏左下角停靠的API接口,右下角的倒是有。 

文章目录[隐藏]

前几年是右下角的战争,现在演变成左下角的战争了,3Q之战还在进行中..下列文字是转发,并没有做广告的嫌疑!

最近半年经历了桌面左下角的图标的一些技术产品冲突和技术求解的过程,值得记录一下。

 

桌面左下角是Windows 开始菜单,一直以来,Windows没有直接提供任务栏左下角停靠的API接口,右下角的倒是有。 从Window3.1以来,开始菜单的大体风格都差不多。而对于希望寻求更新鲜操作体验的用户来说,有没有其他的软件可以选择呢 ?

 

目前已知的左下角工具有: 云端软件平台、小Q书桌,以及最近出品的360软件小助手:

 

图片

 

 

小Q书桌出品时为了兼容云端软件,做了一些特殊的兼容逻辑。

 

图片

 

后继,360也出了软件小助手,  没有进行兼容逻辑 当360的软件小助手遇见云端软件,云端软件图标直接覆盖,无法使用。

 

图片

 

                                                                   (二)

当360的软件小助手遇见小Q书桌,小Q书桌图标被直接覆盖,无法使用。

 

                                                                             图片

 

 

一时间用户怨声载道,桌面左下角的局势剑拔弩张。

 

 

 

为了使各图标排列前后有序,不会造成用户的困扰, 不拿用户的机器当作战场, 小Q书桌、云端及360多次函件往来讨论沟通,三方产品团队终于于10月31日对软件兼容问题达成了共识。

 

协议总的原则来说,就是先来后到的问题。谁先在用户机器上安装上,谁的图标就贴近开始菜单,后续安装的同类软件依次排序。这是小Q书桌、云端和360公司三方努力达成的共识,是一个在自律的基础上形成的一个公约。维护行业的健康有序发展,是软件产商共同的责任。

 

这个协议约定的确立, 是国内软件 厂商在软件面临冲突的时候,首次进行的文明合作,也是推动业界公平公正,和谐共存风气形成的一个有示范意义公约。

 

三家公司承诺加强自律,遵守已经确立的三方协议,共同维护行业秩序。欢迎各界和用户一起监督三家公司是否能良好遵守。

 

也希望该协议可以给未来需要左下角图标的软件能有矩可循,欢迎其他厂商的加入,让桌面左下角这块小天地变得繁荣兴盛,为用户提供更多更优质的 服务。 

 

 

(三)

     技术上保证这一顺序队列呢?因为windows本身没有提供这样的停靠API,自然也没有提供有效排序依据,所以需要三方联合制定一套系统注册规则来保证。在三方的技术团队通力合作下,参照windows下很多系统API的调用规则,设立如下规则:
     在注册表  HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\下建立一个项:StartButtonDock,然后顺次注册子项来记录安装先后。
     各产品按照程序安装的顺序从前到后创建子键,子键名称采用阿拉伯数字(如1,2,3)排序。
     子键内建立key,写入左下角停靠的窗体类名或当前的句柄,以便于后面的窗体停靠。特别注意:窗体类名或当前的句柄信息要准确有效。
     大体的技术思路就是这样:
    1、安装过程:
    1)StartButtonDock下写入自己的顺序子键
    2)写入自己的窗体类名
    2、运行过程(开始自动运行或用户点击启动等)
    1) 从StartButtonDock下面数一数自己是第几个
    2) 找到离自己前面一个有效窗体( FindWindow 或直接从注册表里读取到窗体句柄),然后停靠在它后面。如果一个都没找到,停靠在开始菜单后面。当然,可以在注册表里写一下自己的句柄值。
    3)定时扫描看是否有排在自己前面的窗体被激活了。如果有的话,主动挪位置给它。
    3、卸载过程:
    1)清理掉自己在StartButtonDock下面建立的键值。
     其中有几个需要注意或者释疑的地方:
    ①协议中为什么有写Handle(句柄)和类名两种方式?
    因为win7下不同权限进程间无法通讯,无法通过Findwindow找到,所以不得已的情况下,用句柄直接写入。
   ② 协议中使用定时器扫描排序在自己前面的窗体是否有效率问题?
    是有这样的顾虑,我们协议扩展中提供了SendMessage的消息机制来解决可能未来会遇到的效率问题。但是目前情况下,对软件效率影响不大。
 

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: