InternetQueryOption,INTERNET_PER_CONN_OPTION和INTERNET_PER_CONN_FLAGS_UI标志

时间:2013-03-22 08:41:34

标签: c windows winapi wininet

我正在编写一个使用InternetQueryOption API查询代理设置的程序。

浏览INTERNET_PER_CONN_OPTION的Windows文档 http://msdn.microsoft.com/en-us/library/windows/desktop/aa385145%28v=vs.85%29.aspx

文档中有一条注释

  

Windows 7及更高版本:
  支持Internet Explorer 8的客户端应使用INTERNET_PER_CONN_FLAGS_UI查询连接类型。如果此查询失败,则系统正在运行以前版本的Internet Explorer,客户端应使用INTERNET_PER_CONN_FLAGS再次查询。

     

使用INTERNET_PER_CONN_FLAGS恢复连接类型,无论Internet Explorer的版本如何。

我在运行IE9&amp ;;的Win7 64位计算机上使用INTERNET_PER_CONN_FLAGS代替INTERNET_PER_CONN_FLAGS_UI进行了测试一切似乎都很好。

INTERNET_PER_CONN_FLAGSINTERNET_PER_CONN_FLAGS_UI的功能文档似乎也相同。

那么使用INTERNET_PER_CONN_FLAGS_UI的原因是什么?该说明是否表明它仅适用于IE8或IE8&更大。

我的程序需要支持从运行IE6的WinXP到当前的Win7机器的所有内容。所以我不清楚我应该使用什么。

这是我的代码

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 = 0;
List.dwOptionCount = sizeof(Option)/sizeof(Option[0]);
List.dwOptionError = 0;

Option[0].Value.pszValue = 0;

List.pOptions = Option;

InternetQueryOption(NULL, INTERNET_OPTION_PER_CONNECTION_OPTION, &List, &nSize);
  1. 我应该将INTERNET_PER_CONN_FLAGS更改为INTERNET_PER_CONN_FLAGS_UI&如果INTERNET_PER_CONN_FLAGS失败,请再次使用INTERNET_PER_CONN_FLAGS_UI致电

  2. 这究竟是什么意思

      

    使用INTERNET_PER_CONN_FLAGS恢复连接类型,无论Internet Explorer的版本如何。

  3. 这是否意味着INTERNET_PER_CONN_FLAGS_UI仅与InternetQueryOptionInternetSetOption相关,我应该始终使用INTERNET_PER_CONN_FLAGS

2 个答案:

答案 0 :(得分:2)

INTERNET_PER_CONN_FLAGS_UI返回代理设置,如工具>中所示。互联网选项>连接>局域网设置。

这些设置可能与INTERNET_PER_CONN_FLAGS返回的设置不同,如果WinINET认为当前网络不使用WPAD,它将“隐藏”“自动检测”设置。这是性能优化,有关详细信息,请参阅https://stackoverflow.com/a/5138232/126229

一般来说,在向用户显示设置时,您应该只使用INTERNET_PER_CONN_FLAGS_UI;如果你的目标是确定应该使用什么代理,请使用INTERNET_PER_CONN_FLAGS。

答案 1 :(得分:1)

在您引用的文档和您想要实现的内容的描述中,我认为您的问题1和2的答案是YesYes

但是,与所有MS文档一样,它可能不清楚,过时或完全错误。因此,我建议您从问题中列出的假设开始,并使用VM在各种平台WinXP / IE6,Win8 / IE10等组合上测试代码原型。根据经验这样做可能会让您更好地了解真实事实与文档的关系,并为您提供进一步工作的测试环境。