在C#中更改WebBrowser控件的显示字体?

3
“我试图更改WebBrowser控件的显示字体。”“我已经尝试过了。”
doc.execCommand("FontName", false, "Arial");

但是它似乎只适用于选定的文本。
我想要与在IE中设置字体相同的效果-> Internet选项->常规->外观->字体。
提前致谢。
Byoungjo
-------- 更新 -------------
正如Mitchell指出的那样,在C#.Net中完成与ExeWB相同的工作是目标。
此外,更改注册表对于此操作来说有点过度工作,并且如果存在更简单的解决方案,则可能需要更简单的解决方案。 否则,我将拒绝这个FR。

所有页面都相同有效,还是仅当前页面? - Lazarus
这对于整体页面来说是可以的,但不能更改用户的IE设置。 - somatic rev
4个回答

3

实际上,您可以调用ExecWB方法,只是需要间接地这样做。我已经编写了以下代码来实现缩放(使用C# 4.0使其变得更加容易):

    private const int OLECMDID_ZOOM = 63;
    private const int OLECMDEXECOPT_DONTPROMPTUSER = 2;

    private void SetZoom(int zoom)
    {
        dynamic obj = webBrowser1.ActiveXInstance;

        obj.ExecWB(OLECMDID_ZOOM, OLECMDEXECOPT_DONTPROMPTUSER, zoom, IntPtr.Zero);
    }

尽管这暂时不是功能要求,但你的建议听起来是控制浏览器对象的好解决方案。谢谢。 - somatic rev

2
看起来你需要使用在这篇Microsoft文章中提到的execWB命令。然而,通过进一步查看文档,我没有看到你目前使用的execWB或execCommand方法作为.NET浏览器控件中的选项。因此,你可能需要调整实际的IE设置,这很可能在注册表中。

是的,目前我在网上找到的唯一解决方法就是修改注册表。但是,另一个意图并不是要更改IE的默认设置。可以理解的是,我不希望我的应用程序更改用户的IE显示设置。 - somatic rev
一个更“巧妙”的方法是在每个页面渲染之前注入一个嵌入式样式表。否则,由于WebBrowser实际上就是IE,设置需要在更高的层面进行更改。 - Mitchel Sellers
嵌入式样式表听起来是个不错的解决方案,但当我尝试这样做时:IHTMLStyleSheet styleSheet = doc.createStyleSheet("", 0); styleSheet.cssText = "BODY {font-family:"Arial"}";它会出现“Error HRESULT E_FAIL has been returned from a call to COM component”的错误。这方面可以提供更多帮助吗? - somatic rev

0

既然设置在 HKEY_CURRENT_USER/Software/Microsoft/Internet Explorer 下,您应该能够通过在 WebBrowser 站点上实现 IDocHostUIHandler2::GetOverrideKeyPath 来覆盖此设置。因为 Windows Forms 是将其 IDocHostUIHandler 实现设置为 internal 的,所以我认为您无法在 WebBrowserSite 上实现 IDocHostUIHandler2。我猜您需要从头开始,例如像 http://www.codeproject.com/KB/miscctrl/csEXWB.aspx 这样的东西。 另一个可能性是在 IDocHostUIHandler::GetHostInfo 实现中覆盖默认 css。


我选择遵循米切尔的建议。不过还是谢谢你的回答。 - somatic rev

0

如果您不在意刪除選定項,這可能會起作用:

web.Document.ExecCommand("SelectAll", false, "null");
web.Document.ExecCommand("FontName", false, "Arial"); // or any desired font
web.Document.ExecCommand("Unselect", false, "null");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接