按标签存档 Windows
如何破解您的Windows密码(第一篇)
介绍
密码可以看作我们主要,甚至某些情况下唯一可用于防范入侵的防线。就算入侵者无法在物理上接触到计算机,对于对外的Web应用,他们依然可以通过远程桌面协议或身份验证功能访问到服务器上的服务。
本文的主要是为了告诉您Windows创建和存储密码哈希(Hash)的方式,以及这些哈希的破解方式。在介绍了如何破解Windows密码后,我还将介绍一些技巧,帮助您防范此类攻击。
Windows是如何存储密码的
运行Windows的计算机使用两种方法对用户密码创建哈希,这两种方法在本质上有着不同的安全意义。这两种方法分别是LAN Manager (LM)以及NT LAN Manager第二版(NTLMv2)。哈希是一种加密功能所获得的结果,这种加密需要获取任意大小的字符串数据,并用算法对其进行加密,然后返回一个固定大小的字符串。
LM密码哈希
LAN Manager哈希是Windows操作系统最早使用的密码哈希算法之一,并且在Windows 2000、XP、Vista和7中使用了更先进的NTLMv2之前,这也是唯一可用的版本。这些新的操作系统虽然可以支持使用LM哈希,但主要是为了提供向后兼容行,不过在Windows Vista和Windows 7中,该算法默认是被禁用的。
密码的LM哈希需要使用下列六个步骤计算获得:
-
将用户的密码全部转换为大写字母
-
给密码添加空(null)字符,直到密码长度等于14个字符
-
将新获得的密码拆分为两组7位的字符值组
-
使用这些值创建两个DES加密密钥,并为每一组添加一个奇偶校验位,这样即可创建出64位的密钥
-
使用每个DES密钥加密一个预定义的ASCII字符(KGS!@#$%),这样即可获得两个8字节Ciphertext值
-
这两个8字节的Ciphertext值结合组成一个16字节的值,也就是最终获得的LM哈希
举例来说,如果使用“PassWord123”作为密码,在上述操作中这个密码会被分别转换为:
-
PASSWORD123
-
PASSWORD123000
-
PASSWOR和D123000
-
PASSWOR1和D1230001
-
E52CAC67419A9A22和664345140A852F61
-
E52CAC67419A9A22664345140A852F61
图1: 将密码转换为LM哈希
LM 存储的密码有一些明显的不足。首先是,加密工作是基于数据加密标准(DES)的,DES最初来源于IBM在二十世纪七十年代的一个项目,该项目最终被 NIST进行了改进,并获得了NSA的支持,于1981年作为一项ANSI标准发布。多年以来,DES都被认为是足够安全的,但由于这种小型密钥只有56 位,因此从九十年代开始,已经变得不那么安全。到了1998年,Electronic Frontier Foundation只需要大概23小时即可破解DES。因此,DES开始变得不够安全,并逐渐被三重DES(Triple-DES)以及AES所取代。简单来说,这些都属于其他加密标准,但由于现代计算机的强大性能,很快也被破解。
LM哈希最大的弱点可能就是DES密钥的创建过程。在这个过程中,用户提供的密码会被自动转换为全部大写,并通过补充变为14个字符(这也是LM哈希密码的最大长度),随后会被分为两组7位字符的值。对于由 14个可印刷的ASCII字符组成的密码,有95的14次方种可能性,而一旦将其腰斩为两组7位的字符,可能性就降低为95的7次方种,而如果您只允许使用大写的ASCII字符,可能性将进一步降低为69的7次方种。因此从本质上将,就算您使用不同的大小写字符,并使用长密码,一旦密码被保存成LM哈希,所有的努力都将付诸东流,在暴力破解面前,LM哈希将不堪一击。
NTLMv2密码哈希
NT LAN Manager (NTLM)是由微软开发,用于取代LM的身份验证协议。最终通过改进,从Windows NT 4开始,NTLMv2被用作全新的身份验证方法。
NTLMv2 哈希(下文简称为NT哈希)的创建在操作系统实际参与的工作上更加简单,并需要使用MD4哈希算法,通过一系列数学计算创建哈希。MD4算法需要使用三次,这样才能产生NT哈希。举例来说,“PassWord123”这个密码的MD4哈希就可以表示为 “94354877D5B87105D7FEC0F3BF500B33”。
图2: 将密码转换为NTLMv2哈希
MD4通常比DES更加强装,因为可以接受更长的密码,可允许同时使用大写和小写的字母,并且并不需要将密码拆分为更小,更易于破解的片段。
对于使用NTLMv2创建的哈希,可能最大的不足在于Windows无法使用一种名为Salting的技术。Salting这种技术可以用于生成随机数,并将该随机数用于计算密码的哈希。这意味着完全相同的密码可能会具有完全不同的哈希值,这才是最理想的情况。
在这种情况下,用户就可以创建所谓的Rainbow Table。Rainbow table并不是指五颜六色的咖啡桌,实际上是一种表格,其中包含了由某一数量的字符所能组成的每一种可能密码的每一个哈希值。通过使用Rainbow table,我们就可以从目标计算机提取密码的哈希值,并在表中进行检索。一旦在表中找到相同的内容,就等于知道了密码。正如您所想的,就算由很少字符组成的Rainbow table,整个表也会非常庞大。这意味着此类表的创建、存储,以及检索都是很麻烦的工作。
结论
在本文的第一部分中,我们介绍了密码哈希的概念,以及Windows用于创建和存储这些数值的机制。另外我们还介绍了每种方法的局限性,以及可以用于破解这些密码的可能途径。在后续的内容中,我们将介绍获取和破解这些哈希的方法,并证明局限性的存在。在介绍完之后,我还将提供一些技巧,让您获得更进一步的保护,并创建满足所需强度的密码。
给电脑加把锁
本文已刊载于《电脑迷》杂志,请勿随意转载。
很多人在网吧上网时都发现,大部分网吧的电脑,只要重启动系统,那么之前对系统进行的所有修改,例如安装的程序、在桌面上保存的文件,都将全部消失,电脑会恢复到默认抓状态。同时在使用过程中,一些关键选项可能会被隐藏根本无法操作。
这是个很好的功能,有了这个功能,网吧的管理员就不用担心顾客随意修改电脑,导致系统崩溃,而给自己带来太多额外的工作。而很多人可能还想把这些功能应用到自己家里或公司的电脑中。其实网吧大部分都是通过类似硬件“还原卡”或软件“影子系统”等方式实现这一目的的,这类软硬件往往都需要付费购买。
其实微软也是为普通用户提供了一个免费小程序:Steady State,可以在32位的XP和Vista系统上实现类似的功能,该软件不仅完全免费,而且使用非常简单。因此我们完全可以为需要临时使用自己电脑的人创建一个帐户,并启用该功能,将该帐户可以看到的选项进行限制,并在重启动系统后撤销修改。但自己日常使用的帐户可以不受任何影响。
准备活动
要使用该软件,需要有两个准备工作:安装Steady State软件(下文简称为SS),以及创建临时账户。
SS软件的中文版可在下列地址下载,软件的安装非常简单,只要一路“下一步”即可。
http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&FamilyID=d077a52d-93e9-4b02-bd95-9d770ccdb431。
随后,还需要为临时使用电脑的人创建一个帐户,帐户的创建方法和普通帐户没什么区别,不过需要注意,创建标准账户即可,不需要创建管理员帐户。
在下文中,我们会以具体应用场景为例,介绍该软件不同功能的用法。
限制程序的使用
家里来客人后,可能需要临时使用我们的电脑,这些用途也许非常简单,例如上网看新闻,或者收邮件,因此需要运行的程序也非常少,无外乎浏览器,以及一些聊天软件。因此我们完全可以对客人的帐户进行限制,只允许使用特定的几个程序,其他程序完全不允许使用。让该帐户可完成的所有操作都受到限制。
打开SS软件,窗口右侧列出了本机所有可设置帐户的列表,在其中单击“临时帐户”,随后可以看到该帐户的设置页面。首先请进入“阻止程序”选项卡,随后可以看到图1所示界面。左侧列表中显示的是当前本机运行的进程,点击选中,然后单击“阻止”按钮,即可移动到右侧列表中,禁止“临时帐户”使用。如果要限制的程序没有出现在这里,还可以通过“浏览”按钮添加。
图1,将程序添加到右侧列表,即可禁止“临时帐户”运行
这里需要注意,SS对待软件限制的策略是:如果没有明确禁止使用,则允许。这就意味着,如果只允许用户使用少数几个软件,就必须将所有不允许使用的软件都添加进来。不过这个办法也好解决,我们可以把允许使用的程序快捷方式放在桌面上,然后禁止对该帐户显示开始菜单。这样就算安装有其他程序,该帐户登录后也看不到。具体操作请继续看下去。
限制功能的使用
如果客人只是偶尔使用某些程序,那通过上述方法操作后就能起到很好的限制。但另一种比较令人头疼的问题则是,如果客人小孩,孩子的好奇心往往是非常强的,他们也许会随意修改一些系统配置,这样就算给客人使用专用帐户,也有可能导致整个系统受到影响。
此时就可以使用SS提供的Windows限制和功能限制这两个功能了。还是用自己的管理员帐户登录,并启动SS软件,打开“临时账户”的设置界面,随后需要在“Windows限制”和“功能限制”这两个选项卡下操作。
其中“Windows限制”主要限制了该用户可看到的Windows选项,该选项的内容如图2所示。在这里可以看到,有个列表中显示了大量可删除或可隐藏的内容,而这些内容都涉及到非常具体的Windows选项。因此我们可以从左侧选择不同的限制等级,然后在右侧的列表中对限制进行更具体的调整。
图2,对临时帐户可看到的Windows功能进行限制
不仅如此,在这里我们还可以隐藏具体的分区(哪怕系统盘也可以隐藏)。例如,我们有一个专用分区保存自己的个人文件,那么就完全可以在这里将该分区对“临时帐户”隐藏。隐藏是比拒绝更好的做法,因为隐藏后,别人根本看不到,也就不会有想法;而如果只是用老办法,设置权限或加密,别人还是可以看到这个分区的存在,好奇的人难免会想知道里面是什么。
小窍门:如何禁止使用U盘
在图2所示界面上,我们可以将本地硬盘分区隐藏起来,但是,如何禁止别人使用自带的U盘?因为每次连接U盘后,系统都会自动分配一个可用的盘符,因此我们可以在图2的隐藏驱动器选项里直接将所有可用盘符都禁用,这样因为分配不到盘符,自然也就无法使用U盘了,通过这种方法可以禁止对USB存储设备进行读写操作。如果只是希望禁止将本机数据写入到USB存储设备,则可以使用下文要介绍的全局设置。
“功能限制”选项卡下的内容则主要会应用于IE浏览器和微软Office软件,因为所有选项本身的说明已经很明了,因此这里不再过多介绍。
设置好上述内容后,可以使用临时账户登录,看看自己的限制是否获得了预期的效果。例如在对上文中所有内容进行最严格的限制,然后使用临时账户登录后,可以看到,整个系统已经被大幅度简化,不仅开始菜单中的所有设置内容都消失,而且可以使用的程序也少得可怜。看来我们的限制已经真正生效了。而且注意看图中打开的IE窗口,连IE中的选项也都消失了,只有一个地址栏可以输入地址。在“我的电脑”中,所有本地硬盘分区都没有了,只有可移动存储设备(其实这些也是可以隐藏的)。
图3,被限制后的系统
如果使用临时帐户登录后,发现设置的结果可以满足自己的需要,随后即可重新使用管理员帐户登录,运行SS,并单击“临时账户”,进入帐户设置界面。在“常规”选项卡上,选择“锁定配置文件,以防帐户做出永久性更改”选项,这样,该帐户的所有设置就会被锁定起来。就算用户使用
该帐户登录,并进行了某种修改,只要重启动系统,所有的修改都会被撤销到刚配置好的状态。
这种撤销将只应用于被锁定的临时帐户,其他非临时帐户,或没有被锁定的临时帐户将不受影响。
针对系统的全局设置
在上文的介绍中,我们还真是针对特定帐户进行限制,那么有没有办法针对整个系统的所有帐户进行一些限制?还是打开SS软件,随后单击界面中央的“设置计算机限制”按钮,接着会看到图4所示界面。这些选项的作用都很直观,因此这里不再详细介绍。但是要注意,这些选项将对电脑中的所有帐户生效,因此使用时一定要小心。
图4,会对所有帐户生效的限制
另外可能还有这样一种情况:公司里的电脑,为了实现标准化的配置,要求在安装好操作系统,并按照标准进行配置后,不允许对系统进行任何更改。此时就可以考虑使用SS的硬盘保护功能。该功能可以将所有帐户对系统进行的操作都撤销掉,哪怕是管理员进行的修改也不会保留。其实这个功能就和“影子系统”或“硬盘保护卡”的功能完全相似了。
该功能的原理很简单:在硬盘上创建一块区域充当缓存,对系统进行的所有修改都会保存到缓存里,然后按照设置,在恰当的时候将缓存内容全部删除,系统就会恢复成默认状态。
首先请安装所有必要的软件,并修改必要的选项。随后打开SS软件,在主界面上单击“保护硬盘”按钮,并选择“开”。随后系统会花几分钟时间创建缓存,这个缓存对所有用户都是不可见的,因此可以不用理会。
缓存创建完毕后,需要强制重启动系统。重启动完毕,再次使用管理员帐户登录,启动SS软件,并进入“保护硬盘”页面,随后可以看到图5所示的界面。
图5,在这里可以设置什么情况下撤销更改
在该界面上,可以设置在什么情况下撤销对系统的所有修改。例如,选择“重启动系统时删除所有更改”,这样每次重启动系统后,都会恢复为默认配置。但还需要注意另外一种情况,那就是Windows补丁和杀毒软件的更新。例如,为了保护安全,我们可能需要定期安装Windows补丁以及杀毒软件的更新,这些内容都是需要的,不能被撤销。为此,我们可以首先使用默认的“重启动时删除所有更改”选项重启动系统,将系统恢复为默认配置,然后选择“永久保留所有更改”,接着安装Windows更新,或更新杀毒软件。随后再次重启动系统,并打开SS的硬盘保护页面,重新选择“重新启动时删除所有更改”。这样,之前对Windows和杀毒软件的更新可以被保留下来,但随后普通用户对系统所作更改依然会被删除。
SS软件有着丰富的限制选项,通过不同选项的配合,可以实现非常强大的功能。但限于篇幅,本文无法进行更多的介绍。因此感兴趣的朋友可以浏览该软件的官方网站:http://www.microsoft.com/china/windows/products/winfamily/sharedaccess/default.mspx,这里介绍了更多有关该软件的用法,以及针对不同环境可以采取的设置。相信通过合理使用SS软件,我们的系统可以得到更好的保护。
保持最新状态
这是一篇翻译文章,已刊载于《个人电脑》杂志,请勿随意转载。
使用持续在线的宽带连接的一个不足之处在于软件开发人员将这一点看作了自己程序的一种“保证”,几乎安装版本比较新的任何软件,这些软件都需要通过互联网进行激活或注册。另外,更多的情况则是这些软件可能会安装一些Windows服务或组件,以监控软件新版本或补丁的发布情况。由于恶意软件的存在,软件中的漏洞或Bug很快就会得到利用(这种做法也叫做“0 Day攻击”),因此保持软件的最新状态毫无疑问是很重要的。
虽然对于某些程序,例如反病毒软件,持续更新是很重要的,但耗用电脑的资源频繁检查更新无疑是一种资源浪费。在系统托盘中启动多个专门负责检查软件更新的图标不仅会让电脑的运行速度变慢,而且这些服务通常只能检查主要的版本更新,对于小的补丁或修复程序,则可能还需要手工下载。此类程序中有些只会在运行软件的时候自动运行,因此如果某个程序长时间没有用过,可能会导致一定程度的混乱。虽然我们需要进行的操作只是一些点击或许可,但对于这类服务的工作方式或具体职责,则没有一个明确的标准。因此,从实用的角度来看,很多用户更愿意将此类服务关闭或禁用,但这会导致电脑暴漏在软件漏洞导致的潜在攻击下。
好在情况已经得到了不小的改观。在本文中,我们将介绍一些有用的工具,可用于自动保持所有软件的最新状态,同时还能尽量保证电脑的安全和远离Bug。更重要的是,这些工具都是免费的。
Windows 2008和Vista中的WinSxS是什么?为什么那么肥?
这是一篇MS Technet Blog上的英文文章,我觉得挺有用,就把它翻译成了中文,希望对大家有帮助。原文请访问这里。
对于Windows Vista和Windows Server 2008的安装,有一个很常见的问题,那就是“WinSxS文件夹为啥那么大”。为了回答这个问题,首先需要介绍模块化(Componentization)这一概念,以及Windows Vista中的模块管理方式。
在老版本Windows,以及Windows Vista之间,最重大的变化之一是,从原本的,用inf描述的操作系统,彻底进化为模块化操作系统。Windows中的模块(或者组件,译注)实际上就是一个或多个二进制(Binary)文件、一个编录(Catalog)文件,以及一个用于描述相关文件安装方式的XML文件组成的,从相关的注册表键和服务,到文件所需要具有的安全权限等信息都包含在内。模块是按照逻辑单元进行分组的,而通过使用这些单元即可产生不同版本(SKU,译注)的Windows。
操作系统中的所有模块都保存在WinSxS文件夹中,实际上这个文件夹本身就叫做模块仓库(Component store)。每个模块都有不同的名称,其中包含了该模块的版本、语言,以及适用的处理器架构等信息。对于系统,只在WinSxS文件夹中保存模块,而我们在系统中其他位置看到的,这些文件的所有其他实例,实际上都属于通过硬链接(Hard link)创建的到模块仓库的“投影”(Project)。最后这一点需要重申:操作系统中,每个文件的每个版本只存在一个实例(或完整数据副本),该实例就位于WinSxS文件夹中。因此从这个角度来看,WinSxS文件夹实际上就代表了整个操作系统,并可等同于底层操作系统的“地基”。这也就解释了在执行某些操作,例如系统文件检查(SFC),或者安装额外的功能和角色时,我们可以不再提供安装介质。
这也就解释了为什么这个文件夹刚开始并不大,但随着时间的流逝会越来越大,答案很简单:系统维护(Servicing)所致。在老版本Windows中,维护的最小目标是文件,而在Windows Vista中,最小目标则是模块。在更新某一特定二进制文件时,我们会发布一个新版本的完整模块,这个新版本也和原版本一起,保存在模块仓库中。模块的最高版本会被“投射”给系统,而仓库中的老版本则不会被使用。而这也是导致模块仓库越来越大的第三个原因。
模块仓库中,并非每个模块都是适用的,这意味着并非所有模块都需要“投射”给操作系统。例如,对于可使用IIS,但尚未安装该组件的系统,仓库中就存在IIS模块,但并不会“投射”到系统中任何一个可能需要该模块的位置。如果您熟悉老版本Windows中多分支维护(Multi-branch servicing)的工作方式,那么您肯定就能理解,对于每个发行分支(Distribution Branch)和Service Pack级别,我们都提供了不同版本的模块,而所有这些不同的版本也都保存在WinSxS文件夹中,哪怕这些模块目前并不立刻需要使用。因此,对于一个SP1后(Post SP1) GDR补丁包,如果其中包含对一个模块的更新,最终将会给WinSxS文件夹中安装四个不同版本的模块,对于某些模块,在64位系统上,版本数量还会翻倍。
译注:有关GDR的介绍,请参考下列链接。同时下列链接中的介绍也解释了为什么说GDR补丁会带来至少四个版本的问题。
http://social.microsoft.com/Forums/zh-CN/windowsxpzhchs/thread/7fcd1ccd-01e9-41c9-bc6e-3605ee0277e5
这样您应该能够明白,为什么仓库会慢慢变得巨大,您的下一个问题可能是:我们为什么不直接删除模块的老版本。简而言之,这是为了提升可靠性。模块仓库,以及系统中的其他信息,使得我们可以随时判断某个组件要“投射”的最适合版本。这意味着,如果您卸载了某个安全更新,我们还可以给系统中安装下一个最高版本好的模块,因此这就彻底解决了“无序卸载”的问题。同时这也意味着如果您打算安装一个可选功能,我们并不会简单地直接安装RTM版本的模块,而是会寻找系统中可用的最新版本的模块。而因为系统中每个模块的状态变化,都有可能触发其他模块的变化,而且因为所有模块之间的关系是由系统决定的,因此我们可以用老版本系统中无法实现的方式响应这些需求。
唯一可以安全地给WinSxS文件夹减肥的方法是减少系统可能执行的操作数量,而最简单的方式是卸载卸载首次安装某一模块的数据包,借此即可删除系统中这些数据包的后续版本。Service Pack 1中包含了一个名为VSP1CLN.EXE的二进制文件,这个工具可以将Service Pack数据包永久性固定到系统中(无法删除),并可删除所有相关模块的RTM版本。但只有在确定不再需要RTM版本,永久保留Service Pack的情况下,才能使用该工具。
没错,WinSXS文件夹非常大,并且随着系统的使用,还将继续增大。我希望本文可以帮助大家了解该文件夹的用途,以及可以针对该文件夹进行的操作。但也需要注意,Windows的维护结构(Servicing structure)以及仓库的布局,以后还有可能更改。
Joseph Conway
Senior Support Escalation Engineer
Microsoft Enterprise Platforms Support
开关机速度慢,如何解决?
很多人可能都在纠结于一个问题:自己的电脑开机或者关机的速度为什么那么慢?如何能更快一些。
其实造成“慢”的原因有很多,例如加载了太多软件或后台服务,每个软件和服务都需要自动运行,这自然会延长开机所需时间。而在关机前,如果有软件没能正确退出,或虽然可以正确推出,但系统在等待所有软件将需要保留的内容重新写入回硬盘,这自然会导致关机速度变慢。当然,这些都只是正常情况下的原因。如果所用软件或驱动本身存在质量问题,则速度可能还会更慢。
因此,除非就装一个Windows,然后其它什么都不装,否则,只要安装额外的软件或驱动,都有可能导致系统的开关机速度变慢。当然,大部分情况下,这些影响可能并不明显,可以被忽略。但有些情况下,却非常明显,并且会让人很头疼。
本文不准备详细介绍导致上述问题的原因,以及解决方法,毕竟不同环境的原因和解决方法可能各不相同。本文只打算“曲线救国”,换一种方式解决这个问题,那就是:不使用电脑时,为什么非要把它关掉呢?
有人会说,我要节能减排,降低碳排放。没错,不用电脑的时候,彻底关闭,不仅可以节约能源,而且可以让长时间工作的硬件得到一定的休息。不过,除了关机,您注意过Windows提供的其他几个选项吗?“待机”、“睡眠”、“休眠”,这些选项都是什么意思?有什么作用?分别适合在什么情况下使用?
详细信息,请访问微软E宝典文章:关机、睡眠和休眠有啥区别。
DirectX的版本问题
很多人在安装基于DirectX开发的程序,例如游戏时,可能会遇到游戏安装程序报告说系统DirectX版本不够新,无法运行的情况。但实际上,情况可能并非如此。
DirectX是Windows下大部分游戏运行所必需的,而自从发布以来,DirectX已经进行过多次更新。不仅每隔几年有大版本的更新,而且每几个月,可能还有一些小型的更新。虽然高版本的DX运行环境可以兼容使用低版本DX开发的程序,但反过来是不行的。因此很多游戏开发人员会在游戏的安装程序中使用某些机制,检测本机DX的版本。而检测版本所用的方法如果不同,就可能会有背道而驰的结果。
具体现象
在安装某些游戏时,可能会看到一些错误信息,报告在系统中找不到“d3dx9_**.dll”文件,其中“**”是一个两位数。在看到这样的消息后,很多人尝试安装最新版本的DX,但安装完,重启动系统,再次运行游戏的安装程序,依然会遇到错误。
如果您正遇到这样的问题,其实有一个最简单的办法,那就是把报告缺少的dll文件复制到你的Windows目录下,随后就应该可以正常运行了。要想下载缺少的dll文件,可以到一些专门的网站搜索看看,例如在这里(请注意安全)。
如果希望知道造成这个问题的原因是什么,请继续看下去。
作为开发人员,到底如何正确地检查DX版本
对于上文所提到的错误,主要就是由于游戏开发人员使用了D3DXCheckVersion的版本检测方法。虽然微软提供了这种方法,但这个方法并不好,因此建议不要使用。
简单来说,原因是这样的:在微软每次更新DX(无论是大的还是小的更新)时,都会在DX的库文件中放置一个“d3dx*_**.dll”的文件,其中第一个“*”代表的是DX的大版本号,而后面的“**”代表的是小版本号。因此很多开发人员习惯于检查有没有这个文件,来判断用户的DX是否满足要求。其实这个文件对DX的实际功能没有任何意义,仅仅是为了用于证明DX库的版本。那么问题在哪里?
假设有这样的情况:游戏的开发人员使用了一台运行XP的电脑,并且这个系统已经连续使用了三年时间。在这三年内,每次DX发布更新,无论大小,开发人员都会立刻安装。而每次安装后,系统中都会留下一个“d3dx*_**.dll”文件。因此在最终发布文件之前,开发人员会在自己的系统里找这个文件的最新版本。然后在创建游戏的安装程序时,就会让安装程序检查,看用户的系统中是否存在和自己系统中文件名称完全一样的文件。如果有,就表示用户的电脑环境没问题,可以开始安装游戏;但如果没有,则“认为”用户电脑环境不符合要求,拒绝继续安装。
开发人员是这样,那么用户呢?假设某位用户,购买了一台预装Vista的电脑。Vista已经自带DX 10了,按理说完全可以支持使用DX9技术开发的游戏。但是因为用户环境中的DX是内建的DX 10,没有进行任何升级,他的系统中自然不会存在“d3dx*_**.dll”文件。因此,尽管他的系统已经满足游戏要求,但开发人员所用的版本检测方法是毫无意义的,因此也会遇到本文最开头提出的错误。
因此建议游戏开发人员能尽量不要使用D3DXCheckVersion的方法,而是使用微软推荐的DirectXSetupGetVersion方法。
作为最终用户,遇到这个问题后还能怎么办
首先,有些游戏在发布之前,就打包了所需的DX(通常保存在文件名类似“DirectX”的文件夹中),虽然游戏自带的DX版本可能比我们自己电脑中的还要老,不过在遇到此类错误后,直接运行游戏自带的DX安装程序,即可解决问题。这是最简单的方法,而且覆盖安装并不会影响系统的其他功能。
如果游戏本身的安装文件不包含DX,或安装后依然没用,则可以考虑去微软网站下载最新版本的DirectX Redist。因为DX可能会频繁更新,因此这里不直接给出下载链接,请直接到微软下载中心,使用“DirectX Redist”作为关键字进行搜索,然后找发布日期最新的版本来下载和安装即可。
理念的缺失:Windows 7任务栏 VS OS X Dock
Windows 7带来了全新的任务栏,同时也带来了微软模仿Apple的言论。这一次,虽然微软被指责模仿OS X的Dock,但我们的深入调查发现这两个功能的差异要比相似性更大,虽然没有压倒性的胜利者,但这两种方式都在互相学习。
开启复印机?
Windows 7中全新的任务栏和Mac OS X的Dock有很多相似之处,而相似性中的很多都没什么建设性,并不会让Windows变得和Mac过于相像。就算在Mac用户中,这种新的任务栏也不是人人都能接受,很多人甚至觉得这种Dock非常难用。
表面上看,这两个功能的相似之处很明显:Dock和任务栏都由很大的图标组成,这些图标可用于启动或切换应用程序。然而更仔细查看会发现,在很长时间内,任何人都不需要担心微软盲目模仿Apple。Windows的UI并没有变成Mac OS X的UI,至少目前还没有。
电脑大提速
翻译文章,刊载于《个人电脑》杂志。
如果新买的车在几个月后时速就超不过50公里,或者新买的洗碗机要用一天的时间才能洗干净几个盘子,那您一定会很愤怒,同时肯定会向厂商投诉。然而如果自己的电脑遇到类似的问题,我们可能会很难察觉。和汽车或者其他机械不同,投诉通常并不能解决问题,不过本文可以。我们收集了一系列可以用于优化电脑性能的操作技巧。
本文并不会建议购买新的硬件,同时会尽量选择免费或廉价的软件充分发挥电脑的性能。另外会介绍每个人都可轻松用于优化Windows Vista和XP的技巧。
亚像素显示
这是一篇翻译文章,原文地址:http://www.grc.com/cleartype.htm
工作原理
被拆分的像素:当像素不是一个像素的时候
LCD显示器上最小的图像单元(一个”像素”)实际上是由三个”亚像素(sub-pixel)”组成的:一个红色、一个绿色,还有一个蓝色(R-G-B)。这三个亚像素组合在一起就形成了我们看到的一个像素。
我们用眼睛看到的一个像素是这样的:
但实际上将它放大后我们看到的内容是这样的:
这意味着对于水平分辨率为800像素的LCD显示器,实际上在水平方向上有800个红色、绿色和蓝色的亚像素,交替排列(R-G-B-R-G-B-R-G-B……),因此横向上的总共有2400个单色的亚像素。
如果我们的眼睛看到一条白线:
实际上这条白线被显示为:
因此这意味着,如果我们单独看待实际的亚像素,也就是说,忽略亚像素不同的颜色,那么实际上这条线在水平方向上的分辨率将会是实际LCD上显示的分辨率的三倍。
但是人眼并不能”看见”不同亚像素之间颜色的区别,因为我们的视觉系统会有意将这三种主要的颜色混合为中间色。你可能已经想到了,我们的眼睛只能识别这三种颜色,而对其他颜色的感知都是通过这些颜色的混色产生的。
这有什么用?看看下面的例子 . .
|
|
假设我们需要绘制一个具有倾斜对角线边缘的对象。 如果使用标准的”整块”白像素,那么最佳情况也只能创建出锯齿状的边缘。 所有数字显示系统与生俱来的”像素化”工作原理都导致只能创建类似左侧的显示结果(术语上这叫空间采样,Spatial Sampling)。 |
|
|
但是对于LCD面板,我们可以充分利用每个LCD显示像素中都有的独立的R-G-B亚像素。 因此,如做图所示,通过使用非白色的像素绘制对象的边缘,我们可以创建出更加平滑的边缘,减小锯齿的存在。 |
|
|
虽然对象边缘的像素不是白色的,不过我们的眼睛依然会将其当作相对的白色对待,这是因为亚像素的色彩是和其他原色毗邻的(从上图中就可以看出来)。 因此我们就得到了一个纯白色具有平滑边缘的对象。 |
这和增强显示质量有什么关系
在数字显示设备上增强小字体的显示质量有很大难度,因此字体设计人员总是希望能有更高分辨率的显示设备。
|
|
例如,这是一个微软的标准Times New Roman 字体显示的8pt的常规(非斜体、非粗体)字母”A”,如果仔细看这个字母就可以发现,它很不清楚,而且不如同样的字打印到纸上后锐利。 |
|
|
当我们放大显示以像素为单位的字母”A”的时候,我们只能看到一些色块,根本无法识别这是什么。 从图中可以看出,字体设计人员似乎很希望有真正的斜线,但是限于显示器的分辨率,不得不使用一些折衷的方式,看左侧的图片就知道了。 |
|
|
在上述问题之后,人们开发出一种”抗锯齿”技术,字体设计人员会使用灰色的渐变效果显示像素的”一部分”。这样做的目的在于,我们的眼睛会将两个毗邻的灰色像素看作是居中的一个。 然而,这种技术的作用并不大。对于小尺寸字体,抗锯齿功能会让文字模糊并且降低可读性。 |
|
|
但如果垂直分辨率也可以分成三部分,那就有办法解决了。 如果在垂直方向上有三倍的像素可用,那么字体设计人员就可以创建出的效果接近纸张上的印刷效果的显示字体。 (下面我会告诉你在LCD面板上这种效果到底是怎样的) |
|
|
通过从毗邻的完整像素那里”借来”亚像素,我们可以用是以前三倍垂直分辨率的方式优化文字的显示。 在这种情况下我们的眼睛只能看到白色和黑色,这是因为”借来”的亚像素总是显示为临近像素颜色的互补色,因此我们的眼睛会将这些亚像素看作是白色。 |
亚像素字体平滑还有其他三个好处
字符间距调整
“间距调整(Kerning)”是指对字符之间的间隔的处理,间距处理的好的字体可以通过平滑字体的密度以增强可读性。
但是和大尺寸文字相比,小尺寸文字的间距处理是相当麻烦的:如果两个字符之间只有一个像素的间隔似乎有些拥挤,而间隔太多像素又显得有些松散。但是在我们看来,亚像素平滑可以让字符之间的空间缩短为三分之一个像素,这极大增强了文字的可读性。
字体加粗
字体设计师讨厌的还有粗体字。作为计算机用户,你可能已经注意到了,有时候粗体显得太”粗”了(比预想中的粗),而有时候似乎又粗的不明显。
这也是由水平像素之间较大的宽度导致的:把字符加粗一个像素的宽度会使得字符太粗,但是不增加这个像素则显得似乎没有什么变化。亚像素平滑可以让字体设计师设计字体以创建出最恰当的效果。
字体倾斜
印刷出来的斜体字似乎显得很漂亮,而且可以用于突出显示某些文字,但同时又比粗体字更具有可读性。但是数字系统在处理斜体字的时候则会遇到很大的麻烦,因为所有文字都倾斜了,而从中也可以看出大像素在处理倾斜文字时的不足。
这时候,亚像素平滑就可以通过调整每个像素的位置和宽度的方式完美完成文字的平滑工作,这样我们就可以更加广泛地利用斜体字。
亚像素平滑到底是什么样的
对眼睛看来更加平滑
虽然你可以使用任何显示设备查看下列图像,不过CRT显示器并不能实现亚像素,因此在CRT显示器上并不能看到亚像素抗锯齿和平滑功能,除非使用LCD显示器观看。
另外,正如我在下一节”亚像素平滑的不足”中指出的,并非所有LCD都有同样的线性R-G-B亚像素排列顺序(有些是B-G-R)。因此,我准备了两个图像,一个是针对R-G-B亚像素顺序的,另一个是针对B-G-R的,符合你LCD显示器类型的图像效果会更好,而不符合的那一个则可能看起来很糟糕,并且边缘会出现杂色:
|
传统的整像素图形 |
|
|
传统的整像素抗锯齿 |
|
|
R-G-B LCD亚像素平滑 |
|
|
B-G-R LCD亚像素平滑 |
|
不管使用LCD或CRT显示器观看,你都应该可以看见传统的整像素抗锯齿(上面第二张图片)是如何平滑边缘的锯齿的,不过所需的代价则是图像的模糊,就像失去了焦点。可以想象,”散焦”后的效果已经偏离了增强显示质量提高可读性的本意。因此,整像素抗锯齿并不是用于解决小尺寸文字平滑的好的方案。
透过玻璃看到的结果
如果你没有LCD显示器或者珠宝匠人的放大镜,我将我的Toshiba Tecra的屏幕显示内容拍摄后放大显示,下面两张图片是不同平滑方式下看到的结果:
|
整像素平滑 |
亚像素平滑 |
|
|
|
仔细观察右侧的亚像素平滑图像可以看出,这种方式使用有色的亚像素填充锯齿,如果你从远处观看这张图片,就可以看出这种方式产生的文字更加平滑,同时边缘依然很锐利。另外,在正常的大小和分辨率下观看的时候,也看不到任何杂色(你可以在任何LCD显示器上自己证明这一点)。
那么亚像素平滑对于文字的效果如何?
当然了!该技术对文字效果的改进就和上面列举的图像效果一样有效。在用于平滑文字的时候亚像素一样可以生效。为了能让你在自己的计算机上体验这一效果,我用一个很小(35KB)的32位Windows免费软件Free & Clear来演示亚像素技术的效果。
Free & Clear需要32位Windows操作系统环境(Windows 95/98/NT或者在Mac上运行Virtual PC),Free & Clear说明页面详细介绍了这个程序,或者你可以直接下载(35KB)
如果你手头没有Windows环境,或者如果你只是想简单看看亚像素平滑文本的显示效果,那么请查看下面使用Free & Clear产生的文字范例:
标准的整像素Windows TrueType字体平滑:
美观的平滑文本:
注意:即使第二张图片在CRT上也能看到效果,不过效果并不明显,除非你使用LCD显示器观看。而在LCD显示器上,正如我所希望的,效果非常明显!
无论是否下载了Free & Clear演示,请将你自己加入到我的电子邮件提醒系统(单击该链接即可),因为这个免费的演示程序可能还会继续开发。同时不用担心,如果你因为某些原因后悔加入了,我发送的每封邮件中都会包含退出的方法。
MAC用户请注意:Free & Clear无法在MAC上虚拟机中运行的Windows 95/98里使用,同时我也不打算专门为该软件编写一个Mac版本,不过你依然可以(从上面的图片中)看到该技术的效果,同时你可以在Virtual PC中实验。
亚像素平滑的局限
虽然亚像素平滑很实用,不过依然有一些局限需要注意:
只能用于LCD,不能用于CRT
虽然亚像素平滑显示技术可以用于所有LCD显示器用户,不过需要注意,该技术无法用于高分辨率的阴极管射线(CRT)显示器。没错,我知道上面的图片在你的CRT显示器上看一样有效果,但那是因为任何成熟的亚像素平滑技术同时都吸收了抗锯齿技术(下文中将会提到)的精华。虽然抗锯齿技术可以改善文字的显示效果,因此尽管亚像素平滑比CRT上什么相关技术都不用,不过这种”有色”的方式真的只适合于LCD显示器。
黑白图像的质量最好
正如上面提到的,亚像素平滑的成功取决于使用毗邻的部分像素扩展现有的亚像素,这样眼睛就会感知为稍微有些变色的黑或者白。同时这一技术也可以用于低饱和度的颜色,不过在显示高对比度的黑白图像的时候效果是最好的。白色背景上的黑色文字可以获得最好的效果,同样,黑色背景上的白色文字效果也是最好的。
仅横向,非纵向
从上文可以知道,亚像素平滑只能改善LCD面板的横向分辨率,而令人难以置信的是,”横向”的改善正是文本最需要的!加粗的文字只是作用在横向上,而文字间距的调整也只是将文字做横向的移动,同时文字的倾斜也是在横向的位置上进行的。然而,这意味着目前的彩色LCD面板技术,在面板被用于垂直或者纵向的方向后将不能使用亚像素平滑。
对我来说,令我对当前硬件的这种应用的激动降温的重要原因是电子书,因为电子书使用了类似传统书籍的纵向操作方式,而这完全无法兼容于现有的彩色LCD结构下的亚像素平滑技术。
然而,没有什么能阻止为电子书专门研制的新型的LCD面板。这类面板垂直方向要比水平方向更长(用于纵向操作),同时可以像现有LCD面板那样确定亚像素的方向。只要能够清晰显示彩色图像,并同时可以使用亚像素平滑技术改善文字显示质量,这类新式的显示器就会被尽快用于电子书。
亚像素顺序敏感度
|
|
因为亚像素平滑严重依赖在物理上毗邻的亚像素,因此平滑机制必须知道像素的排列顺序是红-蓝-绿还是蓝-绿-红(目前现有的LCD面板只有这两种排列顺序)。 如果亚像素平滑机制的顺序弄错了(如做图所示),那么最终的结果将会更糟糕。 |
因为很少有LCD面板的亚像素排列是B-G-R,大部分都是R-G-B,因此任何正式投入使用的亚像素平滑技术都要求有用户设置的(或操作系统可读的)选项以告诉系统的LCD平滑引擎亚像素是”正序”还是”逆序”排列的。
使用方式
如果你还没有阅读或者完全了解上文的内容,那么请首先仔细阅读上文。下文会假设你已经了解了所涉及的概念。
如果你可以接触到任何32位Windows环境(Windows 95/98/NT4,包括在Mac上运行的Virtual PC),那么你可能会希望在阅读下文的同时使用Free & Clear进行一些测试,这样你就可以按照文中的介绍自己尝试了。
“简单”的理论有点太简单
为了最好地理解有关亚像素平滑的基本理论(见上文)和现实之间的冲突,让我们先返回去看看一些现实世界中的例子。在我们的测试中,我们会使用”Sample Text String”这个字符串,并设置Windows 14 pt的Times New Roman字体:
我故意选择这个字体和字号是因为这样能清除地说明问题。如果我们将该字符串转换为简单的亚像素,那么结果应该是这样的:
正如你所看到的,在任何计算机的显示设备上,这个结果中都有很明显的”杂色”问题。为了能通过增强的基本理论解决这一问题,让我们首先了解一下问题出在哪里。
正如我们所知道的,亚像素平滑技术实际上是利用LCD显示器可以直接寻址(directly addressable)的亚像素将显示器的有效水平分辨率扩大三倍。因此,我们首先需要三倍宽度的文本图案,并要包含三倍的平滑信息。实现这一目标的一种方法是将文字在水平方向上拉宽三倍,并转换成标准的白色和黑色,像这样:
让我们把字母”m”放大仔细查看:
当以三倍水平分辨率进行平滑的时候,字母”m”的三条垂直的腿被转换为五个像素的宽度。当然,当我们将结果转换回显示器上并使用亚像素显示(这时候三倍宽度的文字也会显示为正常尺寸)的时候,这实际上是指五个亚像素的宽度。以三倍像素方式显示(上图)的五个像素宽的”m”的腿告诉我们,当在正常分辨率下显示的时候,TrueType轮廓平滑引擎会将这些腿显示为一又三分之二个正常像素(也就是5个亚像素),但是TrueType又必须将其转换为两个标准像素。这就是导致”m”的腿显得更粗的原因。不足的显示分辨率,这正是亚像素平滑技术要解决的问题。
目前为止似乎一切正常,当时看看当我们将三倍像素宽度的文字转换为LCD显示面板上的R-G-B亚像素后发生的情况:
因为字母”m”的三条腿的宽度不是三的整数倍,因此腿的左右两侧边缘都是红色的亚像素(从上图很容易看出这一点),这也解释了当我们在正常尺寸下看到的经过亚像素平滑后的文字边缘呈红色的原因。
另外需要注意的是,字母”m”的腿显得很”黑”,那是因为腿的显示使用了下列亚像素顺序:G-B-R-G-B,这意味着有两个绿色和两个蓝色的亚像素被关闭了,但是只有一个红色亚像素被关闭。这就形成了一种叫做本地色彩失衡(Local Color Imbalance)的现象,而我们的眼睛对这种本地色彩失衡是很敏感的。因为因为字母”m”的周围有更多红色,因此我们的眼睛为了平衡亚像素颜色,就让我们看到了红色。
标准的整像素平滑并不存在这样的问题,因为额外的三倍R-G-B像素都被当作完整的单元来对待。但一旦我们开始单独对待亚像素,而这才是亚像素平滑的目的,我们就得面对本地色彩失衡的现象。
那么该怎么解决这一问题
其实解决的办法也很简单和直接,而且只需要对策略进行一些微小的改变。我们只需要将每个亚像素的”能量”分散到毗邻的两个亚像素即可:
换句话说,当一个亚像素被”打开”后,我们只将其打开1/3,然后将左右毗邻的两个亚像素各打开1/3。这样,不再是每个单一的亚像素独自承担所有”能量”,我们会让这个亚像素的邻居一起承担。
这样为什么有效?因为按照定义,每个亚像素左右两侧的邻居都是互补的两种基色,因此这种”能量分散”方式就可以有效地重新平衡失衡的颜色。如果仔细考虑一下就会发现,在同一时间,我们总是会打开R-G-B(或G-B-R或者B-R-G)亚像素集,因此就更不可能出现本地色彩失衡的问题。
下面是一张大图,显示了未经筛选的亚像素线,以及经过分散后筛选了的结果:
用语言描述就是:”筛选”后的亚像素的强度和其左右两侧毗邻的亚像素的亮度都是该像素原先亮度的1/3。因此,如果一个亚像素以及它的邻居都是”打开”的,那么就是全亮;而如果该亚像素或者它的一个或两个邻居都关闭了,那么实际亮度将会是2/3、1/3或者彻底关闭。
这种解决方式的有趣之处在于三倍宽度的”水平分辨率”信息依然会呈现在显示结果中,同时保证本地色彩相当平衡。
这种”能量分散”方式的一个不足在于可能会使显示结果有一点模糊,不过我们依然可以通过一些方法解决这一问题。模糊是由毗邻的亚像素比中间的主要亚像素具有更多的能量导致的,因此我们只需要降低两侧亚像素的能量但依旧维持本地色彩平衡即可。
我们可以通过再次进行”筛选”做到这一点:让这三个相关联的亚像素将自己的能量分散给它们的三个邻居即可,形象的例子是这样:
仔细研究上面的图可以发现,因为我们再次将一个亚像素的能量分散到三个毗邻的不同颜色的亚像素上,这一操作必定能维持完美的颜色平衡,但同时因为将自己的能量分散到毗邻的亚像素上,这必然导致亮度的进一步下降。
因为两次分散影响了三组亚像素,因此能量的分散结果导致的亮度变化如下:
图像处理大师可能会把这叫做是系数为[1/9, 2/9, 3/9, 2/9, 1/9]的五行低通窗口过滤器(five-element low-pass windowing filter)。你可能已经注意到了,这五个系数的总和是1.0,因此最初中央亚像素的全部能量都被分散的五个亚像素完全表现了出来。
通过将原始亚像素的能量分散在五个最毗邻的亚像素上,我们可以在保持最完美的本地色彩平衡的基础上将大部分能量都保留在中央亚像素上,这是一个相当酷的解决方案。
结果是什么样的
下面是单词”Sample”使用未筛选的亚像素方式平滑后的结果,原始大小和放大后的结果:

如图所示,”m”的竖直部分在原始大小下显得非常红,放大后查看就更加明显了。但是通过过滤产生本地色彩平衡可以完全解决这一问题。下面是同样的亚像素平滑结果,只不过这个结果进行过五行低通过滤,是这样的:

最后,我们上面提到的示例,过滤和未过滤后的结果是这样的:

如果在LCD显示器上看过滤后的结果,结果显然会非常令人满意。
直观的感受
很多(相当多的)人说我的亚像素平滑文字范例在自己的特丽珑或者一般的CRT显示器上效果确实很好,而我却还坚持说亚像素平滑结果在LCD面板上才能看到效果。幸好这个”直观”的感受解释了为什么亚像素平滑技术在非LCD显示器上也能起到部分效果。
|
|
这是一个标准的TrueType显示,12pt,Times New Roman字体,标准的字母”S”。这是在整像素方式下可以实现的最好效果,因为所有像素要么完全”打开”要么完全”关闭”(也就是不包含任何抗锯齿技术)。 |
|
|
这是同样的字母”S”显示在同样的网格中,但是这个字母使用亚像素平滑技术进行了三倍水平分辨率上的平滑。 请仔细将其与上图对比,并注意本图中像素的位置和宽度又怎样的变化。请注意两幅图中第2行和第3行的第一个像素(左侧),注意当TrueType平滑提供了更大的水平分辨率后这两个像素是如何变为原先的1/3的。同时请从远处看这个字母的整体,注意第二张图片中的字母”S”的显示有什么改进。 |
|
|
这张图片和上图内容相同,只不过将像素中缺少的部分用灰色填充。请注意,如果一个像素只被填充了1/3的黑色后剩余部分是如何用浅灰色填充的,同时如果一个像素被填充了2/3的黑色后剩余部分会使用深灰色填充。这就是抗锯齿的本质。 接着对比着查看第二和第三张图片,你可以发现抗锯齿技术是如何将像素的”能量”分散到毗邻的两个像素以显示1/3黑色像素(上图中)旁边的区域的。我们的眼睛会尽量将它们均衡在一起。 |
|
|
这张图片显示了完整的技术,包括对字母”S”的多重过滤以及亚像素平滑。也许这种技术最合适的名称是”有色抗锯齿”。 有色抗锯齿技术最值得注意的是,因为LCD显示器的亚像素顺序是R-G-B,因此实际的颜色等同于垂直位置的视觉能量。 例如,再次查看第二和第三行的前两个像素,分别是红色和蓝色。而因为像素的元素是R-G-B,左侧的像素通过关闭绿色和蓝色亚像素可以获得红色,因此这个像素的”暗”边缘就会显示到像素的右侧。在蓝色的像素中,通过关闭红色和绿色亚像素可以获得蓝色,因此它的”暗”边缘就被移动到左侧。而这样的像素移动就是TrueType平滑引擎要做的。 |
有关亚像素平滑技术,我需要指出的是:该技术在直观上类似于在R-G-B方式的LCD面板上实现的色彩抗锯齿(colorized anti-aliasing)技术,亚像素左右两侧的颜色可以帮助我们看到更加平滑的显示结果。
那么,为什么这种技术在CRT显示器上一样可以看到效果?
|
|
左图显示了亚像素平滑技术为什么会在CRT显示器上生效(只不过效果不那么明显)。 在这幅图中,我们隐藏了亚像素原本的颜色,而是将每个像素最终的能量结果(而非其颜色)显示出来。最终我们得到了一个灰度图像,那么我们得到了什么?最古老的抗锯齿技术,类似上面的第三个”S”。 |
因此我的观点是,就算是CRT显示器(哪怕是特丽珑)也无法正确处理亚像素技术带来的色彩抗锯齿信息,因此最终只能显示最古老的标准抗锯齿图像,这当然要比没有任何抗锯齿技术时的效果要好,但因为LCD独有的将色彩转换到不同位置的功能,因此LCD上的显示效果要更好。
就是这么简单
我的希望是,任何对该技术有兴趣的人都可以并真正在自己的显示器上使用亚像素平滑技术,正如你所看到的,这真的没什么复杂的,因为显示结果本身就证明了这一点。
感谢你的关注!
Windows中一个很糟糕的用户体验
相对来说,在大部分操作系统中,Windows的用户体验已经是很不错的了,尤其是根据一些信息可以知道,微软对于自己的大部分产品,尤其是面向一般用户的产品,都会在用户体验方面进行大量的努力。然而目前Windows的用户体验还有很多地方需要改进,也许就像上次”哎呀呀”说的,我是一个完美主义者吧,如果某个东西让我感觉很困扰,那我真的会很不爽。
请先假设这样一种情况:我们正在安装一个非常耗时的软件,例如整个安装过程需要将近一小时,而且其中会多次弹出窗口或对话框,与用户进行交互(自然,这个软件的体验很糟糕)。因为需要一个小时,我们肯定不会坐在电脑前傻傻地看进度条(其实有时候我有这嗜好,如果你也有,可以加入豆瓣上的爱看进度条这个组),而是会找其他一些消遣。例如我,可能会抓紧时间写一些文章,或者看电子书。这些活动都有一个特点:需要频繁按下空格键。写文章的话,需要按下空格键让输入法中选择的词语上屏,而看电子书的时候,我习惯用空格键翻页。
然而,这时候,正在安装的那个软件的安装程序(假设已经安装到95%的进度,花了50分钟)突然因为某种原因出错了,于是自动弹出了一个对话框,并保持最前。这个对话框中列出了错误的具体原因和解决方法,并提供了两个选项”继续”和”取消”,而且焦点是默认放在”取消”上的。但问题在于,当出现这个弹出窗口的同时,我们可能正在按下空格键。那么这就可能导致一个很严重的问题:我们可能根本还没来得及看到具体的错误原因,因为手的速度更快,在按下空格键的那一瞬间,弹出窗口突然出现了,并且焦点在”取消”按钮上,于是软件的安装程序自动退出了,并且之前的安装操作全部被撤销,而我们根本没有看清楚具体的错误信息是什么。
想要解决问题吗?那么再用50分钟等待,然后看错误信息吧。当然,这一次你可能不打算在干其他事情了,就盯着进度条犯傻吧。没准有看进度条嗜好的人都是这样养成的?
所以这里我就有一个问题:Windows为什么允许让弹出窗口自动保持最前?而不是在后台打开,并在任务栏上用一个变色的任务栏按钮来提醒我们的注意?如果是这种情况,既不会干扰到我目前的工作,也不会导致误操作,岂不是皆大欢喜?如果真的因为确实需要引起用户的注意,而强制让弹出窗口保持最前,那么能不能不要设置默认的焦点,无论你将焦点放在”继续”还是”取消”按钮,或其他类似的按钮上,在上述场景中都有可能导致无意识的误操作。或者让窗口显示在最前,但不夺取当前的操作焦点,例如Windows Live Messenger的联系人上线提示那样,保持最前显示,但不夺取焦点,我们依然可以直接操作原先的程序。
这个问题虽然并不大,但影响绝对不小,而一旦遇到一次,导致的后果可能会 很严重。Windows 7的Beta测试马上就开始了,我已经收到了测试邀请。等测试正式开始后,考虑将这个问题反馈上去,希望这次获得的回应可以不是”By Design”,而是一些更实际的反应。

































最新评论