无法在Windows 7上查询代理“自动检测设置”
问题描述:
我试图捕获代理设置(“自动检测设置”)。我的代码适用于XP和Vista。 但它不是在Windows 7工作无法在Windows 7上查询代理“自动检测设置”
请参阅目标平台的细节
Windows 7企业版,IE 8.0.7600.16385,Wininet.dll中8.0.7600.16535
请参阅代码片段
INTERNET_PER_CONN_OPTION_LIST List;
INTERNET_PER_CONN_OPTION Option[1];
unsigned long nSize = sizeof(INTERNET_PER_CONN_OPTION_LIST);
Option[0].dwOption = INTERNET_PER_CONN_FLAGS;
List.dwSize = sizeof(INTERNET_PER_CONN_OPTION_LIST);
List.pszConnection = NULL;
List.dwOptionCount = 1;
List.dwOptionError = 0;
List.pOptions = Option;
if(!InternetQueryOption(NULL, INTERNET_OPTION_PER_CONNECTION_OPTION, &List, &nSize))
AfxMessageBox(L"InternetQueryOption failed! (%d)\n");
TCHAR a[100];
swprintf(a, L"Flag value is : %d",Option[0].Value.dwValue, 80);
AfxMessageBox(a);
但在Windows 7中,即使“自动检测设置”,在IE选项被选中,该方案称,该标志未设置
我尝试使用WinHttp API也如下所示。
WINHTTP_CURRENT_USER_IE_PROXY_CONFIG stProxyConfig = {0};
WinHttpGetIEProxyConfigForCurrentUser(&stProxyConfig);
if (stProxyConfig.fAutoDetect == TRUE)
AfxMessageBox(L"Auto proxy detection enabled");
else
AfxMessageBox(L"Auto proxy detection disabled");
在Windows 7上,上述代码也无法捕获“自动检测设置”选项。对此的任何输入都非常感谢。
感谢 约翰
答
这是IE8引入了新的性能优化功能,称为SmartWPAD。
WinINET会跟踪给定的网络是否具有WPAD服务器(例如,使用自动检测功能来查找)。如果网络没有WPAD服务器,那么当您执行InternetQueryOption时,WinINET会有效地“掩盖”“使用自动检测”位,以便您的代码不会浪费大量时间进行代理查找,该代理将不会返回代理这个网络。
如果您必须获取UI状态(击败WinINET SWPAD功能),例如,因为您计划采用此信息并将其缓存以供其他网络或类似用途使用,则必须首先查询INTERNET_PER_CONN_FLAGS_UI - 使用此选项时,您将取回UI状态,而不受SWPAD功能的影响。
如果此查询失败,那么系统正在运行先前版本的Internet Explorer,并且客户端应使用INTERNET_PER_CONN_FLAGS再次查询。
答
我有一个C#代码片段,您可以选中/取消选中IE连接设置的“自动检测设置”复选框。你可以在这段代码中找到你要找的东西。
public bool IsIEAutoDetectProxy(bool set)
{
// Setting Proxy information for IE Settings.
RegistryKey RegKey = Registry.CurrentUser.OpenSubKey(@"Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\Connections", true);
byte[] defConnection = (byte[])RegKey.GetValue("DefaultConnectionSettings");
if (defConnection[8] == Convert.ToByte(9))
return true;
else
return false;
}