C# 如何区分.net WebBrowser组件和实际浏览器?

C# 如何区分.net WebBrowser组件和实际浏览器?,c#,.net,webbrowser-control,C#,.net,Webbrowser Control,好的,我们有一个通过我们的软件访问的在线下载商店。最近,我们收到了允许通过普通浏览器下载的请求,只需打开一个下载页面就相当容易了。问题是,如果用户有两个下载链接,一个用于软件,另一个用于web浏览器,这会让人感到困惑,因此我们希望区分这两个链接,只显示相关的下载链接 从我收集的信息来看,.net WebBrowser组件与IE相同,并且使用相同的用户代理,因此我们不能使用它,除非我们在软件中对WebBrowser进行子类化,使其使用特定的用户代理。这是一个更明智的选择,但我们必须推出另一个更新版

好的,我们有一个通过我们的软件访问的在线下载商店。最近,我们收到了允许通过普通浏览器下载的请求,只需打开一个下载页面就相当容易了。问题是,如果用户有两个下载链接,一个用于软件,另一个用于web浏览器,这会让人感到困惑,因此我们希望区分这两个链接,只显示相关的下载链接

从我收集的信息来看,.net WebBrowser组件与IE相同,并且使用相同的用户代理,因此我们不能使用它,除非我们在软件中对WebBrowser进行子类化,使其使用特定的用户代理。这是一个更明智的选择,但我们必须推出另一个更新版本,这不太理想


有没有其他方法可以判断某人是否正在通过.net组件访问站点?我唯一的另一种选择是将商店复制到一个不同的地址,并使用不同的下载链接将人们发送到那个里。同样,这是可行的,但并不理想。

我不确定是否有更好的方法来做到这一点,但这里有一个想法。。。
WebBrowser
控件有一个属性
Document
,用于访问表示加载文档的DOM对象(加载页面后)。此对象具有可用于在加载的页面中运行某些JavaScript的属性

您可以编写一个简单的JavaScript函数,例如
hideWebDownload()
,将视图切换到应用程序在本地运行时使用的视图,并从承载
WebBrowser
控件的WinForms应用程序调用它:

webCtrl.Document.InvokeScript("hideWebDownload");

页面的默认视图将显示web的下载链接,在本地应用程序中调用此函数会将视图切换到本地下载链接。

检查window.external是否为空。IE实现window.external以拥有像AddSearchProvider这样的方法,其中大多数时间WebBrowser.ObjectForScript为空。

让您的软件在URL的查询字符串中传递一个不可见的(用户)值


这看起来很简单。

即使在微软提供的IE6虚拟硬盘上,这也很有效。