使用urlmon.dll更改用户代理

时间:2012-03-19 14:27:35

标签: c# winforms internet-explorer

在寻找更改webBrowser控件的用户代理字符串的方法时,我找到了这个漂亮的方法:

    [DllImport("urlmon.dll", CharSet = CharSet.Ansi)]
    private static extern int UrlMkSetSessionOption(int dwOption, string pBuffer, int dwBufferLength, int dwReserved);
    const int URLMON_OPTION_USERAGENT = 0x10000001;

    public static void ChangeUserAgent(string Agent)
    {
        UrlMkSetSessionOption(URLMON_OPTION_USERAGENT, Agent, Agent.Length, 0);
    }

基本上,我需要一种方法来更改用户代理,直到我想再次更改它。

通常:

webBrowser1.Navigate ("http://www.whatsmyuseragent.com", "_self" , null, "User-Agent: Luke's Web Browser");

仅适用于一个请求。

但是,我一直在读到第一种方法每个会话只能运行一次。就我而言,它的工作次数和我想要的一样多。所以我的猜测是,这与计算机上的Internet Explorer实例有关吗?

所以我的问题是:

  • 最终用户需要在他们的计算机上安装哪个版本才能使此方法按预期工作? IE浏览器。我想要改变。
  • 由于这与计算机上安装的Internet Explorer有关,更改应用程序中的用户代理是否会影响浏览器?
  • 如果用户打开了Internet Explorer,此方法是否仍然可以使用?

谢谢!

1 个答案:

答案 0 :(得分:1)

我们使用“UrlMkSetSessionOption”功能相当多。我们有一个“自定义Web浏览器shell”,它实际上只是嵌入到全屏WinForms程序中的IE用户控件。我们更改用户代理以向我们的Web服务器标识这是我们的“自定义”浏览器shell。但要回答您的具体问题:

  1. 我们在XP上使用IE8,在Win7上使用IE9。我认为它与版本无关,但我们总是使用最新版本。
  2. 据我们所知,更改此设置只会影响在调用该方法的进程中运行的IE。因此,如果用户从桌面启动IE,则用户代理将保持不变。如果重新启动程序,则用户代理将保持不变。
  3. 无论是否运行独立的IE实例,它都能正常工作。这些独立实例的用户代理保持不变。