虽然设置 IgnoreZoomLevel 属性允许您无错误地打开浏览器,但测试不会发现缩放级别不是 100% 的元素。
根据您的系统 DPI 设置,发送 Ctrl+0 也不会总是得到预期的结果。如果您选择了中等 (120 dpi) 或较大 (144 dpi)(Windows 7 设置),Ctrl+0 会将缩放设置为 125% 或 150%。
我发现的一种解决方法是根据 DPI 设置通过在注册表中打开 IE 之前编辑设置来设置缩放级别。这不需要管理员权限,因为所有内容都位于 HKEY_CURRENT_USER 下。
这是我想出的小助手类。(C#)
using Microsoft.Win32;
namespace WebAutomation.Helper
{
public static class InternetExplorerHelper
{
private static int m_PreviousZoomFactor = 0;
public static void SetZoom100()
{
// Get DPI setting.
RegistryKey dpiRegistryKey = Registry.CurrentUser.OpenSubKey("Control Panel\\Desktop\\WindowMetrics");
int dpi = (int)dpiRegistryKey.GetValue("AppliedDPI");
// 96 DPI / Smaller / 100%
int zoomFactor100Percent = 100000;
switch (dpi)
{
case 120: // Medium / 125%
zoomFactor100Percent = 80000;
break;
case 144: // Larger / 150%
zoomFactor100Percent = 66667;
break;
}
// Get IE zoom.
RegistryKey zoomRegistryKey = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Internet Explorer\\Zoom", true);
int currentZoomFactor = (int)zoomRegistryKey.GetValue("ZoomFactor");
if (currentZoomFactor != zoomFactor100Percent)
{
// Set IE zoom and remember the previous value.
zoomRegistryKey.SetValue("ZoomFactor", zoomFactor100Percent, RegistryValueKind.DWord);
m_PreviousZoomFactor = currentZoomFactor;
}
}
public static void ResetZoom()
{
if (m_PreviousZoomFactor > 0)
{
// Reapply the previous value.
RegistryKey zoomRegistryKey = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Internet Explorer\\Zoom", true);
zoomRegistryKey.SetValue("ZoomFactor", m_PreviousZoomFactor, RegistryValueKind.DWord);
}
}
}
}
我想出了比较注册表中不同系统 DPI 设置下的 ZoomFactor 值和 IE 缩放设置为 100% 的值。在较新的 Windows 版本中有超过 3 个 DPI 设置,因此如果需要,您需要扩展类。
您也可以修改它以计算您想要的任何缩放级别,但这与我无关。
我只是InternetExplorerHelper.SetZoom100();
在打开 IE 之前和InternetExplorerHelper.ResetZoom()
关闭它之后打电话。