无法在Windows 7上查询代理“自动检测设置”

我正在尝试捕获代理设置(“自动检测设置”)。 我的代码适用于XP和Vista。 但它不适用于Windows 7

请看目标平台的细节

Windows 7 Enterprise,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上,上面的代码也无法捕获“自动检测设置”选项。 任何input这是高度赞赏。

谢谢约翰

这是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; }