IE 新开窗口最大化终极解决方法。 The end way to maximize Internet Explorer On Opening

 

下载该文件解决此问题:

最近收到一位朋友的抱怨,问我知道如何让IE打开后都是最大化的,我说简单啊,建立个快捷方式,设置快捷方式的打开窗口模式为最大化就可以了,结果人家说的不是这个意思,人家的意思是不但第一次打开IE窗口是最大化的,从IE窗口中的网页链接打开也要最大化的,我当时想这个IE窗口不是记忆最后一次窗口打开的尺寸么,难道这个新开的链接的窗口模式跟其他的不同,结果在自己机器上一实验确实存在这个问题,于是找IE的组策略设置,希望能够发现有用的东西,却发现找不到这样的设定,而通过搜索引擎搜索的结果,大部分都是玄乎的东西,什么先重置Window_placement 注册表的值,再打开IE调整窗口大小,还要按住什么ALT+Close按钮,我操作了很多次,发现虽然有时可以调整新打开的IE窗口的大小,但是要看运气的…所以我想还是自力更生吧,windows 的东西基本都是注册表的配置嘛,首先同步了下live.sysinternals.com 的tools,拿出procmon开始监视注册表,说真的这个IE的注册表改动多啊,监视了半天还是把最后的注意力放在了window_placement这个注册表上面,我的直觉发现,这个东东的不同数值控制了IE窗口的显示。

经过长达4-5个小时的努力,还有不停的实验,还有方便实用的powershell的分析,包括十六进制十进制互转,字符串操作,终于让我找到了window_placement的工作方式,我们可以只通过一个注册表导入,即可解决IE窗口的这个问题。

1.首先来看看我的终极注册表

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main]

"Window_Placement"=hex:2c,00,00,00,02,00,00,00,03,00,00,00,ff,ff,ff,ff,ff,ff,\
  ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,00,00,00,00,00,00,00,00,00,09,00,00,00,07,00,\
  00

参考了http://msdn.microsoft.com/en-us/library/ms632611(VS.85).aspx

typedef struct tagWINDOWPLACEMENT {
  UINT  length;
  UINT  flags;
  UINT  showCmd;
  POINT ptMinPosition;
  POINT ptMaxPosition;
  RECT  rcNormalPosition;
} WINDOWPLACEMENT, *PWINDOWPLACEMENT, *LPWINDOWPLACEMENT;

FLAGS有三种:
WPF_ASYNCWINDOWPLACEMENT    0x0004
WPF_RESTORETOMAXIMIZED        0x0002
WPF_SETMINPOSITION        0x0001
showCmd 有下面几种:
SW_HIDE 0    Hides the window and activates another window.
SW_MAXIMIZE 3    Maximizes the specified window
SW_MINIMIZE 6    Minimizes the specified window and activates the next top-level window in the z-order
SW_RESTORE  9    Activates and displays the window. If the window is minimized or maximized, the system restores it to its original size and position. An application should specify this flag when restoring a minimized window     
SW_SHOW     5    Activates the window and displays it in its current size and position
SW_SHOWMAXIMIZED 3    Activates the window and displays it as a maximized window
SW_SHOWMINIMIZED 2    Activates the window and displays it as a minimized window
SW_SHOWMINNOACTIVE 7    Displays the window as a minimized window. This value is similar to SW_SHOWMINIMIZED,
except the window is not activated.
SW_SHOWNA 8
SW_SHOWNOACTIVATE 4
SW_SHOWNORMAL 1       
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\Window_Placement 的键值的秘密:

window_placement的十六进制数值每四位代表一个数据,而且数据的顺序是反向的,如2c,00,00,00 代表0x0000002c ,十进制就是44,
44是什么意思呢,代表这个windows_Placement的长度是44,不信你可以数数有多个逗号分隔的数据。

因此我们这里可以分析出,前四位2c,00,00,00 这个数一直是不变的,也就是数据位数一直都是44
接下来的02,00,00,00 是一个数据,这个十六进制是0x00000002 十进制是2,应该代表上面结构中的flags ,值2 代表WPF_RESTORETOMAXIMIZED   
再接下来的03,00,00,00 是一个数据,十六进制是0x00000003 十进制是3,代表whowcmd 值3代表SW_MAXIMIZE
接下来的所有ff代表分隔符,没有意义的。
接下来的数据也是每四位代表一个数据
第一个00,00,00,00 十六进制0x00000000 代表打开的新窗口的左上角x坐标是0
第二个00,00,00,00 十六进制0x00000000 代表打开的新窗口的左上角y坐标是0
第三个00,05,00,00 十六进制0x00000500 代表打开的新窗口的右下角x坐标是1280
第四个20,30,00,00 十六进制0x00000320 代表打开的新窗口的右下角y坐标是800

最后两个坐标位置跟自己的显示器分辨率对应,当然实际上你设置此值之后,因为IE最大化的时候,还有任务栏窗口占了一个位置,所以右下角的坐标位置其实不一定等于我们的分辨率值,一般会小,这个你设置注册表后,打开IE后,其会自动调整这个值为合适的大小。

总结上面的经验我们有二个经验总结:

  1. IE新开窗口最大化实际上由计算机的分辨率大小决定,特别是最后的四个坐标值,其中前两个左上角点的坐标值我们只需取0.0即可,但是后面两个坐标值的取值要根据屏幕分辨率大小和桌面工作栏窗口的大小决定,所以这是一个难点。
  2. 我后来发现,如果你设置最后两个坐标值的数值超过你的分辨率大小或者说IE最大化时,窗口右下角的坐标位置数值的时候,WIndows 会自动调整这个数值为一个最合适的值(这个动作在你打开新的IE窗口时完成)

有了上面二个经验,我们的IE窗口最大化的解决方法就明确了

1.构建一个分辨率超大的数值的来填写window_placement的注册表值,关闭所有IE窗口,然后导入该注册表(反正windows 会自动调整)

2.再次打开IE,这个时候顺便检查下注册表是否起了作用,关闭IE(其实我们的真实目的是借此机会,让windows 在注册表里自动修改调整坐标位置)

此条目发表在疑难杂症分类目录。将固定链接加入收藏夹。

留下评论