深度分析灵格斯划词翻译和多种软件冲突的原因
关于灵格斯划词翻译所引起的冲突具体表现和解决方法,详见我的另一篇帖子灵格斯划词翻译:看上去很美,这里不再赘述。为使内容通俗易懂,我将避免使用专业术语。有兴趣的朋友可以搜索中断、Hook等词语来获取技术上的参考资料。
从种种迹象来看,灵格斯的作者kevin使用了一种极为霸道的方法来实现划词翻译功能,通过注册鼠标双击事件(及划词事件)来触发Ctrl+C操作,并截断Ctrl+C事件以获取鼠标所选中的内容。简单来说就是,当用户在灵格斯开启的情况下,无论灵格斯窗口是否被激活,用户双击鼠标将同时自动引发Ctrl+C行为,这通常是复制功能的默认快捷 键,这就是为什么在Firefox中会出现复制粘贴异常,细心的用户或者发现了在IE浏览器中却又没有这样的问题,为什么会这样?这我一会再讲。
而由于在完美解码默认的播放器KMPlayer中,Ctrl+C是截图的默认快捷键,既然鼠标双击被灵格斯绑定Ctrl+C操作,因此就引发了完美 解码(KMPlayer)的截图操作,恰巧在KMPlayer的默认设置中截图操作又是被禁止的,之所以就出现了一中的画面。也正是由于触发C键,在许多 用到C键的游戏中,对应的功能会自动施放,因此出现了上面所说的第三种冲突。
在Firefox中,这种绑定导致的现象是鼠标双击或者划词都会使鼠标选中的部分被复制,这导致之前复制的内容失效,用户继而发现粘贴的内容不正 确。比较特殊的是,这种情况并不会在IE中出现,这里浆糊要告诉大家一个有趣的现象:在灵格斯开启划词翻译的情况下,在Firefox中通过右键复制或者 Ctrl+C复制一组词,然后鼠标双击或是划词选中另一组词,试试看分别在IE中粘贴和在Firefox中粘贴,结果是IE中粘贴得到的是之前复制的内 容,而Firefox中得到的却是之后由鼠标选中的内容。
这看上去好像是Firefox的问题,并且根据我得到的信息来看,远不止一个人发现这样的问题,其中就有人在灵格斯论坛求助(有国内的也有国外的,灵格斯还是很受欢迎的),下面截取的一段包含有作者kevin的回复:
从kevin的回复来看,似乎这是Firefox的问题并且Firefox团队正在联系改进。事情真的是这样吗?从上面的分析和小实验可以看 到,Firefox确实没有使用系统剪贴板,有兴趣的朋友可以通过Win+R(或者开始->运行)输入clipbrd监控系统剪贴板来更清楚的看 到。为什么会这样?
事实上是Firefox有自己的缓冲区,在Firefox中进行复制不仅复制到了系统剪贴板,也复制到了firefox自己的缓冲 区;Firefox会监听系统剪贴板的改变,在系统剪贴板内容没有改变的情况下执行粘贴操作将使用它自己的缓冲区。IE没有出错是因为它是直接从系统剪贴 板获取,灵格斯为了避免影响系统剪贴板内容,在短时间内截断了系统对Ctrl+C事件的响应,但却无法阻止其他程序执行自己的Ctrl+C事件,导致了系 统剪贴板没变而Firefox缓冲区变化的结果,这就是为什么Firefox中粘贴出来的是鼠标选中的内容。
从本质上来说,仍然是因为灵格斯的设计和Firefox的Ctrl+C事件冲突了。难道灵格斯要所有的软件都不准用Ctrl+C,只有自己可以用吗?显然不是这样的,灵格斯从一开始就内置了解决方式(过滤规则),说明kevin并不是没有想到这一点。
结语,灵格斯无疑是一款出类拔萃的取词软件,作者kevin的单独开发也让人敬佩,作为一款免费软件,我们不应该苛求很多。但作为一款有大量用户的软件, 是不是更应该为用户着想一下?别说普通用户,就是浆糊在初遇这些问题的时候都是莫名其妙,即便有过滤规则,找出是灵格斯的原因也花了不少时间。而从过滤规则里一大堆的默认过滤程序可见,这种设计对于开发者也增添了额外的负担。

7 Responses
Leave a Reply谢谢博主分享。。祝博主国庆快乐。
学习了。。谢谢分享
謝謝LZ分享~~佩服LZ探討精神,我想問一下,靈格斯和office衝突這個問題如何解決?表現在,我在word或者PPT上用劃詞翻譯的時候~office軟件會自動關閉。
的确很烦。 。
是很烦,导致我的word经常崩溃。已经把它休了,换成有道了。但也实属无奈。
博主可以和kevin反映一下啊
我用灵格斯也是升级某次后,划词翻译就经常崩溃! 真的没办法吗?