使用 WebBrowser .NET 控件放大网页

2024-03-05

IE7 中内置了“缩放”功能(显示在状态栏中),允许您放大至 400%。我在演示/模拟应用程序中使用 WebBrowser .NET 控件,并且需要放大网页。这是可能吗?

(我不想简单地拍摄页面照片并将其放大,因为我需要使用页面上的链接和按钮)。

如果重要的话,我正在使用 .NET 2.0。


似乎有一个解决方案IE Zoom http://slingkid.blogsome.com/2007/04/13/ie-zoom/这涉及到覆盖AttachInterfaces and DetachInterfaces in the WebBrowser得到一个IWebBrowser2接口,然后调用ExecWB with OLECMDID_OPTICAL_ZOOM.

我试过他的示例代码 http://teleios.bz/download/ZoomBrowser.zip它似乎有效; (删节的)相关类如下所示:

using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace ZoomBrowser
{
    public partial class MyBrowser : WebBrowser
    {
        #region enums
        public enum OLECMDID
        {
            // ...
            OLECMDID_OPTICAL_ZOOM = 63,
            OLECMDID_OPTICAL_GETZOOMRANGE = 64,
            // ...
        }

        public enum OLECMDEXECOPT
        {
            // ...
            OLECMDEXECOPT_DONTPROMPTUSER,
            // ...
        }

        public enum OLECMDF
        {
            // ...
            OLECMDF_SUPPORTED = 1
        }
        #endregion

        #region IWebBrowser2
        [ComImport, /*SuppressUnmanagedCodeSecurity,*/
         TypeLibType(TypeLibTypeFlags.FOleAutomation | 
                     TypeLibTypeFlags.FDual |       
                     TypeLibTypeFlags.FHidden), 
         Guid("D30C1661-CDAF-11d0-8A3E-00C04FC9E26E")]
        public interface IWebBrowser2
        {
            [DispId(100)]  void GoBack();
            [DispId(0x65)] void GoForward();
            [DispId(0x66)] void GoHome();
            [DispId(0x67)] void GoSearch();
            [DispId(0x68)] void Navigate([In] string Url, 
                                         [In] ref object flags, 
                                         [In] ref object targetFrameName, 
                                         [In] ref object postData, 
                                         [In] ref object headers);
            [DispId(-550)] void Refresh();
            [DispId(0x69)] void Refresh2([In] ref object level);
            [DispId(0x6a)] void Stop();
            [DispId(200)]  object Application 
                           { [return: 
                              MarshalAs(UnmanagedType.IDispatch)] get; }
            [DispId(0xc9)] object Parent 
                           { [return: 
                              MarshalAs(UnmanagedType.IDispatch)] get; }
            [DispId(0xca)] object Container 
                           { [return: 
                              MarshalAs(UnmanagedType.IDispatch)] get; }
            [DispId(0xcb)] object Document 
                           { [return: 
                              MarshalAs(UnmanagedType.IDispatch)] get; }
            [DispId(0xcc)] bool TopLevelContainer { get; }
            [DispId(0xcd)] string Type { get; }
            [DispId(0xce)] int Left { get; set; }
            [DispId(0xcf)] int Top { get; set; }
            [DispId(0xd0)] int Width { get; set; }
            [DispId(0xd1)] int Height { get; set; }
            [DispId(210)]  string LocationName { get; }
            [DispId(0xd3)] string LocationURL { get; }
            [DispId(0xd4)] bool Busy { get; }
            [DispId(300)]  void Quit();
            [DispId(0x12d)] void ClientToWindow(out int pcx, out int pcy);
            [DispId(0x12e)] void PutProperty([In] string property, 
                                             [In] object vtValue);
            [DispId(0x12f)] object GetProperty([In] string property);
            [DispId(0)] string Name { get; }
            [DispId(-515)] int HWND { get; }
            [DispId(400)] string FullName { get; }
            [DispId(0x191)] string Path { get; }
            [DispId(0x192)] bool Visible { get; set; }
            [DispId(0x193)] bool StatusBar { get; set; }
            [DispId(0x194)] string StatusText { get; set; }
            [DispId(0x195)] int ToolBar { get; set; }
            [DispId(0x196)] bool MenuBar { get; set; }
            [DispId(0x197)] bool FullScreen { get; set; }
            [DispId(500)] void Navigate2([In] ref object URL, 
                                         [In] ref object flags, 
                                         [In] ref object targetFrameName, 
                                         [In] ref object postData, 
                                         [In] ref object headers);
            [DispId(0x1f5)] OLECMDF QueryStatusWB([In] OLECMDID cmdID);
            [DispId(0x1f6)] void ExecWB([In] OLECMDID cmdID, 
                                        [In] OLECMDEXECOPT cmdexecopt, 
                                        ref object pvaIn, IntPtr pvaOut);
            [DispId(0x1f7)] void ShowBrowserBar([In] ref object pvaClsid, 
                                                [In] ref object pvarShow, 
                                                [In] ref object pvarSize);
            [DispId(-525)] WebBrowserReadyState ReadyState { get; }
            [DispId(550)] bool Offline { get; set; }
            [DispId(0x227)] bool Silent { get; set; }
            [DispId(0x228)] bool RegisterAsBrowser { get; set; }
            [DispId(0x229)] bool RegisterAsDropTarget { get; set; }
            [DispId(0x22a)] bool TheaterMode { get; set; }
            [DispId(0x22b)] bool AddressBar { get; set; }
            [DispId(0x22c)] bool Resizable { get; set; }
        }
        #endregion

        private IWebBrowser2 axIWebBrowser2;

        public MyBrowser()
        {           
        }

        protected override void AttachInterfaces(
            object nativeActiveXObject)
        {
            base.AttachInterfaces(nativeActiveXObject);
            this.axIWebBrowser2 = (IWebBrowser2)nativeActiveXObject;
        }

        protected override void DetachInterfaces()
        {
            base.DetachInterfaces();
            this.axIWebBrowser2 = null;
        }

        public void Zoom(int factor)
        {
            object pvaIn = factor;
            try
            {
                this.axIWebBrowser2.ExecWB(OLECMDID.OLECMDID_OPTICAL_ZOOM,
                   OLECMDEXECOPT.OLECMDEXECOPT_DONTPROMPTUSER, 
                   ref pvaIn, IntPtr.Zero);
            }
            catch (Exception)
            {
                throw;
            }
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 WebBrowser .NET 控件放大网页 的相关文章

随机推荐

  • 是否有理由对十六进制 CSS 颜色值使用大写字母? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我发现 CSS 属性值中的颜色通常以大写形式编写 foo bar background color A41B35 color FFF 但您也可以
  • 在 json 中传递函数并执行

    有什么方法可以将函数作为 json 字符串传递 使用 JSON stringify 进行转换 将其发送到另一个函数 解析 json 然后执行 json 中的函数 我正在使用 jquery 和 javascript 是的你可以 有很多方法可以
  • 位置参数与关键字参数

    基于this http infohost nmt edu tcc help pubs python web def html 位置参数是后面不跟等号的名称 和默认值 关键字参数后跟一个等号和一个表达式 给出它的默认值 def rectang
  • 如何停止位置管理器?

    不知道为什么 但有时 LocationManager 在关闭应用程序后仍然工作 我在一个 Activity 的 onCreate Methode 中调用 startGPS 只有一个 让我称之为 StartActivity protected
  • 有 AFHTTPClient 使用 AFNetworking 发布 json 的示例吗?

    寻找如何发布 json 的示例AFHTTPClient 我看到有一个 postPath 方法需要一个NSDictionaryAFJSONEncode 方法返回一个NSData 有没有一种简单的方法可以将对象序列化为NSDictionary
  • Apache Ignite.NET SQL 不搜索非英文字符

    使用 Apache Ignite NET 2 3 0 尝试使用 Linq 扩展 Apache Ignite Linq 进行搜索 配置 CacheConfiguration new new CacheConfiguration QueryEn
  • 仅用一个正则表达式进行多次替换

    为了简单起见 假设我们有以下字符串 约翰爱玛丽 玛丽爱杰克 而杰克不关心约翰和玛丽 假设我想使用正则表达式来更改该故事的角色 约翰 gt 约瑟夫 玛丽 gt 杰西卡 杰克 gt 基思 当然 我可以一次更改其中一项 但我想知道是否可以仅用一个
  • 如何更改单个显示器的伽玛斜坡(NVidia Config)?

    我尝试仅更改一个屏幕而不是所有屏幕的伽玛值 I use 这段代码 http devadd com 2010 10 too bright too early 帮我 但是这个SetDeviceGammaRamp GetDC IntPtr Zer
  • OpenBUGS - 变量未定义

    我在 OpenBUGS 中使用以下代码来执行分析 model for i in 1 467 probit p i lt gamma0 gamma1 drug i gamma2 CD41 i R i dbern p i junk i lt I
  • 在 Android 中向 AlertDialog 添加垂直滚动条?

    我想向 AlertDialog 添加一个垂直滚动条 因为我的文本太长 无法在一个屏幕上显示 我尝试过使用 android scrollbars vertical android scrollbarAlwaysDrawVerticalTrac
  • 顺序和并行版本给出不同的结果 - 为什么?

    我有一个嵌套循环 L 和 A 是完全定义的输入 pragma omp parallel for schedule guided shared L A reduction dummy for i k 1 i
  • 使用 compose 重新创建命名卷

    V renew anon volumes Recreate anonymous volumes instead of retrieving data from the previous containers Does docker comp
  • 如何在单击该图像的 onclick 事件时获取图像源路径

    当图像的 onclick 事件被触发时 我需要获取图像源 我尝试使用 document getElementById example src 但浏览器上的控制台显示 未捕获的类型错误 无法读取 null 的属性 src img src em
  • NamedPipeServerStream 接收 MAX=1024 字节,为什么?

    我正在使用 NamedPipeStream 客户端和服务器 我将数据从客户端发送到服务器 该数据是一个包含二进制数据的序列化对象 当服务器端接收数据时 它总是有最大1024大小 而客户端发送更多 因此 当尝试序列化数据时 这会导致以下异常
  • 可定制的字母替换器

    我一直在开发一个几乎可以替代字母的应用程序 所以你会有一封信和一个输入框 该字母代表将被替换的字母 您在输入框中写下您想要替换的内容 为此 我使用了正则表达式和对象 如果你像这样徘徊 匿名的 到底出了什么问题 julianavar 有什么不
  • 禁用 TabLayout 中的选项卡[重复]

    这个问题在这里已经有答案了 我用过TabLayout来自我的应用程序中最新的设计支持库 这些选项卡附加到一个视图分页器 该视图分页器加载每个选项卡的片段 我想禁用所有选项卡 直到视图页面加载用户选择的选项卡的片段 我无法禁用选项卡布局或使其
  • 使用 EPPlus 将 Excel 工作表格式化为表格

    我有一个 NET Core 应用程序 并且我不熟悉将 EPPlus 库与 C 一起使用 我有一个数据表 其中填充了我目前正在使用 EPPlus 将其插入到 Excel 工作表中的数据 我想知道是否有一种方法可以在将数据添加到工作表之后而不是
  • CUDA PTX 代码 %envreg<32> 特殊寄存器

    我尝试使用 CUDA 驱动程序 API 运行由 cl 内核生成的 PTX 汇编代码 我采取的步骤是这些 标准 opencl 程序 1 加载 cl内核 2 JIT编译 3 获取编译好的ptx代码并保存 到目前为止 一切都很好 我注意到 ptx
  • 在 Mobile Safari 上调试缓慢的 Angular-ui-router 状态更改

    我正在编写一个角度应用程序 使用 Angular ui router 来管理状态 路由 在桌面浏览器 Chrome Safari 上 这工作正常 然而 在 iPhone 4 上的 IOS 6 上的 Mobile Safari 上 以及 iP
  • 使用 WebBrowser .NET 控件放大网页

    IE7 中内置了 缩放 功能 显示在状态栏中 允许您放大至 400 我在演示 模拟应用程序中使用 WebBrowser NET 控件 并且需要放大网页 这是可能吗 我不想简单地拍摄页面照片并将其放大 因为我需要使用页面上的链接和按钮 如果重