一直以来,我都很头痛 popo 的一个设定。就是明明我的默认浏览器是 opera , 在 popo 的编辑框内点击 url 还是会启动 IE 。
popo 组的人似乎埋头做他们的 popo 2006 ,对于我们这些 popo2004 用户不太理睬。我提了几次意见,他们都不想真的去解决。除了 IE ,popo 组的人只关心 firefox 能不能用,这让我这个 opera fans 很伤心,只好自己动手解决了。
先反编译 popo.exe ,找了一下。发现了一段冒似处理 URL 点击的代码,但是打了 patch 后不解决问题。后来才醒悟过来那段代码是处理 popo 界面上的 url 的。又 grep 了一下那一堆 dll ,感觉编辑界面是由 ExtraEditor.dll 负责的。然后在这个 dll 里找到了一段和 popo.exe 中 2 进制几乎相同的代码。
这个比较寒,我个人是很反对 copy - paste 代码的,那反应的是某种设计失误。不同的是 ExtraEditor.dll 这个东东里面还有 pdb 信息,似乎开发者不太放心,放了个 debug 版出来 (._.!) 。这让我得到了关键函数的名字:
CExtraEdWnd::IsUsingIEAsHttpBrowser
看名字,这个函数好象用来检测系统默认浏览器是否是 IE 。分析了下实现,是通过读去注册表项和其它一些手段实现的。其方法不太专业,也没细看。反正我的机器明明设置的 opera 做默认浏览器,但是这个函数依然认为我偏好 IE 。
一旦认为系统设置的是 IE 做默认浏览器,popo 会用 ShellExecute 强制调用 iexplore.exe 打开 url 。而如果不是 IE 则不填写浏览器的名字,这样就不会强制用 IE 了。
就这个奇怪的设定,我问了 popo 组的同事。他们的说法是,如果 ShellExecute 直接打开 url 的话,当用户机器默认浏览器用的是 IE ,那么新的页面会在用户已经打开的 IE 窗口中打开,把用户已经在浏览的页面覆盖掉。而指定 iexplore.exe 就不会。
我强烈 BS 这种头痛医头的的解决方案。不过话虽如此,我也没想用啥更好的方法来做,反正我也不用 IE ,所以就把这个奇怪的设定跳过去,禁止 popo 强迫我使用 IE 打开网页。
方法很简单,把 ExtraEditor.dll 中偏移量为 0x00048FBE 地方的 0xEB 改成 0x74 就可以了 :)
ps. 我查了一下 IE 的设置,发现是否重复使用当前打开的窗口其实是由用户自己决定的。在 Internet 选项—高级—(倒数第3项)重新使用启动快截方式的窗口 。奇怪的是,似乎大多数人都希望可以启动一个新的窗口打开 ShellExecute 引导的 url ,但是这个选项却是默认勾选上淹没在茫茫的 option 菜单海洋中。