如果两个程序都这样做会怎样?

在脑子里“设想如果可以这样”,这种方法能帮助你理解Windows是否会允许让你做这种或那种事情。如果这种设想会明显的导致一种自相矛盾的情况,或跟人们已经接受的原则体系相冲突,那你可以明确的得出Windows不会支持这种行为的结论。(当然,如果没有明显的矛盾或冲突,也不能证明Windows就一定会支持这种操作。但用这种方法你可以排除一些明显的不正确的想法。)

问“如果两个程序都这样做会怎样?”也是一种非常有用的甄别一个功能特征或设计想法是否合理的好方法。配合“设想如果可以这样”,它们能成为一个漂亮的组合拳。下面是几个例子:

“我怎么才能创建一个窗口,让它永远不会被其它窗口覆盖,即使那些最上层的窗口也不行?”

假设这样如果是可以的,加上如果有两个程序都这样做。程序A创建了一个“最上层”的窗口,程序B也这样做了。现在用户拖动这两个窗口,让它们重叠,会发生什么?你给自己创造了一个逻辑冲突。这两个窗口必须有一个在上,一个在下,推翻了假想的“超级最上层”设计想法。

“如何突出我的进程,让它成为在系统关机时第一个/最后一个接到通知?我想在系统关机时在所有其它程序退出之前/之后做一些事情。”

假设如果这样可能,假设两个程序都这样做。你现在有了两个程序都希望做第一/最后。但你不可能有两个第一或两个最后。其中有一个必须要放弃。(这个可以推广到其他的人们想要第一或最后的事情上。)

“如何能保证当用户双击.XYZ文件时总是我的关联程序会启动运行?”

假设这是可能的,假设两个程序都想这样。当用户点击.XYZ文件时,哪个程序运行?

这种情况下的一种解决方案是用户来选择文件的关联程序;但一旦用户决定让另外一个程序来执行.XYZ文件,那你不得不接受这样的事实。

对于很多这种“我想成为这最X”类型的问题,程序员通常会想出一些伎俩,比如运行一个定时器周期性的检查自己是否仍是最X,如果不是,就重新把它推到X位。不久,你就会开始停下来思考,“如果两个程序都这样做会怎样?”,于是认识到这是一个糟糕的想法。

就算是我这样解释了,很多人仍然不得要领。我让他们去想想“如果两个程序都这样做会怎样?它们会打架,”而我得到的回复是,“我可以让第二个程序检查第一个程序是否在运行。”他们不明白第二个程序不是他们写的。

当出现两个程序这样“互殴”时,我们无法预料哪一个会赢,但我们可以确定的、100%的预料的谁会输:用户。

我还清楚的记得有一回同事让我看有两个非常流利的商业软件都想成为当用户点击.XYZ文档时被调用的程序。因为这是没法保证的,于是软件里就提供了定时检查的程序试图解决这个问题。

你安装了第一个程序,它把自己设置成.XYZ文件的关联程序,这看起来很正常。然后你安装了第二个程序,它也把自己设置成.XYZ文件的关联程序,这样第一个程序就跳出来说,“不,.XYZ应该是由我来处理的”,并且把文件关联改了回去。而第二个程序也说,“没门,我才是处理.XYZ文件的程序”,并且把自己重置回去。

这种小孩斗气式的游戏进行的时候,用户只能无助的坐在那里发愣的看着.XYZ文件的图标在两个程序间换来换去。这两个程序都坚持认为让自己来处理.XYZ文件是在为用户着想。

[英文原文:What if two programs did this? ]
分享这篇文章:

11 Responses to 如果两个程序都这样做会怎样?

  1. SR1 says:

    哇哦~新版页面好看多了~~

  2. null says:

    最让我恼火的事情就是,我在猛敲键盘的时候另一个程序弹出一个对话框,我又刚好按了回车或者空格.结果不知道确认了什么东西.Windows为什么不限制每个进程的模式对话框弹在各自的顶层然后闪动任务栏就够了.不要去打扰当前的活动窗口,用户才是电脑的主人.

    那个My Documents就不提了,里面没几个目录是”我的”.

    • Anti says:

      抢占当前窗口简直让人烦透了

    • 独行猫儿 says:

      这个问题的确恼人

    • 抓狂 says:

      顶!尼玛的弹出窗口、抢占窗口

    • Yonghang Jiang says:

      同意!
      还有的时候我明明双手都在键盘上打字,突然右下角来个提示窗口,还是不能用Alt+Tab切换到的那种,不得不去拿鼠标,感觉糟透了。
      还有就是那种需要长时间工作、带有进度条的操作,比如拷贝或移动或删除,你永远不知道它什么时候会弹出一个对话框问你“你确定要操作只读文件XXX吗”,直到你真的遇到一个然后点击“Yes to all”为止。所以你不得不在电脑前等待,而且还时刻提心吊胆。

  3. 优优 says:

    很多时候,都是采用,默认+设置的方法。没有什么是超级必须的。用户自己的选择是关键。至于应用之间,要想成为超级,那必须让用户觉得你爽。他自然会关联你去处理。

  4. 忧郁 says:

    “用户只能无助的坐在那里发愣的看着.XYZ文件的图标在两个程序间换来换去。”—-若是你电脑里面有好几个播放软件,你会发现你电脑里面的电影的图标和打开方式,取决于你上一次打开了哪种播放器。

    • toshio says:

      中了,不过一般都可以设置把”总是关联”的勾去了,但是一旦软件更新后又来了,必须又重新设置,还有开机启动也有这个问题,每次一批量更新完软件,下次一开机,又是一大堆软件启动了

  5. common0015 says:

    真的很有用

  6. toshio says:

    “Raymond Chen是微软Windows Shell开发团队中的知名程序员,从1992年加入微软开始,他参与过OS/2,Windows 95,DirectX已经以后版本的Windows的开发。”
    应该是”Windows 95,DirectX以及以后版本的”吧?

发表评论

电子邮件地址不会被公开。 必填项已用*标注

This site uses Akismet to reduce spam. Learn how your comment data is processed.