我正在编写一个使用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_FLAGS
和INTERNET_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);
我应该将INTERNET_PER_CONN_FLAGS
更改为INTERNET_PER_CONN_FLAGS_UI
&如果INTERNET_PER_CONN_FLAGS
失败,请再次使用INTERNET_PER_CONN_FLAGS_UI
致电
这究竟是什么意思
使用INTERNET_PER_CONN_FLAGS恢复连接类型,无论Internet Explorer的版本如何。
这是否意味着INTERNET_PER_CONN_FLAGS_UI
仅与InternetQueryOption
和InternetSetOption
相关,我应该始终使用INTERNET_PER_CONN_FLAGS
。
答案 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的答案是Yes
和Yes
。
但是,与所有MS文档一样,它可能不清楚,过时或完全错误。因此,我建议您从问题中列出的假设开始,并使用VM在各种平台WinXP / IE6,Win8 / IE10等组合上测试代码原型。根据经验这样做可能会让您更好地了解真实事实与文档的关系,并为您提供进一步工作的测试环境。