我正在制作一个包含一个WebBrowser
元素的应用程序,我想让应用程序显示该用户默认浏览器的用户代理。
我知道如何通过注册表项获取默认浏览器以及如何获取浏览器的用户代理,但无法弄清楚如何将两者结合起来。这可能吗?
我正在制作一个包含一个WebBrowser
元素的应用程序,我想让应用程序显示该用户默认浏览器的用户代理。
我知道如何通过注册表项获取默认浏览器以及如何获取浏览器的用户代理,但无法弄清楚如何将两者结合起来。这可能吗?
我要做的(当然,这有点过头了)是包含一个 Web 服务器并从这个 Web 服务器请求一个 URL,从而获得用户代理。
即大致这将包括:
WebBrowser
控件调用网络服务器的本地 URL(例如http://127.0.0.1:48384/test)我已经多次成功地在我的应用程序中使用了 Web 服务器。一个例子是我在代码项目中的HTML 编辑控件。
试试这个(这是一个检查浏览器是否是手持设备的简单功能)
string strUserAgent = Request.UserAgent.ToString().ToLower();
bool status = false;
if (strUserAgent != null)
{
if (Request.Browser.IsMobileDevice == true ||
strUserAgent.Contains("iphone") ||
strUserAgent.Contains("blackberry") ||
strUserAgent.Contains("mobile") ||
strUserAgent.Contains("windows ce") ||
strUserAgent.Contains("opera mini") ||
strUserAgent.Contains("palm"))
{
status = true;
}
}
这是一个获取和设置 UserAgent 的非常简单的类。
using System.Runtime.InteropServices;
public static class UserAgent
{
[DllImport("urlmon.dll", CharSet = CharSet.Ansi)]
private static extern int UrlMkGetSessionOption(
int dwOption, StringBuilder pBuffer, int dwBufferLength, out int pdwBufferLength, int dwReserved);
[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;
const int URLMON_OPTION_USERAGENT_REFRESH = 0x10000002;
const int URLMON_OPTION_URL_ENCODING = 0x10000004;
public static string Value
{
get
{
StringBuilder builder = new StringBuilder(512);
int returnLength;
UrlMkGetSessionOption(URLMON_OPTION_USERAGENT, builder, builder.Capacity, out returnLength, 0);
string value = builder.ToString();
return value;
}
set
{
UrlMkSetSessionOption(URLMON_OPTION_USERAGENT, value, value.Length, 0);
}
}
}
我一直在寻找一种从 Windows 而非 Web 获取 UserAgent 的体面方法,当我发现更改 WebBrowser 控件的用户代理时, 受 urlmon.dll 的 DLLImport 启发,我查看了 pinvoke.net,发现:http ://pinvoke.net/default.aspx/urlmon.UrlMkGetSessionOption
调用者:
namespace GetUserAgent
{
class Program
{
// The name of the program that was started by user
// See: Assembly.GetEntryAssembly Method ()
// https://msdn.microsoft.com/en-us/library/system.reflection.assembly.getentryassembly.aspx
public static string ExecName
{
get
{
// The name of the executable that was started by user
return System.Reflection.Assembly.GetEntryAssembly().GetName().Name;
}
}
static void Main(string[] args)
{
foreach (string arg in args)
{
if ((arg == "/?")
|| (arg == "-?")
|| (arg == "--help"))
{
Console.Out.WriteLine(
"For /F \"tokens=*\" %%U In ('{0}') Do Set UserAgent=%%U",
ExecName);
return;
}
}
string userAgent = UserAgent.Value;
Console.Out.WriteLine(userAgent);
}
}
}
这会生成 UserAgent 值。争论 /?显示如何在命令脚本中使用它。